基于matlab的直接序列扩频通信系统仿真
- 格式:doc
- 大小:344.50 KB
- 文档页数:9
基于MATLAB的直接序列扩频通信系统仿真
1.实验原理:直接序列扩频(DSSS)是直接利用具有高码率的扩频码系列采用各种调
制方式在发端与扩展信号的频谱,而在收端,用相同的扩频码序去进行解扩,把扩展宽的扩频信号还原成原始的信息。它是一种数字调制方法,具体说,就是将信源与一定的PN码(伪噪声码)进行摸二加。例如说在发射端将"1"用11000100110,而将"0"用00110010110去代替,这个过程就实现了扩频,而在接收机处只要把收到的序列是11000100110就恢复成"1"是00110010110就恢复成"0",这就是解扩。这样信源速率就被提高了11倍,同时也使处理增益达到10DB以上,从而有效地提高了整机倍噪比。
1.1 直扩系统模型
直接序列扩频系统是将要发送的信息用伪随机码(PN码)扩展到一个很宽的频带上去,在接收端用与发送端相同的伪随机码对接收到的扩频信号进行相关处理,恢复出发送的信号。对干扰信号而言,与伪随机码不相关,在接收端被扩展,使落入信号通频带的干扰信号功率大大降低,从而提高了相关的输出信噪比,达到了抗干扰的目的。直扩系统一般采用频率调制或相位调制的方式来进行数据调制,在码分多址通信中,其调制多采用BPSK、DPSK、QPSK、MPSK等方式,本实验中采取BPSK方式。
直扩系统的组成如图1所示,与信源输出的信号a(t)是码元持续时间为Ta的信息流,伪随机码产生器产生伪随机码c(t),每个伪随机码的码元宽度为Tc (Tc< 在接收端,接收到的信号经混频后,用与发射同步的伪随机码对中频信号进行相关解扩,将信号的频带恢复为信息的频带,然后再进行解调,恢复出所传送的信息a(t)。对信道中的干扰,这些干扰包括:窄带干扰、多径干扰、多址干扰等。由于这些干扰与伪随机码不相关,接收机的相关解扩对它们相当于一次扩频,将干扰和噪声的频谱展宽,降低了功率谱密度,经滤波后就大大降低了进入信号通频带的干扰功率,使解调器的输入信噪比得到提高,从而提高了系统的抗干扰能力。图2给出了直扩系统的频谱图。[1] 图1 直扩系统组成框图 1.2 扩频通信常用的伪随机码 常用的伪随机码主要有m序列、GOLD序列、WALSH码和OVSF码,其中最常见的是m序列。GOLD码是m序列的复合码,是由2个码长相等,码时钟速率相同的序列优选对模2加构成,每改变2个序列相对位移就可得到一个新的GOLD序列。GOLD序列具有良好的自、互相关特性,且地址数远远大于m序列地址数,结构简单,易于实现,在工程上得到较为广泛的应用。WALSH函数是一种非正弦的完备正交函数系,具有理想的互相关特性,两两之间的互相关函数为0,亦即它们是正交的,因而在码分多址通信中,WALSH函数可以作为地址码使用,在IS-95中,正向传输信道就使用了64阶WALSH函数。OVSF码是一种正交可变扩频因子码,保证在不同时隙上的不同扩频因子的扩频码正交,而在每个时隙上可使用的码的数目不固定,与每个物理信道的数据速率和扩频因子有关,OVSF码在TD-SCDMA系统中得到了广泛使用。[2] 1.3 扩频通信技术的优点 扩频通信之所以得到重视和发展,并成为近代通信主要研究和发展的方向,是因为它具有其它通信系统不能与之相比的独特性能。 1) 抗同频干扰性能好。接收机采用相关运算只接收PN码相同的扩频信号,对所有载波频率相同的信号或干扰具有很强的抑制能力。 2) 良好的抗衰落性能。一般信道中的衰落是有频率选择性的,不会对宽频带的扩频信号接收产生太大的影响。 3) 抗多径干扰能力强。由于扩频系统中采用的PN码具有很好的自相关性,互相关性很弱,不同的路径传输来的信号能容易地被分离开,并在时间和相位上重新对齐,形成几路信号功率的叠加,从而改善了接收系统的性能,增加了系统的可靠性。[3] 2部分程序代码及仿真结果 仿真参数:信源速率2kbps,扩频因子:64,调制方式:BPSK,信道:高斯信道 close all clear all SNR=[1:1:15] Rb=0.25; Tb=1/Rb; M=100; L=400; N=M*L; dt=Tb/L; df=1/(N*dt); Bs=N*df/2; T=N*dt; t=linspace(-T/2,T/2,N); x=sign(rand(1,M)-0.5); t0=linspace(0,T,M); for i=1:100; d((1+(i-1)*400):i*400)=x(i); end figure(1) plot(t,d) xlabel('t(ms)'); ylabel('s(t)(V)'); title('信源'); axis([0,200,-1.5,1.5]); grid on fs=4000; z=reshape(d,2,N/2); Q=z(1,:); I=z(2,:); tq=linspace(-T/2,T/2,length(I)); BPSK=(I.*cos(2*fs*pi*tq)-Q.*sin(2*fs*pi*tq))/sqrt(2); figure(2) plot(tq,QPSK) xlabel('t(ms)'); ylabel('QPSK(t)(V)'); title('BPSK信号'); axis([0,200,-1.5,1.5]); grid on user=1; seq=1; stage=3; ptap1=[1 3]; ptap2=[2 3]; regi1=[1 1 1]; regi2=[1 1 1]; switch seq case 1 code=mseq(stage,ptap1,regi1,user); case 2 m1= mseq(stage,ptap1,regi1); m2= mseq(stage,ptap2,regi2);