《基于matlab的扩频通信设计精品资料.doc》由会员分享,可在线阅读,更多相关《基于matlab的扩频通信设计精品资料.doc(40页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、兰州理工大学计算机与通信学院2010年秋季学期 移动通信 课程设计题 目:基于MATLAB的Walsh函数的产生专业班级: 通信工程07级(2)班 姓 名: 王旭东 学 号: 07250229 指导教师: 贾科军 成 绩: 摘 要本文研究的是基于MATLAB的扩频通信系统设计。为我们介绍了扩频通信系统的基本原理,并对扩频系统的各个重要模块进行详细的理论介绍,如Walsh函数的产生及其特性,BPSK的调制和解调方法,以及高斯加性白噪声AWNG的特点等等。所有的理论依据为后续的MATLAB程序仿真奠定基础。在MATLAB程序仿真部分,主要分为6大部分,分别为主函数,发送模块,接收模块,AWNG信道
2、,Walsh函数和差错计数器。通过主函数对各个子函数的调用,实现4个用户的随机数据的发送和接收,同时生成前4个用户在整个传输过程中的各种波形变化图,并对系统信噪比与误码率关系进行分析。扩频通信是通信的一个重要分支和信道通信系统的发展方向。扩频技术具有抗干扰能力强,保密性好,易于实现多址通信等优点,因此该技术越来越受到人们的重视,这也是选择本次课题研究的原因所在。关键词: 扩频; walsh;MATLAB;目 录1扩频通信的基本原理11.1扩频通信11.2直接序列扩频21.3 WALSH函数21.4 BPSK31.5高斯加性白噪声(AWNG)32 MATLAB仿真42.1仿真原理框图42.2 程
3、序模块43仿真结果分析113.1误码率113.2信噪比113.3问题的分析和解决124仿真程序135课程设计心得21Abstract22参考文献231扩频通信的基本原理11.1扩频通信1所谓扩展频谱通信,可简单表述如下:“扩频通信技术是一种信息传输方式,其信号所占有的频带宽度远大于所传信息必需的最小带宽;频带的扩展是通过一个独立的码序列来完成,用编码及调制的方法来实现的,与所传信息数据无关;在接收端则用同样的码进行相关同步接收、解扩及恢复所传信息数据”。 扩频通信的基本特点,是传输信号所占用的频带宽度(W)远大于原始信息本身实际所需的最小带宽(B),其比值称为处理增益(Gp)。总之,我们用扩展
4、频谱的宽带信号来传输信息,就是为了提高通信的抗干扰能力,即在强干扰条件下保证可靠安全地通信。这就是扩展频谱通信的基本思想和理论依据。扩频通信的性能。扩频通信的可行性是从信息论和抗干扰理论的基本公式中引伸而来的。信息论中关于信息容量的仙农( Shannon) 公式为:C=Blog2 ( 1+ SN)其中: C 为信道容量( 即极限传输速率) , B 为信号频带宽度, S 为信号功率, N 为噪声功率。Shannon 公式说明, 在给定的传输速率不变的条件下, 频带宽度和信噪比P 可以互换, 即可以通过增加频带宽度, 在信噪比较低的情况下传输信息。扩展频谱以换取信噪比要求的降低, 正是扩频通信的重
5、要特点, 并由此为扩频通信的应用奠定了基础。扩频通信的一个重要参数是扩频增益, 反映了系统抗干扰能力的强弱, 是对信噪比改善程度的度量, 定义为接收机相关器输出信噪比和输入信噪比之比, 即 (1)其中: Rs 为扩频码的传输速率, Rd 为信息数据的传输速率, Bs 为扩频码的带宽, Bd 为信息数据的带宽。按照扩展频谱的方式不同, 现有的扩频通信系统可分为直接序列( DS) 扩频、跳频( FH) 、跳时( TH) 、线性调频( chirp) 以及上述几种方式的组合。扩频通信常用的扩频码主要有PN 序列、GOLD 序列、WALSH 码和OVSF 码。PN 码即伪噪声序列也称之为伪随机序列, 是
6、用确定性方法产生的序列, 但它却近似具有随机产生序列所希望的某些关键随机特性。其中最常见的伪随机序列是m 序列。而扩频通信调制方式一般采用频率调制( FM) 或相位调制( PM) 的方式来进行数据调制, 在码分多址通信中,其调制多采用BPSK、DPSK、QPSK、MPSK 等方式。在码分多址通信中最常用BPSK( 二相移相键控)。1.2 直接序列扩频直接序列扩频就是直接用具有高码率的扩频码序列在发送端去扩展信号的频谱。而在接收端, 用相同的扩频码序列去进行解扩, 将展宽的扩频信号还原成原始的信息。直扩通信系统原理如图1 所示。在发送端输入的信息先经信息调制形成调频或调相数字信号, 然后由扩频码
7、发生器产生的扩频码序列去调制数字信号以展宽信号的频谱, 再将展宽后的宽带信号调制到射频发送出去。在接收端, 接收机接收到宽带射频信号后, 首先将其变频至中频, 然后通过同步电路捕捉发送来的扩频码的准确相位, 由此产生与发送来的伪随机码相位完全一致的接收用的伪随机码, 作为扩频解调用的本地扩频码序列, 最后经信息解调, 恢复成原始信息输出。由此可见, 直扩通信系统要进行三次调制和相应的解调, 分别为信息调制、扩频调制和射频调制, 以及相应的信息解调、解扩和射频解调。与一般通信系统比较, 扩频通信就是多了扩频调制和解扩部分。1.3 WALSH函数WALSH 函数是一种非正弦的完备正交函数系, 具有
8、理想的互相关特性, 两两之间的互相关函数为0, 亦即它们是正交的。因而在码分多址同心中,WALSH 函数可以作为地址码使用。在本设计中,就使用了WALSH码。 它仅有可能的取值:1和1(或0和1),比较适合于用来表达和处理数字信号。1.4 BPSK二进制移相键控(BPSK) 调制是载波相位按基带脉冲变化的一种数字调制方式。BPSK 的信号形式一般表示为e0 ( t) = nang ( t - nT s) co sXc t (6) (2)这里, g ( t) 是脉宽为T s 的单个矩形脉冲, 而an 的统计特性为an = +1, 概率为P-1, 概率为(1- P )绝对移相BPSK 存在相位模糊
9、, 因此实际应用中多采用相对移相2DPSK 的调制方式。这只要在信号源后加一个码变换, 且在解调端的抽样判决器后加一个码反变换器。BPSK 信号产生的方法有调相法和相位选择法两大类。在具体实现时, 我们取每码元两个载波, 每载波抽样16 个点, 即每码元抽样32 点。因此, 用调相法实现时, 我们可以方便地用数字乘法器实现, 具体方法见图2。 图2 调相法1.5高斯加性白噪声(AWNG)白噪声是指功率谱密度在整个频域内均匀分布的噪声。即其功率谱密度:(为常数), (3)白噪声的自相关函数:因为,所以其自相关函数为: (4)由式(4)可知,白噪声的自相关函数仅在时才不为零;而对于其他任意的,它都
10、为零。这说明只有在时才相关,而它在任意两个时刻上的随机变量都是不相关的。但是带限的白噪声就不是这样的自相关函数了,因为其功率谱密度是窗函数(线段),而不是一条直线。加性高斯白噪声(AWGN)从统计上而言是随机无线噪声,其特点是其通信信道上的信号分布在很宽的频带范围内。 高斯白噪声的概念。白指功率谱恒定;“高斯”指幅度取各种值时的概率p (x)是高斯函数;“加性”指 噪声独立于有用信号,不随信号的改变而改变。2. MATLAB仿真22.1仿真原理方框图根据选题的设计要求,我们采用四个用户的数据,首先在发送端将四个用户的数据分别进行调制(包括Walsh扩频调制和BPSK调制),然后再将已调用户信号
11、进行相加,输入带有AWNG高斯加性白噪声的信道中。在接收端,将从信道送出的信号进行解调(包括BPSK解调和Walsh解调)。最后,通过判决器输出还原后的信号,将还原信号和原始信号进行比较,用误码计数器统计误码个数。方框图如图3User1User4Walsh扩频Walsh扩频BPSK调制BPSK调制相加信道BPSK调制Walsh扩频判决User计数图3仿真系统框图2.2 程序模块2.2.1 Walsh函数的产生产生Walsh函数的源代码如下:function A=walsh(x) H2=1 1;1 -1;%2阶哈达码NH2=H2*(-1); H4=H2 H2;H2 NH2;%4阶哈达码NH4=-
12、1*H4; H8=H4 H4;H4 NH4;%8阶哈达码NH8=-1*H8; H16=H8 H8;H8 NH8;%16阶哈达码NH16=-1*H16; H32=H16 H16;H16 NH16;%32阶哈达码NH32=-1*H32; H64=H32 H32;H32 NH32;%64阶哈达码NH64=-1*H64; H128=H64 H64;H64 NH64;%128阶哈达码NH128=-1*H128; switch x case 2 A=H2; case 4 A=H4; case 8 A=H8; case 16 A=H16; case 32 A=H32; case 64 A=H64; case
13、 128 A=H128; otherwise disp(error);end在本实验中我们采用16阶哈达码对用户数据进行Walsh扩频调制,只要调用函数N=16;B=walsh(N),即可产生扩频增益为N16的扩频码。2.2.2 发送端实验中我们把发送端的各个子模块写在一个函数中,由main函数进行调用,发送模块的函数名为send_module(nA,N,m,B),其中nA为用户A通过调用MATLAB自带的fix(unifrnd(0,255)函数,产生一个字节的随机信号;N为哈达码的阶数;m为N阶哈达码的第m行,即Walsh扩频码。函数返回两组值,nA_2,ChannelA中nA_2表示用户A
14、数据从十进制转换为二进制,并分解为适合电路传输的双极性数字基带信号(例如,nA=112,则nA_2=+1 +1 +1 -1 -1 -1 -1 -1),可以做为误码计数器的原始比较信号。而ChannelA表示用户A数据调制后的最终数据。图4是用户A调制过程的各个波形。发送端函数调用的源代码如下:for i=1:4 switch i case 1 %nA=input(用户A数据nA=); nA=fix(unifrnd(0,255);%产生一个字节随机信号 m=i+1; figure(1); nA_2,ChannelA=send_module(nA,N,m); case 2 %nB=input(用户
15、B数据nB=); nB=fix(unifrnd(0,255);%产生一个字节随机信号 m=i+1; figure(2); nB_2,ChannelB=send_module(nB,N,m); case 3 %nC=input(用户C数据nC=); nC=fix(unifrnd(0,255);%产生一个字节随机信号 m=i+1; figure(3); nC_2,ChannelC=send_module(nC,N,m); case 4 %nD=input(用户D数据nD=); nD=fix(unifrnd(0,255);%产生一个字节随机信号 m=i+1; figure(4); nD_2,Chan
16、nelD=send_module(nD,N,m); otherwise disp(error); end i=i+1;end图4 用户A直接序列扩频通信调制 图5用户B直接序列扩频通信调制图6 用户C直接序列扩频通信调制图7 用户D直接序列扩频通信调制2.2.3 信道如图8所示,是信道两端信号的波形。将用户A、B、C、D已调信号相加后,送入传输信道中,用高斯加性白噪声对信道中的信号进行干扰。本实验调用MATLAB自带的awgn(Channel,snr,measured)函数,其中,Channel是所有用户已调信号的和,snr是信道的信噪比。信道传输的源代码如下:figure(5);Channe
17、l=ChannelA+ChannelB+ChannelC+ChannelD;q=1:1:128*8;subplot(2,1,1);plot(q,Channel);title(发射信号)axis(1 1024 -4.4 4.4) snr=0.00001;%信道的信噪比,单位dBy = awgn(Channel,snr,measured) ; subplot(2,1,2);plot(q,y);axis(1 1024 -4.4 4.4)title(接收信号)图8 awng信道发送端和接收端波形2.2.4 接收端接收函数的函数名为receive_module(N,y,m),其中N为哈达码的阶数,y为接
18、收信号,m为N阶哈达码的第m行,即Walsh扩频码。返回值receiveA表示接收对用户A发送的信号进行解调后还原的信号,作为最后差错计数器还原比较信号。接收端解调过程的具体源代码如下:for i=1:4; switch i case 1 m=i+1; figure(6); receiveA=receive_module(N,y,m); case 2 m=i+1; figure(7); receiveB=receive_module(N,y,m); case 3 m=i+1; figure(8); receiveC=receive_module(N,y,m); case 4 m=i+1; fi
19、gure(9); receiveD=receive_module(N,y,m); otherwise disp(error); end i=i+1;end如图9所示,是接收端信号解调过程中各个子模块的波形图。图9用户A直接序列扩频通信解调 图10用户B直接序列扩频通信解调图11用户C直接序列扩频通信解调图12用户D直接序列扩频通信解调 for i=1:4; switch i case 1 m=i+1; figure(6); receiveA=receive_module(N,y,m); case 2 m=i+1; figure(7); receiveB=receive_module(N,y,m
20、); case 3 m=i+1; figure(8); receiveC=receive_module(N,y,m); case 4 m=i+1; figure(9); receiveD=receive_module(N,y,m); otherwise disp(error); end i=i+1;end2.2.5 差错计数器将4个用户的发送函数和接收函数的返回值逐位进行比较。差错计数器源代码如下:send=nA_2;nB_2;nC_2;nD_2%发送端用户原始数据receive=receiveA;receiveB;receiveC;receiveD %接收端还原后的数据count=0;%统计
21、误码个数for i=1:32 if send(i)=receive(i) count=count+1; endenddisp(误码个数); 3仿真结果分析3.1 误码率在数字通信中,误码率是一项主要的性能指标。在实际测量数字通信系统的误码率时,一般测量结果与信源送出信号的统计特性有关。通常认为二进制信号中0和1是以等概率随机出现的,所以测量误码率时最理想的信源应是随机信号发生器。由于Walsh函数是周期性的伪随机序列,因而可作为一种较好的随机信源。扩频序列通过终端机和信道后,输出仍为扩频序列。在接收端,本地产生一个同步的扩频码,与收码序列逐位相乘再求规格化内积,再与发送端信源码进行比较,一旦有
22、错,误码计数器加一。误码率的数学表达式为: (5)其中S是信码个数,e是误码个数,E就是误码率。3.2信噪比测量通信系统的性能时,常常要使用噪声发生器,由它给出具有所要求的统计特性和频率特性的噪声,并且可以随意控制其强度,以便得到不同信噪比条件下的系统性能。在实际测量中,往往需要用到带限高斯白噪声。本实验中的噪声主要有两类,一类是用户间相互干扰的噪声,由于用户信息经过扩频具有伪随机性,所以又可称为伪噪声;另一类是我们自己添加到信道的高斯加性白噪声AWNG,它独立于信源信号。信噪比计算是数学表达式为: (6)其中为信码发射功率,为噪声功率, 为信源码,为信宿码,计算结果单位为dB。本实验设计,为
23、了更好的验证系统性能,我们特意增加噪声幅度,在用户为四不变的前提下,减小awng的信噪比,我们把awng (Channel,snr,measured)函数中的信噪比snr取值在-1010,-10(-4)范围内。只运行用户A的误码率和信噪比得图13.从图13可以看到系统的误码率随信道信噪比的变化,有递减的趋势,当信噪比接近于0时,系统误码率接近于0;当信噪比接近负无穷时,系统误码率接近于100。如图13图13用户A的误码率与信噪比关系曲线3.3问题的分析和解决(1)BPSK解调按照传统方法,对于式子: (6)如果要获得,要用低通滤波器,滤除高频信号,但是滤波器算法复杂,并且实现起来往往不太理想,
24、不能确保有用信号不被滤除,噪声信号不会残留。于是,利用MATLAB强大的运算能力,用数学的方法反推出。从信道接收到的信号用数学式子表示为:,其中表示用户A已调信号,为信道噪声,包括其它用户信号和高斯加性白噪声。为了方便计算,我们舍去了噪声部分,然后将接收到的信号直接代入计算。具体数学推导过程如下: (7)从(7)式中可以看出,只要解方程求出,即可实现BPSK的解调。这里,我们利用MATLAB强大的运算功能,采用符号函数进行求反运算。具体实现源代码如下:syms wc t x;%y为接收信号,wc为载波频率,t为时间,x为解调信号,即y=x/2+cos(2*wc*t)*x-sin(2*wc*t)
25、*sqrt(1-x2)/2;fi=finverse(y,x) %finverse为求反函数运算结果得到为:fi=(x*sin(2*wc*t)+1/2*(4*x2*sin(2*wc*t)2-2*cos(2*wc*t)*sin(2*wc*t)2+2*sin(2*wc*t)2+8*x2*cos(2*wc*t)-8*x2)(1/2)/sin(2*wc*t) (8)替换符号后如下:=(y*cos(wc*t)*sin(2*wc*t)+1/2*(4*y*cos(wc*t)2*sin(2*wc*t)2-2*cos(2*wc*t)*sin(2*wc*t)2+2*sin(2*wc*t)2+8*y*cos(wc*t
26、)2*cos(2*wc*t)-8*y*cos(wc*t)2)(1/2)/sin(2*wc*t) (9)注意,在MATLAB中数组之间的运算,符号“*、/、”应该换成“.*、./、.”。(2)Walsh解扩我们知道,在现代通信系统中,大多采用数字通信。而对于直接序列扩频系统,大都需要在接收端末端加上一个积分器,利用Walsh函数的正交性进行解扩。在数字通信系统中,积分器转换为累加器,我们在CDMA通信原理中找到了理论依据,通过求规格化内积,求一个用户码片内所有扩频码累加以后求平均值。于是,我们得到了一个比较平整的解调波形。4. 仿真程序(1)主函数main.m%*main.m*clearclc%
27、N=input(walshN=);N=16;for i=1:4 switch i case 1 %nA=input(AnA=); nA=fix(unifrnd(0,255);% m=i+1; figure(1); nA_2,ChannelA=send_module(nA,N,m); case 2 %nB=input(BnB=); nB=fix(unifrnd(0,255);% m=i+1; figure(2); nB_2,ChannelB=send_module(nB,N,m); case 3 %nC=input(CnC=); nC=fix(unifrnd(0,255);% m=i+1; fi
28、gure(3); nC_2,ChannelC=send_module(nC,N,m); case 4 %nD=input(DnD=); nD=fix(unifrnd(0,255);% m=i+1; figure(4); nD_2,ChannelD=send_module(nD,N,m); otherwise disp(error); end i=i+1;end figure(5);Channel=ChannelA+ChannelB+ChannelC+ChannelD;q=1:1:128*8;subplot(2,1,1);plot(q,Channel);title()axis(1 1024 -5
29、 5) snr=0000.1;y = awgn(Channel,snr,measured) ; subplot(2,1,2);plot(q,y);axis(1 1024 -15.5 15.5)title() for i=1:4; switch i case 1 m=i+1; figure(6); receiveA=receive_module(N,y,m); case 2 m=i+1; figure(7); receiveB=receive_module(N,y,m); case 3 m=i+1; figure(8); receiveC=receive_module(N,y,m); case
30、4 m=i+1; figure(9); receiveD=receive_module(N,y,m); otherwise disp(error); end i=i+1;end %send=nA_2;nB_2;nC_2;nD_2;receive=receiveA;receiveB;receiveC;receiveD;count=0;for i=1:32 if send(i)=receive(i) count=count+1; endenddisp(); (2) walsh.mfunction A=walsh(x) H2=1 1;1 -1;%2阶哈达码NH2=H2*(-1); H4=H2 H2;
31、H2 NH2;%4阶哈达码NH4=-1*H4; H8=H4 H4;H4 NH4;%8阶哈达码NH8=-1*H8; H16=H8 H8;H8 NH8;%16阶哈达码NH16=-1*H16; H32=H16 H16;H16 NH16;%32阶哈达码NH32=-1*H32; H64=H32 H32;H32 NH32;%64阶哈达码NH64=-1*H64; H128=H64 H64;H64 NH64;%128阶哈达码NH128=-1*H128; switch x case 2 A=H2; case 4 A=H4; case 8 A=H8; case 16 A=H16; case 32 A=H32; c
32、ase 64 A=H64; case 128 A=H128; otherwise disp(error);end(3) send_module.mfunction data_2,I=send_module(n,N,unum) B=walsh(N);data=dec2base(n,2);data_2=ones(1,8)*(-1);for i=1:8; da=n/2; n=fix(da); if (da-n)0 ; data_2(i)=1; else data_2(i)=-1; end i=i+1;endC=ones(1,128);i=1;for k=1:8; for u=(k-1)*128+1:
33、k*128; D(u)=data_2(k).*C(i); u=u+1; i=i+1; end k=k+1; i=1;endq=1:1:128*8;subplot(5,1,1)plot(q,D); %生成用户数据的波形axis(1 1024 -1.2 1.2)title(直接序列扩频通信调制部分)ylabel(用户m(t)) n2=128/N;n3=ones(1,n2);n6=1;for n4=1:N for n5=(n4-1)*n2+1:n4*n2; E(n5)=B(unum,n4).*n3(n6); n5=n5+1; n6=n6+1; end n4=n4+1; n6=1;endF=E E E
34、 E E E E E;subplot(5,1,2)plot(q,F); %循环生成Walsh码axis(1 1024 -1.2 1.2)ylabel(Walsh码p(t); G=D.*F*(-1);subplot(5,1,3)plot(q,G); %直接序列扩频axis(1 1024 -1.2 1.2)ylabel(c(t)=m(t)*p(t); T=n2;w=2*pi/T;H=sin(w*q);subplot(5,1,4)plot(q,H);axis(1 1024 -1.2 1.2)ylabel(载波); I=H.*G*(-1);subplot(5,1,5)plot(q,I);axis(1
35、1024 -1.2 1.2)ylabel(BPSK已调波);(3) receive_module.mfunction receive_signal=receive_module(N,y,unum); K=walsh(N);q=1:1:128*8;n2=128/N;T=n2;w=2*pi/T;L=sin(w*q);subplot(5,1,1)plot(q,L);axis(1 1024 -1.2 1.2)ylabel(载波);title(直接序列扩频通信解调部分)R=y.*L;P=1./2./(16+9.*sin(2.*w.*q).*sin(2.*w.*q).*(12.*sin(2.*w.*q).
36、*cos(2.*w.*q).*R+20.*sin(2.*w.*q).*R+4.*sqrt(9.*sin(2.*w.*q).*sin(2.*w.*q).*cos(2.*w.*q).*cos(2.*w.*q).*R.*R+48.*sin(2.*w.*q).*sin(2.*w.*q).*cos(2.*w.*q).*R.*R-41.*R.*R.*sin(2.*w.*q).*sin(2.*w.*q)-32.*cos(2.*w.*q).*sin(2.*w.*q).*sin(2.*w.*q)+66.*sin(2.*w.*q).*sin(2.*w.*q).*sin(2.*w.*q).*sin(2.*w.*q)
37、+32.*sin(2.*w.*q).*sin(2.*w.*q)+32.*R.*R.*cos(2.*w.*q)-32.*R.*R-18.*sin(2.*w.*q).*sin(2.*w.*q).*sin(2.*w.*q).*sin(2.*w.*q).*cos(2.*w.*q)+27.*sin(2.*w.*q).*sin(2.*w.*q).*sin(2.*w.*q).*sin(2.*w.*q).*sin(2.*w.*q).*sin(2.*w.*q)-27.*sin(2.*w.*q) .*sin(2.*w.*q).*sin(2.*w.*q) .*sin(2.*w.*q).*R.*R)./sin(2.*w.*q);subplot(5,1,2)plot(q,P); %BPSK解调axis(1 1024 -1.5 1.5)ylabel(BPSK解调); n3=ones(1,n2);n6=1;for n4=1:N for n5=(n4-1)*n2+1:n4*n2; E(n5)=K(unum,n4).*n3(n6); n5=n5+1; n6=n6+1; end n4=n4+1; n6=1;endF=E E E E E E E E;%F为对应用户的Walsh码序列V=P.*F;subplot(5,1,3)plot(q,V); axis(1 1024 -1.5 1.5)ylabel(Wal
限制150内