www.gusucode.com > 无线通信FPGA设计源码程序 > 无线通信FPGA设计源码程序/matlab代码/matlab/c13/wcdmasource.m

    len=76800;  %产生两帧数据
pn9_output=zeros(1,len);   %测试源的输出
Fs=3.84*8e6;  %抽样频率
sf_length=128;   %扩频因子
tpc=zeros(15,2);
slot=zeros(15,8);
seed=[1 1 zeros(1,7)];   %将不同信道的数作为pn9的种子
%不同码路的延迟,见25.141协议表6.2
time=[86 134 52 45 143 112 59 23 1 88 30 18 30 61 128 143 83 25 103 97 56 104 51 26 137 65 37 125 149 123 83 5 91 7 32 21 29 59 22 138 31 17 9 69 49 20 57 121 127 114 100 76 141 82 64 149 87 98 46 37 87 149 85 69];
%不同码路的扩频码编号,见25.141协议表6.2
code=[2 11 17 23 31 38 47 55 62 69 78 85 94 102 113 119 7 13 20 27 35 41 51 58 64 74 82 88 97 108 117 125 4 9 12 14 19 22 26 28 34 36 40 44 49 53 56 61 63 66 71 76 80 84 87 91 95 99 105 110 116 118 122 126];
%不同码路的增益,见25.141协议表6.2
db=[-16 -16 -16 -17 -18 -20 -16 -17 -16 -19 -22 -20 -16 -17 -19 -21 -19 -21 -18 -20 -24 -24 -22 -21 -18 -20 -17 -18 -19 -23 -22 -21 -17 -18 -20 -17 -19 -21 -19 -23 -22 -19 -24 -23 -22 -19 -22 -21 -18 -19 -22 -21 -19 -21 -19 -21 -20 -25 -25 -25 -24 -22 -20 -15];

slot(1,:)=[-1 -1 -1 -1 -1 -1 -1 1];
slot(2,:)=[-1 -1 1 1 -1 -1 -1 1];
slot(3,:)=[-1 -1 1 -1 -1 -1 1 -1];
slot(4,:)=[-1 -1 1 1 -1 -1 1 1];
slot(5,:)=[-1 -1 -1 1 -1 -1 1 -1];
slot(6,:)=[-1 -1 -1 -1 -1 -1 -1 1];
slot(7,:)=[-1 -1 -1 -1 -1 -1 1 1];
slot(8,:)=[-1 -1 -1 1 -1 -1 1 1];
slot(9,:)=[-1 -1 1 -1 -1 -1 -1 1];
slot(10,:)=[-1 -1 -1 -1 -1 -1 -1 -1];
slot(11,:)=[-1 -1 1 -1 -1 -1 1 -1];
slot(12,:)=[-1 -1 -1 1 -1 -1 -1 -1];
slot(13,:)=[-1 -1 -1 1 -1 -1 1 1];
slot(14,:)=[-1 -1 1 1 -1 -1 -1 -1];
slot(15,:)=[-1 -1 1 1 -1 -1 -1 -1];

%产生OVSF扩频码
sf=ovsf(sf_length);
%产生扰码
scr=scramble (0, 1);
%PN9序列的生成
for i=1:2:15
    tpc(i,:)=[1 1];
end
for i=2:2:14
    tpc(i,:)=[-1 -1];
end
for k=1:64
    seed_temp1=dec2bin(code(k));
    temp=zeros(1,length(seed_temp1));
    for i=1:length(seed_temp1)
        if seed_temp1(i)=='0'
            c=0;
        else
            c=1;
        end
        temp(i)=c;
    end;
    seed_temp=[zeros(1,7-length(temp)),temp];
    seed_temp=fliplr(seed_temp);
    seed(1,3:9)=seed_temp;
    %产生pn9码
    reg=seed;
    for i1=1:511
        temp5=reg(1,5);
        temp1=reg(1,9);
        pnt=reg(1,9);
        for j2=8:-1:1
            reg(1,j2+1)=reg(1,j2);
        end;
        reg(1,1)=mod(temp5+temp1,2);

        if(pnt==0)
            pnout(k,i1)=1;
        else pnout(k,i1)=-1;
        end;
    end;
end;

%64路数据按权相加,形成输出pn9_output
for k=1:64
    for i=1:15
        pn9_dpch(k,(i-1)*40+1:(i-1)*40+6)=pnout(k,(i-1)*30+1:(i-1)*30+6);
        pn9_dpch(k,(i-1)*40+7:(i-1)*40+8)=tpc(i,:);
        pn9_dpch(k,(i-1)*40+9:(i-1)*40+32)=pnout(k,(i-1)*30+7:(i-1)*30+30);
        pn9_dpch(k,(i-1)*40+33:(i-1)*40+40)=slot(i,:);
    end
    pn9_dpch(k,601:1200)=pn9_dpch(k,1:600);
    pn9(k,1:2*time(k))=0;
    pn9(k,2*time(k)+1:1200)=pn9_dpch(k,1:1200-2*time(k));%每路数据
end
%串并变换,每个比特重复128次
for k=1:64;
    pn9real(k,:)=pn9(k,1:2:1199);
    pn9imag(k,:)=pn9(k,2:2:1200);
    for i=1:600;
        pn9real_spread(k,(i-1)*sf_length+1:i*sf_length)=pn9real(k,i);
        pn9imag_spread(k,(i-1)*sf_length+1:i*sf_length)=pn9imag(k,i);
    end;
end;
%加扩
for k=1:64  %64路数据
    for i=1:600;
        pn9real_sf(k,(i-1)*sf_length+1:i*sf_length)=pn9real_spread(k,(i-1)*sf_length+1:i*sf_length).*sf(code(k),1:sf_length);
        pn9imag_sf(k,(i-1)*sf_length+1:i*sf_length)=pn9imag_spread(k,(i-1)*sf_length+1:i*sf_length).*sf(code(k),1:sf_length);
    end;
    pn9sf(k,:)=pn9real_sf(k,:)+j*pn9imag_sf(k,:);
    %加扰
    scr2(1:38400)=scr;
    scr2(38401:76800)=scr;
    pn9_scra(k,:)=pn9sf(k,:).*scr2;
    per=10^(db(k)/10);
    pn9_output=pn9_output+per*pn9_scra(k,:);
end;