⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dscdma.m

📁 一些基于CDMA的编码程序
💻 M
字号:
% Program CDMA-6
%
% dscdma.m
%
% Simulation program to realize DS-CDMA system
%

% ---------------------------- Preparation part ---------------------------------

sr     = 256000;                      % symbol rate
ml     = 2;                           % number of modulation level
br     = sr*ml;                       % bit rate
nd     = 100;                         % number of symbol
ebn0   = 3;                           % Eb/N0

% ---------------------------- 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 direct wave + delayed wave
tstp   = 1/sr/IPOINT/clen;            % time resolution
fd     = 160;                         % doppler frequency [Hz]
flat   = 1;                           % flat Rayleigh environment
itnde1 =nd*IPOINT*clen*30;            % number of fading counter to skip

% -------------------------- Start calculation ------------------------------------

nloop = 1000;                         % simulation number of times
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 usr == 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,now1,length(ich4),tstp,fd,flat);
        itnd1 = itnd1+itnde;
    end
    
% ---------------------------- Receiver -------------------------------------------

    spow = sum(rot90(ich3.^2+qch3.^2))/nd;                        % attenuation calculation
    attn = sqrt(0.5*spow8sr/br*10^(-ebn0/10));
    
    [ich6,qch6] = comb2(ich5,qch5,attn) ;                         % AWGN
    [ich7,qch7] = compconv2(ich6,qch6,xh2);                       % filter
    
    samp1       = irfn*IPOINT + 1;
    ich8        = ich7(:,samp1:IPOINT:IPOINT*nd*clen+samp1-1);
    qch8        = qch7(:,samp1:IPOINT:IPOINT*nd*clen+samp1-1);
    [ich9,qch9] = despread(ich8,qch8,code);                       % despreading
    
    demodata    = qpskdemod(ich9,qch9,user,nd,ml);                % QPDK 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;
fprintf('%d\t%d\t%ed\t%e\n',ebn0,noe,nod,noe/nod);
fid = fopen('BER.dat','a');
fprintf(fid,'%d\t%e\t%f\t%f\t\n',ebn0,noe/nod,noe,nod);
fclose(fid);

% ------------------------------ end of file --------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -