DSPRelated.com
Forums

DS-CDMA simulation using Matlab

Started by BULDO March 29, 2008
Hi all
When i ran ds-cdma code below on matlab, i received this message:???
Undefined function or method 'hrollfcoef' for input arguments of type
'double'.

Error in ==> dscdmareal at 20
[xh]   = hrollfcoef(irfn,IPOINT,sr,alfs,1);                         %
T FILTER FUNCTION

%%%%%% DS-CDMA
clear all
close all



%**************************** Preparation part
*****************************

sr   = 256000.0;                                                    %
symbol rate
ml   = 2;                                                           %
number of modulation levels
br   = sr * ml;                                                     %
bit rate
nd   = 100;                                                         %
number of symbol
ebn0 = 3;                                                           %
Eb/No

%************************** Filter initialization
**************************

irfn   = 21;                                                        %
number of filter taps
IPOINT =  8;                                                        %
number of oversample
alfs   =  0.5;                                                      %
roll off factor
[xh]   = hrollfcoef(irfn,IPOINT,sr,alfs,1);                         %
T FILTER FUNCTION
[xh2]  = hrollfcoef(irfn,IPOINT,sr,alfs,0);                         %
R FILTER FUNCTION

%********************** Spreading code initialization
**********************

user  = 1;                                                          %
number of users
seq   = 1;                                                          %
1:M-sequence  2:Gold  3:Orthogonal Gold
stage = 3;                                                          %
number of stages
ptap1 = [1 3];                                                      %
position of taps for 1st
ptap2 = [2 3];                                                      %
position of taps for 2nd
regi1 = [1 1 1];                                                    %
initial value of register for 1st
regi2 = [1 1 1];                                                    %
initial value of register for 2nd

%******************** Generation of the spreading code
*********************

switch seq
case 1                                                              %
M-sequence
    code = mseq(stage,ptap1,regi1,user);
case 2                                                              %
Gold sequence
    m1   = mseq(stage,ptap1,regi1);
    m2   = mseq(stage,ptap2,regi2);
    code = goldseq(m1,m2,user);
case 3                                                              %
Orthogonal Gold sequence
    m1   = mseq(stage,ptap1,regi1);
    m2   = mseq(stage,ptap2,regi2);
    code = [goldseq(m1,m2,user),zeros(user,1)];
end
code = code * 2 - 1;
clen = length(code);

%************************** Fading initialization
**************************

rfade  = 0;                                                         %
Rayleigh fading 0:nothing 1:consider
itau   = [0,8];                                                     %
delay time
dlvl1  = [0.0,40.0];                                                %
attenuation level
n0     = [6,7];                                                     %
number of waves to generate fading
th1    = [0.0,0.0];                                                 %
initial Phase of delayed wave
itnd1  = [3001,4004];                                               %
set fading counter
now1   = 2;                                                         %
number of directwave + delayed wave
tstp   = 1 / sr / IPOINT / clen;                                    %
time resolution
fd     = 160;                                                       %
doppler frequency [Hz]
flat   = 1;                                                         %
flat Rayleigh environment
itndel = nd * IPOINT * clen * 30;                                   %
number of fading counter to skip

%**************************** START CALCULATION
****************************

nloop = 10;                                                       %
simulation number of times

for no=1:10,
   ebn0=no;

   noe   = 0;
   nod   = 0;

for ii=1:nloop

%****************************** Transmitter
********************************
    data = rand(user,nd*ml) > 0.5;

    [ich, qch]  = qpskmod(data,user,nd,ml);                         %
QPSK modulation
    [ich1,qch1] = spread(ich,qch,code);                             %
spreading
    [ich2,qch2] = compoversamp2(ich1,qch1,IPOINT);                  %
over sampling
    [ich3,qch3] = compconv2(ich2,qch2,xh);                          %
filter

    if user == 1                                                    %
transmission
        ich4 = ich3;
        qch4 = qch3;
    else
        ich4 = sum(ich3);
        qch4 = sum(qch3);
    end

%***************************** Fading channel
******************************

    if rfade == 0
        ich5 = ich4;
        qch5 = qch4;
    else
        [ich5,qch5] = sefade(ich4,qch4,itau,dlvl1,th1,n0,itnd1, ... %
fading channel
                             now1,length(ich4),tstp,fd,flat);
        itnd1 = itnd1 + itndel;
    end

%******************************** Receiver
*********************************

    spow = sum(rot90(ich3.^2 + qch3.^2)) / nd;                      %
attenuation Calculation
    attn = sqrt(0.5 * spow * sr / br * 10^(-ebn0/10));

    [ich6,qch6] = comb2(ich5,qch5,attn);                            %
Add White Gaussian Noise (AWGN)
    [ich7,qch7] = compconv2(ich6,qch6,xh2);                         %
filter

    sampl = irfn * IPOINT + 1;
    ich8  = ich7(:,sampl:IPOINT:IPOINT*nd*clen+sampl-1);
    qch8  = qch7(:,sampl:IPOINT:IPOINT*nd*clen+sampl-1);

    [ich9 qch9] = despread(ich8,qch8,code);                         %
despreading

    demodata = qpskdemod(ich9,qch9,user,nd,ml);                     %
QPSK demodulation

%************************** Bit Error Rate (BER)
***************************

    noe2 = sum(sum(abs(data-demodata)));
    nod2 = user * nd * ml;
    noe  = noe + noe2;
    nod  = nod + nod2;

    fprintf('%d\t%e\n',ii,noe2/nod2);

end

%******************************** Data file
********************************

ber = noe / nod;
beri(no)=ber;
fprintf('%d\t%d\t%d\t%e\n',ebn0,noe,nod,noe/nod);                   %
fprintf: built in function
fid = fopen('BER.dat','a');
fprintf(fid,'%d\t%e\t%f\t%f\t\n',ebn0,noe/nod,noe,nod);             %
fprintf: built in function
fclose(fid);

end
%******************************** end of file
********************************

%data
figure(1),plot(data);
xlabel('Time');ylabel('Amplitude');title('data');

%CDMA QPSK modulation ich
%figure(2),plot(ich),grid;
%xlabel('Time');ylabel('Amplitude');title('QPSK Ich');

%CDMA QPSK modulation qch
%figure(3),plot(qch),grid;
%xlabel('Time');ylabel('Amplitude');title('QPSK qch');

%spreading
%figure(4),plot(ich1),grid;
%xlabel('Time');ylabel('Amplitude');title('spreaded Ich');

%figure(5),plot(qch1),grid;
%xlabel('Time');ylabel('Amplitude');title('spreaded qch');

%oversampling
%figure(6),plot(ich2),grid;
%xlabel('Time');ylabel('Amplitude');title('oversampled Ich');

%figure(7),plot(qch2),grid;
%xlabel('Time');ylabel('Amplitude');title('oversampled qch');

%filter
%figure(8),plot(ich3),grid;
%xlabel('Time');ylabel('Amplitude');title('filtered Ich');

%figure(9),plot(qch3),grid;
%xlabel('Time');ylabel('Amplitude');title('filtered qch');


%transmission
figure(2),plot(ich4),grid;
xlabel('Time');ylabel('Amplitude');title('transmission Ich');

figure(3),plot(qch4),grid;
xlabel('Time');ylabel('Amplitude');title('transmission qch');

%received signal

figure(4),plot(ich7),grid;
xlabel('Time');ylabel('Amplitude');title('received Ich');

figure(5),plot(qch7),grid;
xlabel('Time');ylabel('Amplitude');title('received qch');

%despread

figure(6),plot(ich9),grid;
xlabel('Time');ylabel('Amplitude');title('despread Ich');

figure(7),plot(qch9),grid;
xlabel('Time');ylabel('Amplitude');title('despread qch');


figure(8),plot(demodata),grid;
xlabel('Time');ylabel('Amplitude');title('demodata');


figure(9);
semilogy(beri,'*');
hold on

for i=1:10,
   tmp=10^(i/10);
   tmp=sqrt(tmp);
   ber(i)=0.5*erfc(tmp);
end
semilogy(ber),grid;
xlabel('Eb/No[dB]');ylabel('BER');title('Performance CDMA');


Can anyone tells how to solve the problem? Thanks,best regards.
>Undefined function or method 'hrollfcoef' for input arguments of type >'double'.
It looks as if hrollfcoef is not defined as a function anywhere. Do you have a file named hrollfcoef.m in your path? This is a typical response when the filename does not match the function call. Mark