直接序列扩频通信系统仿真程序杨晶超 s20070416>> code_length=20; %信息码元个数>> N=1:code_length;>> rand('seed',0);>> x=sign(rand(1,code_length)-0.5); %信息码>> for i=1:20 s((1+(i-1)*800):i*800)=x(i); %每个信息码元内含 fs/f=800 个采样点 end生成的信息码的波形图如图 1 所示。图 1 信源信息码>> %产生伪随机码,调用的 mgen 函数见附录>> length=100*20; %伪码频率 5MHz,每个信息码内含 5MHz/50kHz=100 个伪码>> x_code=sign(mgen(19,8,length)-0.5); %把 0,1 序列码变换为-1,1 调制码>> for i=1:2000 w_code((1+(i-1)*8):i*8)=x_code(i); %每个伪码码元内含 8 个采样点 end生成的 PN 码波形如图 2 所示。>> %扩频>> k_code=s.*w_code; %k_code 为扩频码扩频码如图 3 所示。图 2 PN 码图 3 扩频码>> %调制>> fs=20e6;>> f0=30e6;>> for i=1:2000 AI=2; dt=fs/f0; n=0:dt/7:dt; %一个载波周期内采样八个点 cI=AI*cos(2*pi*f0*n/fs); signal((1+(i-1)*8):i*8)=k_code((1+(i-1)*8):i*8).*cI; endPSK 调制后的波形如图 4 所示。图 4 PSK 调制后的波形>> %解调>> AI=1;>> dt=fs/f0;>> n=0:dt/7:dt; %一个载波周期内采样八个点>> cI=AI*cos(2*pi*f0*n/fs);>> for i=1:2000 signal_h((1+(i-1)*8):i*8)=signal((1+(i-1)*8):i*8).*cI; end解调后的波形如图 5 所示。图 5 解调后的波形>> %解扩>>jk_code=signal_h.*w_code;>> %低通滤波>> wn=5/10000000; %截止频率 wn=fn/(fs/2),这里的 fn 为信息码(扩频码)的带宽 5M>> b=fir1(16,wn);>> H=freqz(b,1,16000);>> signal_d=filter(b,1, jk_code);解扩并滤波后的波形如图 6 所示。图 6 解扩并滤波后的波形从图形整体看,解扩出来的信息码与信源信息码基本相同。输入与输出对比如图 7 所示。图 7 输入与输出对比附录:%mgen.mfunction[out]=mgen(g,state,N)gen=dec2bin(g)-48;M=length(gen);curState=dec2bin(state,M-1)-48;for k=1:N out(k)=curState(M-1); a=rem(sum(gen(2:end).*curState),2); curState=[a curState(1:M-2)];end