matlab直扩仿真代码_第1页
matlab直扩仿真代码_第2页
matlab直扩仿真代码_第3页
matlab直扩仿真代码_第4页
matlab直扩仿真代码_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1.在AWGN信道下对直扩通信系统进行性能仿真研究%100kHz40MHz5MHzclose allclear all %SNR=1:1:15Rb=0.25; %0.25Mb/sTb=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); %400endfigure(1)plot(t

2、,d)xlabel(t(ms);ylabel(s(t)(V);title();axis(0,200,-1.5,1.5);grid on %fs=4000; %kHzz=reshape(d,2,N/2); %Q=z(1,:); %s,Q(t)I=z(2,:); %s,I(t)tq=linspace(-T/2,T/2,length(I);QPSK=(I.*cos(2*fs*pi*tq)-Q.*sin(2*fs*pi*tq)/sqrt(2); %QPSKfigure(2)plot(tq,QPSK)xlabel(t(ms);ylabel(QPSK(t)(V);title(QPSK);axis(0,20

3、0,-1.5,1.5);grid on %user=1; %seq=1; %1m 2Gold 3Goldstage=3; %ptap1=1 3; %1 3ptap2=2 3; %2 3regi1=1 1 1; %1 1 1regi2=1 1 1; %1 1 1switch seq case 1 %m code=mseq(stage,ptap1,regi1,user); case 2 %Gold m1= mseq(stage,ptap1,regi1); m2= mseq(stage,ptap2,regi2); code=goldseq(m1,m2,user); case 3 %Gold m1=m

4、seq(stage,ptap1,regi1); m2=mseq(stage,ptap2,regi2); code=goldseq(m1,m2,user),zeros(user,1); end xxx=code clen=length(code);xlength=100*50; %50x_code=zeros(1,xlength);for i=1:xlength %0,1-1,1 if mod(i,7)=0 %mod(a,b)ab x_code(i)=sign(code(mod(i,7)-0.5); elseif mod(i,7)=0 x_code(i)=sign(code(7)-0.5); e

5、ndendk_code=zeros(1,length(QPSK);for i=1:5000 k_code(1+(i-1)*4):i*4)=x_code(i); %4endfigure(3)plot(tq,k_code)xlabel(t(ms);ylabel(k_code(t)(V);title();axis(20,25,-1.5,1.5);grid on %b=QPSK.*k_code; %fc=4e4; %kHztd=linspace(0,T,length(b);%blinspace linlinearx=linspace(a,b,n)ab ns=b.*cos(2*fc*pi*td);fig

6、ure(4)plot(td,s)xlabel(t(ms);ylabel(s(t)(V);title();axis(20,31,-1.5,1.5);grid on %r= awgn(s,SNR(10),measured);% %rs=r.*cos(2*fc*pi*td);figure(5)plot(td,rs)xlabel(t(ms);ylabel(rs(t)(V);title();axis(20,28,-1.5,1.5);grid on %jk_code=rs.*k_code;figure(6)plot(td,jk_code)xlabel(t(ms);ylabel(rk(t)(V);title

7、();axis(20,33,-1.5,1.5);grid onf,rf=T2F(td,jk_code); %tl,l=lpf(f,rf,fc/10000); % %liremod=cos(2*fs*pi*tq)*sqrt(2).*l; %Ifi,lif=T2F(tq,liremod);tji,iremod=lpf(fi,lif,fs/10000); %iremodo=sign(iremod); %lqremod=(-1)*sin(2*fs*pi*tq)*sqrt(2).*l; %Q fq,lqf=T2F(tq,lqremod); tjq,qremod=lpf(fq,lqf,fs/10000);

8、 %qremodo=sign(qremod); %zl=qremodo,iremodo; %figure(7)plot(t,zl)xlabel(t(ms);ylabel(zl(t)(V);title();axis(0,200,-1.5,1.5);grid on z2=0;xo=zeros(size(x);for i=1:100 z2=0 for j=1+(i-1)*400:i*400 z2=z2+zl(j); end if z2=0 xo(i)=1; else xo(i)=-1; endend figure(8)plot(t0,xo)xlabel(t(ms);ylabel(xo(t)(V);t

9、itle();axis(0,400,-1.5,1.5);grid on for a=1:15 r= awgn(s,SNR(a),measured);% rs=r.*cos(2*fc*pi*td); jk_code=rs.*k_code; f,rf=T2F(td,jk_code); %tl,l=lpf(f,rf,fc/10000); %liremod=cos(2*fs*pi*tq)*sqrt(2).*l; %Ifi,lif=T2F(tq,liremod);tji,iremod=lpf(fi,lif,fs/10000); %iremodo=sign(iremod); %lqremod=(-1)*s

10、in(2*fs*pi*tq)*sqrt(2).*l; %Q fq,lqf=T2F(tq,lqremod); tjq,qremod=lpf(fq,lqf,fs/10000); %qremodo=sign(qremod); %zl=qremodo,iremodo; %z2=0;xo=zeros(size(x);for i=1:100 z2=0 for j=1+(i-1)*400:i*400 z2=z2+zl(j); end if z2=0 xo(i)=1; else xo(i)=-1; endend z=0;for i=1:100 if(x(i)=xo(i) z=z+1; endendz1(a)=

11、z/100endfigure(8)plot(SNR,z1)xlabel(SNR);ylabel(z1);title();axis(0,15,10(-4),1);grid on1. ifuser=1 2. ich4=ich3; 3. qch4=qch3; 4. else 5. ich4=sum(ich3); 6. qch4=sum(qch3); 7. end 8. %+ 9. 10. %+衰减信道+ 11. ifrfade=0 12. ich5=ich4; 13. qch5=qch4; 14. else 15. ich5,qch5=sefade(ich4,qch4,itau,dlvl1,th1,

12、n0,itnd1, 16. now1,length(ich4),tstp,fd,flat); 17. itnd1itnd1=itnd1+itndel; 18. end 19. %+ 20. 21. %+接收机+ 22. spow=sum(rot90(ich3.2+qch3.2)/nd;%衰减计算 23. attn=sqrt(0.5*spow*sr/br*10(-ebn0/10); 24. 25. ich6,qch6=comb2(ich5,qch5,attn);%添加高斯白噪声(AWGN) 26. ich7,qch7=compconv2(ich6,qch6,xh2);%滤波 27. 28. sa

13、mpl=irfn*IPOINT+1; 29. ich8=ich7(:,sampl:IPOINT:IPOINT*nd*clen+sampl-1); 30. qch8=qch7(:,sampl:IPOINT:IPOINT*nd*clen+sampl-1); 31. 32. ich9qch9=despread(ich8,qch8,code);%解扩 33. 34. demodata=qpskdemod(ich9,qch9,user,nd,ml);%QPSK解调 35. %+ 36. 37. %+误码率分析+ 38. 39. noe2=sum(sum(abs(data-demodata); 40. n

14、od2=user*nd*ml; 41. noenoe=noe+noe2; 42. nodnod=nod+nod2; 43. 44. %fprintf(%dt%en,ii,noe2/nod2); 45. 46. end 47. %+ 48. 49. %+数据文件+ 50. ber=noe/nod; 51. fprintf(%dt%dt%dt%en,ebn0,noe,nod,noe/nod); 52. fid=fopen(BER.dat,a); 53. fprintf(fid,%dt%et%ft%ftn,ebn0,noe/nod,noe,nod); 54. fclose(fid); 55. err

15、_rate_final(ebn0+6)=ber; 56. end 57. %+ 58. 59. %+性能仿真图+ 60. figure 61. semilogy(SNR,err_rate_final,b-*); 62. xlabel(信噪比/dB) 63. ylabel(误码率) 64. axis(-5,10,0,1) 65. gridon 66. 67. disp(-end-); 68. %+ 69. 70. 71. %*beginningoffile* 72. %hrollfcoef.m 73. % 74. %此函数用于产生Nyquist滤波器的系数 75. % 76. 77. 78. f

16、unctionxh=hrollfcoef(irfn,ipoint,sr,alfs,ncc) 79. 80. 81. %+variables+ 82. %irfn用于滤波的符号数 83. %ipoint每个符号的抽样值数 84. %sr符号速率 85. %alfs衰减截止频率 86. %ncc1-发送端滤波0-接收端滤波 87. %+ 88. 89. xi=zeros(1,irfn*ipoint+1); 90. xq=zeros(1,irfn*ipoint+1); 91. 92. point=ipoint; 93. tr=sr; 94. tstp=1.0./tr./ipoint; 95. n=i

17、point.*irfn; 96. mid=(n./2)+1; 97. sub1=4.0.*alfs.*tr; 98. 99. fori=1:n 100. 101. iicon=i-mid; 102. ym=icon; 103. 104. ificon=0.0 105. xtalfs./pi).*tr; 106. else 107. sub2=16.0.*alfs.*alfs.*ym.*ym./ipoint./ipoint; 108. ifsub2=1.0 109. x1=sin(pi*(1.0-alfs)/ipoint*ym)./pi./(1.0-sub2)./ym./tstp; 110. x

18、2=cos(pi*(1.0+alfs)/ipoint*ym)./pi.*sub1./(1.0-sub2); 111. xt=x1+x2; 112. else 113. xt=alfs.*tr.*(1.0-2.0/pi).*cos(pi/4.0/alfs)+(1.0+2.0./pi). 114. *sin(pi/4.0/alfs)./sqrt(2.0); 115. end 116. end 117. 118. ifncc=0%当接收机情况 119. xh(i)=xt./ipoint./tr; 120. elseifncc=1%当发射机情况 121. xh(i)=xt./tr; 122. else

19、 123. error(nccerror); 124. end 125. 126. end 127. 128. %*endoffile* 129. 130. 131. %*beginningoffile* 132. %mseq.m 133. % 134. %此函数产生m序列 135. % 136. %试举一例: 137. %stg=3 138. %taps=1,3 139. %inidata=1,1,1 140. %n=2 141. % 142. 143. 144. functionmout=mseq(stg,taps,inidata,n) 145. 146. %+variables+ 147

20、. %stgm序列阶数 148. %taps线性移位寄存器的系数 149. %inidata序列的初始化 150. %n输出序列的数目 151. %mout输出的m序列 1. %+2. ifnargin1 22. forii=2:n 23. mout(ii,:)=shift(mout(ii-1,:),1,0); 24. end 25. end 26. 27. %*endoffile* 28. 29. 30. %*beginningoffile* 31. %shift.m 32. % 33. %此函数用于实现线性移位寄存器的移位操作 34. % 35. 36. functionoutregi=s

21、hift(inregi,shiftr,shiftu) 37. 38. %+variables+ 39. %inrege向量或矩阵 40. %shiftr右移量 41. %shiftu顶部移位量 42. %outregi寄存器的输出 43. %+ 44. 45. h,v=size(inregi); 46. outregi=inregi; 47. 48. shiftr=rem(shiftr,v); 49. shiftu=rem(shiftu,h); 50. 51. ifshiftr0 52. outregi(:,1:shiftr)=inregi(:,v-shiftr+1:v); 53. outre

22、gi(:,1+shiftr:v)=inregi(:,1:v-shiftr); 54. elseifshiftr0 62. outregi(1:h-shiftu,:)=inregi(1+shiftu:h,:); 63. outregi(h-shiftu+1:h,:)=inregi(1:shiftu,:); 64. elseifshiftu0 65. outregi(1:-shiftu,:)=inregi(h+shiftu+1:h,:); 66. outregi(1-shiftu:h,:)=inregi(1:h+shiftu,:); 67. end 68. 69. %*endoffile* 70.

23、 71. 72. %*beginningoffile* 73. %goldseq.m 74. % 75. %此函数用于产生gold序列 76. % 152.1. functiongout=goldseq(m1,m2,n) 2. 3. %+variables+ 4. %m1第一个m序列 5. %m2第二个m序列 6. %n输出序列的数目 7. %gout输出产生的gold序列 8. %+ 9. 10. ifnarginhc 98. error(lackofspreadcodesequences); 99. end 100. 101. iout=zeros(hn,vn*vc); 102. qout

24、=zeros(hn,vn*vc); 103. 104. forii=1:hn 105. iout(ii,:)=reshape(rot90(code1(ii,:),3)*idata(ii,:),1,vn*vc); 106. qout(ii,:)=reshape(rot90(code1(ii,:),3)*qdata(ii,:),1,vn*vc); 107. end1. %*endoffile* 2. 3. 4. %*beginningoffile* 5. %compoversamp2.m 6. % 7. %此函数实现sample倍升采样 8. % 9. 10. functioniout,qout=

25、compoversamp2(iin,qin,sample) 11. 12. %+variables+ 13. %iin输入序列实部 14. %qin输入序列虚部 15. %iout输出序列实部 16. %qout输出序列虚部 17. %sample升采样的倍数 18. %+ 19. 20. h,v=size(iin); 21. 22. iout=zeros(h,v*sample); 23. qout=zeros(h,v*sample); 24. 25. iout(:,1:sample:1+sample*(v-1)=iin; 26. qout(:,1:sample:1+sample*(v-1)=

26、qin; 27. 28. %*endoffile* 29. 30. 31. %*beginningoffile* 32. %compconv2.m 33. % 34. %此函数用于实现有用信号的滤波 35. % 36. 37. 38. functioniout,qout=compconv2(idata,qdata,filter) 39. 40. %+variables+ 41. %idata输入序列实部 42. %qdata输入序列虚部 43. %iout输出序列实部 44. %qout输出序列虚部 45. %filter滤波器的系数 46. %+ 47. iout=conv2(idata,f

27、ilter); 48. qout=conv2(qdata,filter); 49. 50. %*endoffile* 51. 52. 53. %*beginningoffile* 54. %sefade.m 55. % 56. %此函数用于实现信道的频率选择性衰落设计 57. % 58. 59. 60. functioniout,qout,ramp,rcos,rsin=sefade 61. (idata,qdata,itau,dlvl,th,n0,itn,n1,nsamp,tstp,fd,flat) 62. 63. %+variables+ 64. %idata输入的实部数据 65. %qda

28、ta输入的虚部数据 66. %iout输出的实部数据 67. %qout输出的虚部数据 68. %ramp幅度衰减 69. %rcos正交分量衰减 70. %rsin同相分量衰减 71. %itau各径时延 72. %dlvl各多径衰减量 73. %th各多径初始相位 74. %n0用于产生各径衰落的波数 75. %itn各多径衰减计数 76. %n1主径和各延迟波形总数 77. %nsamp符号数 78. %tstp最小时间分辨率 79. %fd最大多普勒频移 80. %flat是否是平坦衰落 81. %(1-flat(只有幅度衰落),0-nomal(相位和幅度都衰落) 82. %+1. iout=zeros(1,nsamp); 2. qout=zeros(1,nsamp); 3. 4. total_attn=sum(10.(-1.0.*dlvl./10.0); 5. 6. fork=1:n1 7. 8. atts=10.(-0.05.*dlvl(k); 9. 10. ifdlvl(k)=40.0 11. atts=0.0; 12. end 13. 14. tht

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论