目录
一、仿真要求(以下两种要求满足其中一种即可)
二、仿真方案详细设计
1、扩频通信的基本原理:
2、发射端频谱如何发展?
3、接收端如何解扩恢复原来的带宽?
4、其中的关键问题
5、扩频通信系统发射机模型:
6、扩频通信系统发射机设计:
7、发射机参数设置
8、接收机原理:
9、接收机设计
10、系统的总体框图设计,如下图所示:
11、扩频码(m序列)的产生:
三、仿真结果及结论
四、总结与体会
五、主要仿真代码
1、MATLAB脚本函数代码:
2、MATLAB主程序如下:
要求一:扩频通信系统的多用户数据传输
①传输的数据随机产生,要求采用频带传输(DBPSK调制);
②扩频码要求采用周期为63(或127)的m序列;
③仿真从基站发送数据到三个不同的用户,各不同用户分别进行数据接收;
④设计三种不同的功率延迟分布,从基站到达三个不同的用户分别经过多径衰落(路径数分别为2,3,4);
⑤三个用户接收端分别解出各自的数据并与发送前的数据进行差错比较。
要求二:利用蒙特卡罗仿真方法对扩频增益进行性能仿真
设计仿真方案,得到在数据传输过程中进行扩频(扩频序列用m序列)和不进行扩频的BER性能结论,要求得到的BER曲线较为平滑,并说明这种结论与理论上的结论是否相符,为什么?
注意:本次仿真实验本人选择完成要求一!!!
①香农公式:
C=Blog(1 + S / N) (C是信道容量,指单位时间内无差错传播的最大信息量,单位为b/s;B是信号频带带宽,单位HZ;S是信号功率,单位W;N为噪声功率,单位W;其中S/N为输入功率与噪声功率之比,称为性躁功率比,简称性躁比)
由信号频谱图知,减小时域周期持续时间更短,频谱更宽,可以提高信号带宽B。
②信号频谱,如下图所示:
Tc = Tb / L
(F是频谱的扩展倍数,扩频增益;Tb是比特周期;Tc是码片周期 )
①将一个数据位的持续时间进行分片
②一个数据位的持续时间有多个小片组成,显然从频谱的角度看,每个小片的持续时间比一个数据位的持续时间短,显然其频谱就宽
③其频谱的扩展倍数 F= Tb / Tc
④码片速率也就变成数据数率的F倍
如下表所示:
如下图所示:
对扩频码的要求:
①自相关特性(良好的自相关特性,便于扩频码的同步):时间延迟τ = 0时达到峰值,其他情况尽量等于0。
②互相关特性(良好的互相关特性,便于区分不同的用户):希望互相关系数ρ(x,y)在0附件完全正交。
由上图知,m序列在一个点达到峰值,其他情况接近0,,所以它的自相关特性很好,互相关特性在0附件还行,所以一般。
本文采用的是BPSK调制解调方式。发送端将扩频后的信号s乘上载波cos(2πft)即完成了调制
数据速率:dataRate
载波频率:fc
抽样频率:fs
码片速率:chipRate
接收端再乘以载波cos(2*πft)做相干解调,再经过一个低通滤波器滤除相乘过程中产生的高频成分即完成了解调
思考:扩频通信系统中为什么要先解扩再解调,而不是发射机端处理过程的逆过程?
答:因为我们通过发送端扩频调制出来的信号,功率很低,像噪声一样,无法解调,所以在接收端应该先解扩检查出信号,然后再解调,通过低通滤波器。注意:仿真中没有考虑所有的同步问题,都假定是精准同步的
系统的总体流程图设计,如下图所示:
扩频通信系统仿真的主程序流程图设计:
扩频码为伪随机序列,本实验采用自相关特性好,互相关特性较差的M序列,因为有三路用户,故选取带有6位移位寄存器,周期为63的m序列。根据上图可以得出其对应的二进制序列分别为:
1000011(103), 1100111(147), 1101101(155),因此本实验中设计的反馈系数为
b1=[1,0,0,0,0,1,1]; %C0=1,C1=1,C2=0,C3=0,C4=0,C5=0,C6=1
b2=[1,1,0,0,1,1,1]; %C0=1,C1=1,C2=1,C3=0,C4=0,C5=1,C6=1
b3=[1,1,0,1,1,0,1]; %C0=1,C1=0,C2=1,C3=1,C4=0,C5=1,C6=1
以1000011为例,其具体的寄存器结构图如下所示:
初始化各寄存器单元内容为1
1、原信号和扩频之后的信号,如下图所示:
2、第一个原始用户信号与其经过接收端解扩,解调,抽样判决之后的最终信号的比较,如下图所示:
3、3个用户的信号分别经过多径衰落。衰落信道的个数为2、3、4:
分析:
(1)由第一个仿真结果得到:根据仿真结果看出,扩频后相较于扩频前的波形,直观体现就是波形更加的密集了;这是因为扩频码m序列对原始信号进行扩频使得信号的周期减小,频域或者频谱展宽,所以造成了直观体现为波形更加的密集。
(2)由第二个仿真结果得到:本仿真图包括第一个原始用户信号与其经过接收端解扩,解调,抽样判决之后的最终信号。解扩之后的波形相较于之(1)中的扩频的图来说,直观体现为波形比较稀疏,几乎恢复到原始信号的周期大小与频谱大小,但是从波形形状上面来看还有原信号存在较大的差异,波形峰值处基本上都是参差不齐的,存在较大的失真;解调之后的波形在解扩的波形基础上,从直观来说,波形进一步完善:波形形状与原信号还存在一些较小的差距,波形峰值处有一部分存于参差不齐与较小失真;观察抽样判决之后的最终信号,我们可以通过与原信号的对比,很清楚的看出与原信号的基本上无异,体现在:周期与频谱基本上一致,峰值处基本上与原信号一致(没有出现参差不齐与峰值处波形失真),幅值大小一致。
(3)当衰落信道的个数为2时,我们可以看到,三个用户都是随着信噪比的增大,误比特率在降低。总体来看,用户1和2的曲线走势很接近大致相同,两者均误比特率减小较用户3快;用户3的曲线走势在信噪比大于-15时候走势趋近于平缓,误比特率减小较三者中最慢。
当衰落信道的个数为3时,我们可以看到,三个用户也都是随着信噪比的增大,误比特率在降低。总体来看,三个用户的曲线走势大致相同,在信噪比小于-14的时候,曲线走势很接近,误比特率降低速率差不多,没有太大的区别;但是信噪比大于-14时,用户2随着信噪比的增大,误比特率曲线走势减小的最快;用户1随着信噪比的增大,误比特率曲线走势减小的较三者中居中,但是用户1在性躁比达到-12时的误比特率为0,在≥-12的性躁比时,后面没有显示出来,表示后面没有任何错误的比特;用户3随着信噪比的增大,误比特率曲线走势减小的较三者中最慢。
当衰落信道的个数为4时,我们可以看到,三个用户也都是随着信噪比的增大,误比特率在降低。总体来看,用户1和2的曲线走势很接近大致相同,两者均误比特率减小较用户3快;用户3的曲线走势在曲线走势起始处就与用户1和2的曲线存在了一定的差距,随着信噪比的增大,差距一直存在,并且还存在差距增大的趋势,误比特率减小较三者中最慢。
总结:
扩频通信的理论基础为香农公式:C=Blog(1+S/N)。我们可以用牺牲带宽的办法来换取较低的信噪比,增加系统的抗干扰能力。直接序列扩频,是直接利用具有高码率的扩频码序列在发送端扩展信号的频谱,而在接收端,用相同的扩频码序列进行解扩,把展宽的扩频信号还原成原始的信息,是一种数字调制方法。
扩频通信系统具有较强的抗干扰能力,且具有很强的隐蔽性和抗侦查,抗窃听的能力。这种能力随着扩频增益的增大而增大。扩频增益的提高就需要提高扩频码m序列的位数了。
因为m序列具有良好的自相关特性和互相关特性,正是这两大特性使得在接收端可以很好的进行扩频码的同步,以及多路用户的区分,从而具有很好的抗多径干扰能力。
心得体会:
通过课堂的理论学习,我对扩频通信系统的基本原理有了一定的了解,但在实际操作中,我深刻感受到理论知识与实际应用之间的紧密联系。仅仅掌握理论知识是远远不够的,实际操作才能真正检验和加深对知识的理解。
在仿真实验中,我着重于系统参数的调优。通过尝试不同的扩频码和灵活调整信噪比等参数,我深入研究了这些参数对系统性能的影响。这个过程不仅让我更加熟悉仿真工具的使用,也增强了我对扩频通信系统优化的实际操作能力。
在实验中,我还发现了扩频技术在提高系统抗干扰性能方面的独特优势。通过适当选择扩频码,系统在面对噪声和干扰时能够更好地维持通信质量,这是传统通信系统所不具备的优势之一。
总体而言,这次扩频通信系统仿真实验为我提供了一个深入了解通信技术的机会。通过理论学习和实际操作的结合,我不仅加深了对扩频通信系统的理解,还提高了在实际应用中优化系统性能的能力。这次实验让我更加确信,理论与实践相结合才能更好地推动技术的发展。
Channels函数:
function multiS=channels(modusignal,snr,k)
len=length(modusignal);
x1=randn(1,len);%产生一个均值为1,方差为0的正态分布
y1=randn(1,len);
r1=abs(x1+ j*y1).*modusignal;
r1=[zeros(1,5),r1(1:length(modusignal)-5)];
x2=randn(1,len);
y2=randn(1,len);
r2=abs (x2+ j*y2).*modusignal;
r2=[zeros(1,8),r2(1:length (modusignal)-8)];
x3=randn(1,len);
y3=randn(1,len) ;
r3=abs (x3+ j*y3).*modusignal;
r3= [zeros(1,10),r3(1:length (modusignal)-10)];
if k==2
multiS=modusignal+r1;
elseif k==3
multiS=modusignal+r1+r2;
elseif k==4
multiS=modusignal+r1+r2+r3;
end
multiS=awgn(multiS,snr);
end
dedsss函数:
function dessignal=dedsss(receiveSignal,c,chipRate,fs)
L=fs/chipRate;
c1=[];
for i=1:length(c)
c1=[c1,c(i)*ones(1,L)];
end
dessignal=[];
for i=1:length(c1):length(receiveSignal)
dessignal=[dessignal,receiveSignal(i:i+length(c1)-1).*c1];
end
end
demodu函数:
function demoSignal=demodu(Resignal,datarate,fc,fs)
t = linspace(0,1/datarate,fs/datarate);
carrier=cos(2*pi*fc*t);Lc=length(carrier);
Ls=length(Resignal);designal=[];
for i=1:Lc:Ls
designal=[designal,carrier.*Resignal(i:i+Lc-1)];
end
demoSignal = [];
for i= 1:Lc:Ls
threshold=sum(designal(i:i+Lc-1));
if threshold>0
tt=1;
else
tt=-1;
end
demoSignal=[demoSignal,tt];
end
end
dsss函数:
function ssignal=dsss(signal,c)
ssignal=[];
for i=1:length(signal)
ssignal=[ssignal,signal(i)*c];
end
end
genMseq函数:
function c=genMseq(b)
N=length(b)-1;
D=ones(1,N);
A=b(N:-1:1);
c=[];
for i=1:2^N-1
c1=rem(sum(D.*A),2);
c=[c,D(N)];
D=[c1,D(1:N-1)];
end
c=c*2-1; %变为1,-1的序列
end
information函数:
function signal=information(N)
signal=rand(1,N)>=0.5;
signal=signal*2-1;
end
modu函数:
function modusignal=modu(signal, dataRate,fc, fs)
%采用BPSK调制方式
t=linspace(0,1/dataRate,fs/dataRate);
carrier=cos(2*pi*fc*t);
modusignal=[];
for i=1:length(signal)
modusignal=[modusignal,carrier*signal(i)];
end
end
clear all;clc;
dataRate=1000;
chipRate=63*dataRate;
fc=chipRate*2;
fs=fc*8;
N=1000;
c=63;
b1=[1,0,0,0,0,1,1]; %103
b2=[1,1,0,0,1,1,1]; %147
b3=[1,1,0,1,1,0,1]; %155
snr=-20:2:10;
for i=1:length(snr)
signal1=information(N);signal2=information(N);
signal3=information(N); c1=genMseq(b1);c2=genMseq(b2);c3=genMseq(b3);
dssignal1=dsss(signal1,c1);
dssignal2=dsss(signal2,c2);
dssignal3=dsss(signal3,c3);
modusignal1=modu(dssignal1,chipRate,fc, fs);
modusignal2=modu(dssignal2,chipRate,fc, fs);
modusignal3=modu(dssignal3,chipRate,fc, fs);
mixsignal=modusignal1+modusignal2+modusignal3;
receivesignal=awgn(mixsignal,snr(i));
%多径干扰
receivesignal1= channels (receivesignal,snr(i),2) ;
receivesignal2= channels (receivesignal,snr(i),3) ;
receivesignal3= channels (receivesignal,snr(i),4) ;
dedssignal1=dedsss(receivesignal1,c1,chipRate,fs);
demoSignal1=demodu(dedssignal1,dataRate,fc,fs);
dedssignal2=dedsss(receivesignal1,c2,chipRate,fs);
demoSignal2=demodu(dedssignal1,dataRate,fc,fs);
dedssignal3=dedsss(receivesignal1,c3,chipRate,fs);
demoSignal3=demodu(dedssignal1,dataRate,fc,fs);
err_bit1(i)=sum(demoSignal1~=signal1)/N;
err_bit2(i)=sum(demoSignal2~=signal2)/N;
err_bit3(i)=sum(demoSignal3~=signal3)/N;
dedssignal21=dedsss(receivesignal2,c1,chipRate,fs);
demoSignal21=demodu(dedssignal21,dataRate,fc,fs);
dedssignal22=dedsss(receivesignal2,c2,chipRate,fs);
demoSignal22=demodu(dedssignal22,dataRate,fc,fs);
dedssignal23=dedsss(receivesignal2,c3,chipRate,fs);
demoSignal23=demodu(dedssignal23,dataRate,fc,fs);
err_bit21(i)=sum(demoSignal21~=signal1)/N;
err_bit22(i)=sum(demoSignal22~=signal2)/N;
err_bit23(i)=sum(demoSignal23~=signal3)/N;
dedssignal31=dedsss(receivesignal3,c1,chipRate,fs);
demoSignal31=demodu(dedssignal31,dataRate,fc,fs);
dedssignal32=dedsss(receivesignal3,c2,chipRate,fs);
demoSignal32=demodu(dedssignal32,dataRate,fc,fs);
dedssignal33=dedsss(receivesignal3,c3,chipRate,fs);
demoSignal33=demodu(dedssignal33,dataRate,fc,fs);
err_bit31(i)=sum(demoSignal31~=signal1)/N;
err_bit32(i)=sum(demoSignal32~=signal2)/N;
err_bit33(i)=sum(demoSignal33~=signal3)/N;
%不进行扩频的BER
modusignal1=modu(signal1,chipRate/63,fc, fs);
modusignal2=modu(signal2,chipRate/63,fc, fs);
modusignal3=modu(signal3,chipRate/63,fc, fs);
modusignal1= channels (modusignal1,snr(i),3) ;
modusignal2= channels (modusignal2,snr(i),3) ;
modusignal3= channels (modusignal3,snr(i),3) ;
demoSignal41=demodu(modusignal1,dataRate,fc,fs);
demoSignal42=demodu(modusignal2,dataRate,fc,fs);
demoSignal43=demodu(modusignal3,dataRate,fc,fs);
err_bit41(i)=sum(demoSignal41~=signal1)/N;
err_bit42(i)=sum(demoSignal42~=signal2)/N;
err_bit43(i)=sum(demoSignal43~=signal3)/N;
end
figure(1)
semilogy(snr,err_bit1,'-s',snr,err_bit2,'-h',snr,err_bit3,'-*');
legend('用户1','用户2','用户3');
xlabel('信噪比');
ylabel('误比特率');
title('多径衰落(路径数为2)');
figure(2)
semilogy(snr,err_bit21,'-s',snr,err_bit22,'-h',snr,err_bit23,'-*');
legend('用户1','用户2','用户3');
xlabel('信噪比');
ylabel('误比特率');
title('多径衰落(路径数为3)');
figure(3)
semilogy(snr,err_bit31,'-s',snr,err_bit32,'-h',snr,err_bit33,'-*');
legend('用户1','用户2','用户3');
xlabel('信噪比');
ylabel('误比特率');
title('多径衰落(路径数为4)');
figure(4)
N1=1:length(signal1);
subplot(2,1,1);
plot(N1,signal1);
title('扩频前信号');
axis([0 100 -1.1 1.1]);
dssignal1=dsss(signal1,c1);
N1=1:length(dssignal1);
subplot(2,1,2);
plot(N1,dssignal1);
title('扩频后信号');
axis([0 320 -1.1 1.1]);
%figure(5)
%modusignal1=modu(dssignal1,chipRate,fc, fs);
%N1=1:length(modusignal1);
%subplot(2,1,1);
%plot(N1,modusignal1);
%axis([0 250 -1.1 1.1]);
%grid on
%N2=1:length(mixsignal);
%subplot(2,1,2);
%plot(N2,mixsignal);
%axis([0 500 -5.1 5.1]);
%grid on
figure(5)
receivesignal1= channels (modusignal1,snr(i),2) ;
N1=1:length(receivesignal1);
subplot(3,1,1);
plot(N1,receivesignal1);
axis([0 200 -1.1 1.1]);
dedssignal1=dedsss(receivesignal,c1,chipRate,fs);
subplot(3,1,2);
plot(N1,dedssignal1);
axis([0 200 -1.1 1.1]);
demoSignal1=demodu(dedssignal1,dataRate,fc,fs);
N1=1:length(demoSignal1);
subplot(3,1,3);
plot(N1,demoSignal1);
axis([0 200 -1.1 1.1]);
%figure(7)
%plot(snr,err_bit21,'-s',snr,err_bit22,'-h',snr,err_bit23,'-*');
%legend('用户1','用户2','用户3');
%xlabel('信噪比');
%ylabel('误比特率');
%title('扩频');
% axis([0 100 -1.1 1.1]);
%figure(8)
%plot(snr,err_bit41,'-s',snr,err_bit42,'-h',snr,err_bit43,'-*');
%legend('用户1','用户2','用户3');
%xlabel('信噪比');
%ylabel('误比特率');
%title('不扩频');