基于matlab的直接序列扩频仿真
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
end
%产生伪随机码
length=100*20;%伪码频率5MHz,每个信息码内含5MHz/50kHz=100个伪码
x_code=sign(mgen(9,11,length)-0.5);%把0,1序列码变换为-1,1调制码
for i=1:2000
w_code((1+(i-1)*8):i*8)=x_code(i);%每个伪码码元内含8个采样点
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:20
s((1+(i-1)*800):i*800)=x(i);%每个信息码元内含fs/f=800个采样点
信息码的频率设为50kHz,采样频率设为40MHz。假设信源信息码的总长度为20,则每个信息码内含40MHz/50kHz=800个采样点。通过sign函数,把20个(0,1)区间内的随机数变成20个只用“1”与“-1”表示的信息码,而后再通过一个循环,对每一个信息码采样800次,共生成16000个采样点,每个点之间的间隔为0.025μs。伪随机码频率设为5MHz,信息码频率为50kHz,所以每个信息码内包含5MHz/50kHz=100个伪码。通过调用一个产生m序列的子函数mgen.m,与一个长度为20×100的循环,就得到了伪随机序列PN码。
end
%解调
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
%解调
AI=1;
dt=fs/f0;
% 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 );
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
%低通滤波
wn=5/10000000;%截止频率wn=fn/(fs/2),这里的fn为信息码(扩频码)的带宽5M
end
%扩频Leabharlann Baidu
k_code=s.*w_code; %k_code为扩频码
%调制
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;
b=fir1(16,wn);
H=freqz(b,1,16000);
signal_d=filter(b,1,jk_code);
sign(x):符号函数(Signum function)。
当x<0时,sign(x)=-1;
当x=0时,sign(x)=0;
当x>0时,sign(x)=1。
程序如下:
%m序列发生器
function [out] = mgena(g,state,N)
%输入g: m序列生成多项式(10进制输入)
% state:寄存器初始状态(10进制输入)
%产生伪随机码
length=100*20;%伪码频率5MHz,每个信息码内含5MHz/50kHz=100个伪码
x_code=sign(mgen(9,11,length)-0.5);%把0,1序列码变换为-1,1调制码
for i=1:2000
w_code((1+(i-1)*8):i*8)=x_code(i);%每个伪码码元内含8个采样点
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:20
s((1+(i-1)*800):i*800)=x(i);%每个信息码元内含fs/f=800个采样点
信息码的频率设为50kHz,采样频率设为40MHz。假设信源信息码的总长度为20,则每个信息码内含40MHz/50kHz=800个采样点。通过sign函数,把20个(0,1)区间内的随机数变成20个只用“1”与“-1”表示的信息码,而后再通过一个循环,对每一个信息码采样800次,共生成16000个采样点,每个点之间的间隔为0.025μs。伪随机码频率设为5MHz,信息码频率为50kHz,所以每个信息码内包含5MHz/50kHz=100个伪码。通过调用一个产生m序列的子函数mgen.m,与一个长度为20×100的循环,就得到了伪随机序列PN码。
end
%解调
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
%解调
AI=1;
dt=fs/f0;
% 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 );
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
%低通滤波
wn=5/10000000;%截止频率wn=fn/(fs/2),这里的fn为信息码(扩频码)的带宽5M
end
%扩频Leabharlann Baidu
k_code=s.*w_code; %k_code为扩频码
%调制
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;
b=fir1(16,wn);
H=freqz(b,1,16000);
signal_d=filter(b,1,jk_code);
sign(x):符号函数(Signum function)。
当x<0时,sign(x)=-1;
当x=0时,sign(x)=0;
当x>0时,sign(x)=1。
程序如下:
%m序列发生器
function [out] = mgena(g,state,N)
%输入g: m序列生成多项式(10进制输入)
% state:寄存器初始状态(10进制输入)