《基于matlab的直接序列扩频仿真》由会员分享,可在线阅读,更多相关《基于matlab的直接序列扩频仿真(2页珍藏版)》请在金锄头文库上搜索。
1、信息码的频率设为 50kHz,采样频率设为 40MHz。假设信源信息码的总长度为 20,则每个 信息码内含 40MHz/50kHz800 个采样点。通过 sign 函数,把 20 个(0,1)区间内的随机数 变成 20 个只用“1”与“1”表示的信息码,而后再通过一个循环,对每一个信息码采样 800 次,共生成 16000 个采样点,每个点之间的间隔为 0.025s。伪随机码频率设为 5MHz,信息码频率为 50kHz,所以每个信息码内包含 5MHz/50kHz100 个伪码。通过调 用一个产生 m 序列的子函数 mgen.m,与一个长度为 20100 的循环,就得到了伪随机序 列 PN 码。
2、sign(x):符号函数 (Signum function)。 当 x0 时,sign(x)=1。程序如下: %m 序列发生器 function out = mgena(g,state,N) %输入 g: m 序列生成多项式 (10 进制输入) % state: 寄存器初始状态 (10 进制输入) % 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).*cur
3、State ),2 );curState = a curState(1:M-2); end主程序 code_length=20;%信息码元个数 N=1:code_length; rand(seed,0); x=sign(rand(1,code_length)-0.5);%信息码 for i=1:20s(1+(i-1)*800):i*800)=x(i);%每个信息码元内含 fs/f=800 个采样点 end %产生伪随机码 length=100*20;%伪码频率 5MHz,每个信息码内含 5MHz/50kHz=100 个伪码 x_code=sign(mgen(9,11,length)-0.5);
4、%把 0,1 序列码变换为-1,1 调制码 for i=1:2000w_code(1+(i-1)*8):i*8)=x_code(i);%每个伪码码元内含 8 个采样点 end%扩频 k_code=s.*w_code; %k_code 为扩频码 %调制 fs=20e6; f0=30e6; for i=1:2000AI=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; end %解调 AI=1; dt=fs/f0; n=0:dt
5、/7:dt;%一个载波周期内采样八个点 cI=AI*cos(2*pi*f0*n/fs); for i=1:2000signal_h(1+(i-1)*8):i*8)=signal(1+(i-1)*8):i*8).*cI; end %解调 AI=1; dt=fs/f0; n=0:dt/7:dt; %一个载波周期内采样八个点 cI=AI*cos(2*pi*f0*n/fs); for i=1:2000signal_h(1+(i-1)*8):i*8)=signal(1+(i-1)*8):i*8).*cI; end %低通滤波 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);