代码:
function dscdmamodem(user,snr_in_dbs)
%建立模型:用户信息,snr_in_dbs为信噪比
%设置初始参数
user=[0 1 0 1 1 0 1] ;
close all
%定义步长变量%
length_user=length(user);
%改变用户数据中的0为-1
for i=1:length_user
if user(i)==0
user(i)=-1;
end
end
% 用户传输前设置
fc=3; % 载频
eb=2; % 每个字符的能量
tb=1; % 每个信息比特所占的时间
%用户输入的数据信息
t=0.01:0.01:tb*length_user;
basebandsig=[];
for i=1:length_user
for j=0.01:0.01:tb
if user(i)==1
basebandsig=[basebandsig 1];
else
basebandsig=[basebandsig -1];
end
end
end
figure
plot(basebandsig)
axis([0 100*length_user -1.5 1.5]);
title('用户输入的信息')
% 用户的BPSK调制过程
bpskmod=[];
for i=1:length_user
for j=0.01:0.01:tb
bpskmod=[bpskmod sqrt(2*eb)*user(i)*cos(2*pi*fc*j)];
end
end
length(bpskmod)
%用户BPSK调制后的波形图输出
figure
plot(bpskmod)
axis([0 100*length_user -3 3]);
title(' 用户经BPSK调制之后的波形 ')
% 扩频
%PN码发生器
seed=[1 -1 1 -1]; % 设PN码初始值为1000
spreadspectrum=[];
pn=[];
for i=1:length_user
for j=1:10 %PN码和数据比特码的比率设为10:1
pn=[pn seed(4)];
if seed (4)==seed(3) temp=-1;
else temp=1;
end
seed(4)=seed(3);
seed(3)=seed(2);
seed(2)=seed(1);
seed(1)=temp;
end
spreadspectrum=[spreadspectrum user(i)*pn];
end
%扩频过程
pnupsampled=[];
len_pn=length(pn);
for i=1:len_pn
for j=0.1:0.1:tb
if pn(i)==1
pnupsampled=[pnupsampled 1];
else
pnupsampled=[pnupsampled -1];
end
end
end
length_pnupsampled=length(pnupsampled);
sigtx=bpskmod.*pnupsampled;
%扩频码波形输出
figure
plot(pnupsampled)
axis([0 100*length_user -2 2])
title(' PN码波形图 ')
%扩频后的波形图输出
figure
plot(sigtx)
axis([0 100*length_user -3 3]);
title(' 用PN码扩频后的波形图 ')
composite_signal=sigtx;
%高斯白噪声信道传输
snr_in_dbs=20 %设信噪比为20
composite_signal=awgn(composite_signal,snr_in_dbs);
%从信道中解扩出用户的信息
rx=composite_signal.*pnupsampled;
figure
plot(rx)
title('用户解扩后的波形')
% BPSK解调过程
demodcar=[];
for i=1:length_user
for j=0.01:0.01:tb
demodcar=[demodcar sqrt(2*eb)*cos(2*pi*fc*j)];
end
end
bpskdemod=rx.*demodcar;
figure
plot(bpskdemod)
title('用户经BPSK解调之后的波形')
len_dmod=length(bpskdemod);
sum=zeros(1,len_dmod/100);
for i=1:len_dmod/100
for j=(i-1)*100+1:i*100
sum(i)=sum(i)+bpskdemod(j);
end
end
%检波过程
rxbits=[];
for i=1:length_user
if sum(i)>0
rxbits=[rxbits 1];
else
rxbits=[rxbits 0];
end
end
length_rxbits=length(rxbits);
t=0.01:0.01:tb*length_rxbits;
savbandsig=[];
for i=1:length_rxbits
for j=0.01:0.01:tb
if user(i)==1
savbandsig=[savbandsig 1];
else
savbandsig=[savbandsig -1];
end
end
end
figure
plot(savbandsig)
axis([0 100*length_user -2 2]);
title('用户经检波之后的波形 ’)
少年不被楼层误,余生不羁尽自由。
加油,加油!