OFDMmatlab源程序总结

上传人:仙*** 文档编号:101118906 上传时间:2022-06-04 格式:DOC 页数:24 大小:92.50KB
收藏 版权申诉 举报 下载
OFDMmatlab源程序总结_第1页
第1页 / 共24页
OFDMmatlab源程序总结_第2页
第2页 / 共24页
OFDMmatlab源程序总结_第3页
第3页 / 共24页
资源描述:

《OFDMmatlab源程序总结》由会员分享,可在线阅读,更多相关《OFDMmatlab源程序总结(24页珍藏版)》请在装配图网上搜索。

1、-比较完整的OFDM仿真,供大家学习下载。、%main_OFDM.m%一个相对完整的OFDM通信系统的仿真设计,包括编码,调制,IFFT,%上下变频,高斯信道建模,FFT,PAPR抑制,各种同步,解调和解码等模%块,并统括系统性能的仿真验证了系统设计的可靠性。clear allclose allclc%+全局变量+% seq_num 表示当前帧是第几帧% count_dds_up 上变频处的控制字的累加% count_dds_down 下变频处的控制字的累加整整% count_dds_down_tmp 下变频处的控制字的累加小数% dingshi 定时同步的定位% m_syn 记录定时同步中的

2、自相关平台global seq_numglobal count_dds_upglobal count_dds_downglobal count_dds_down_tmpglobal dingshi global m_syn%+% SNR_Pre 设定用于仿真的信噪比的初值% interval_SNR 设定用于仿真的信噪比间隔% frame_num 每一个信噪比下仿真的数据帧数% err_int_final 用于计算每帧出现的误比特数% fwc_down 设定的接收机初始载波频率控制字% fre_offset 设定接收机初始载波频率偏移调整量单位为Hz% k0 每次进入卷积编码器的信息比特数%

3、G 卷积编码的生成矩阵SNR_Pre=-5;interval_SNR=1;for SNR_System=SNR_Pre:interval_SNR:5frame_num=152;dingshi=250;err_int_final=0;fwc_down=16.050;fre_offset=0;k0=1;G=1 0 1 1 0 1 1;1 1 1 1 0 0 1 ;disp(-start-);for seq_num=1:frame_num, %frame_num 帧数%+以下为输入数据局部+datain=randint(1,90); %+%+以下为信道卷积编码局部+encodeDATA=v_encd

4、(G,k0,datain);%+%+信道交织编码+interlacedata=interlacecode(encodeDATA,8,24);%+%+以下为QPSK调制局部+QPSKdata=qpsk(interlacedata);%+%+生成训练序列+if seq_num3trainsp_temp=seq_train(); end%+%+插入导频+PILOT=(1+j);m_QPSKdata=QPSKdata;data2fft_temp=m_QPSKdata(1:8),PILOT,m_QPSKdata(9:16),PILOT,m_QPSKdata(17:24),PILOT,m_QPSKdata

5、(25:32),PILOT,m_QPSKdata(33:40),PILOT,m_QPSKdata(41:48),m_QPSKdata(49:56),PILOT,m_QPSKdata(57:64),PILOT,m_QPSKdata(65:72),PILOT,m_QPSKdata(73:80),PILOT,m_QPSKdata(81:88),PILOT,m_QPSKdata(89:end);%+trainsp_temp2=trainsp_temp,zeros(1,128);trainsp=trainsp_temp2(65:256),trainsp_temp2(1:64);%+降PAPR矩阵变换+m

6、ati*_data=nyquistimp_PS();matri*_mult=data2fft_temp*mati*_data;%+data2fft2=matri*_mult(65:128),zeros(1,128),matri*_mult(1:64);%+ifft运算+if seq_num=1 ifftin=trainsp;elseif seq_num=2 ifftin=trainsp;else ifftin=data2fft2;endIFFTdata=fft_my(conj(ifftin)/256);IFFTdata=conj(IFFTdata);% figure% plot(real(IF

7、FTdata)% *label(realIFFTdata)% figure% plot(imag(IFFTdata)% *label(imagIFFTdata) %+%+以下为插入循环前后缀,2倍升采样+data2fir=add_CYC_upsample(IFFTdata,2);% +% +fir低通滤波+guiyi_a=0.00172160.0101620.0255120.028801-0.0059219-0.060115-0.04960.0914310.296360.39560.296360.091431-0.0496-0.060115-0.00592190.0288010.0255120

8、.0101620.0017216 ;%抽样截止频率为128kHZ,通带截止频率为20kHZ,阻带截止频率为40kHZ,带纹波动小于1dB,带外衰减100dBt*FIRdatai=filter(guiyi_a,1,real(data2fir);t*FIRdataq=filter(guiyi_a,1,imag(data2fir);% +%+发射机cic滤波+CICidatai=cic_inter(t*FIRdatai,20);CICidataq=cic_inter(t*FIRdataq,20);%+%+上变频+fwc_up=16; %控制字可以选择DUCdata=up_convert_ofdm(f

9、wc_up,CICidatai,CICidataq);%+%+高斯白噪声信道+DUCdata,datama*=guiyi_DUCdata(DUCdata);awgn_data=awgn(DUCdata,SNR_System); %+%*承受机*%+下变频+DUCdata_tmp=awgn_data;fwc_down=fwc_down+(fre_offset*128/2560000);r_fre_offset=2560000*(fwc_down-fwc_up)/128);DDCdatai,DDCdataq=down_convert_ofdm(fwc_down,DUCdata_tmp);%+%+接

10、收机cic滤波+CICddatai=cic_deci(DDCdatai,40,40);CICddataq=cic_deci(DDCdataq,40,40);%+%+fir低通滤波+guiyi_b= 0.019527-0.039340.049055-0.018102-0.10030.59440.5944-0.1003-0.0181020.049055-0.039340.019527;%抽样截止频率为64kHZ,通带截止频率为20kHZ,阻带截止频率为30kHZ,带纹波动小于1dB,带外衰减60dBr*FIRdatai=filter(guiyi_b,1,CICddatai);r*FIRdataq=

11、filter(guiyi_b,1,CICddataq);%+%+量化+q_r*FIRdatai=sign(r*FIRdatai); q_r*FIRdataq=sign(r*FIRdataq);%+%+定时同步检测+if seq_num2 seq_num-2 fftw=32+dingshi; r*FIRdata_syn=r*FIRdatai(fftw:fftw+255)+j*r*FIRdataq(fftw:fftw+255); FFTdata=fft_my(r*FIRdata_syn); %+%+降PAPR逆矩阵变换+fftdata_reg=FFTdata(193:256),FFTdata(1:

12、64);dematri*_data=fftdata_reg*pinv(mati*_data);%+%+相位补偿+r*_qpsk_din_th=phase_p(dematri*_data);%+%+QPSK解调局部+% figure% plot(r*_qpsk_din_th,.)% *label(星座图)datatemp4=deqpsk(r*_qpsk_din_th);datatemp4=sign(datatemp4);for m=1:192 if datatemp4(m)=-1 datatemp4(m)=1; elseif datatemp4(m)=1 datatemp4(m)=0; ende

13、nd%+%+信道解交织+interdout=interlacedecode(datatemp4,8,24);%+%+以下为viterbi译码局部+decodeDATA=viterbi(G,k0,interdout);%+%+误比特统计+err_final=sum(abs(decodeDATA-datain) err_int_final=err_int_final+err_final endenddisp(-);SNR_Systemerr_rate_final(SNR_System-SNR_Pre)./interval_SNR+1)=err_int_final/(90*(frame_num-2)

14、disp(-);enddisp(-end-);SNR_System=SNR_Pre:interval_SNR:5;figuresemilogy(SNR_System,err_rate_final,b-*);*label(信噪比/dB)ylabel(误码率)a*is(-5,5,0,1)grid on%+%*beginning of file*%v_encd.m%卷积码编码程序function output=v_encd(G,k0,input)%v_encd(G,k0,input),k0 是每一时钟周期输入编码器的 bit 数,% G 是决定输入序列的生成矩阵,它有 n0 行 L*k0 列 n0

15、是输出 bit 数,% 参数 n0 和 L 由生成矩阵 G 导出,L 是约束长度。L 之所以叫约束长度% 是因为编码器在每一时刻里输出序列不但与当前输入序列有关,% 而且还与编码器的状态有关,这个状态是由编码器的前(L-1)k0。% 个输入决定的,通常卷积码表示为(n0,k0,m),m=(L-1)*k0 是编码% 器中的编码存贮个数,也就是分为 L-1 段,每段 k0 个% 有些人将 m=L*k0 定义为约束长度,有的人定义为 m=(L-1)*k0% 查看是否需要补 0,输入 input 必须是 k0 的整数部%+variables+% G 决定输入序列的生成矩阵% k0 每一时钟周期输入编码

16、器的 bit 数% input 输入数据% output 输入数据%+ if rem(length(input),k0)0input=input,zeros(size(1:k0-rem(length(input),k0);endn=length(input)/k0;% 检查生成矩阵 G 的维数是否和 k0 一致if rem(size(G,2),k0)0error(Error,G is not of the right size.)end% 得到约束长度 L 和输出比特数 n0L=size(G,2)/k0;n0=size(G,1);% 在信息前后加 0,使存贮器归 0,加 0 个数为(L-1)*

17、k0 个u=zeros(size(1:(L-1)*k0),input,zeros(size(1:(L-1)*k0);% 得到 uu 矩阵,它的各列是编码器各个存贮器在各时钟周期的容u1=u(L*k0:-1:1);%将加 0 后的输入序列按每组 L*k0 个分组,分组是按 k0 比特增加%从 1 到 L*k0 比特为第一组,从 1+k0 到 L*k0+k0 为第二组,。,%并将分组按倒序排列。for i=1:n+L-2u1=u1,u(i+L)*k0:-1:i*k0+1);enduu=reshape(u1,L*k0,n+L-1);% 得到输出,输出由生成矩阵 G*uu 得到output=resha

18、pe(rem(G*uu,2),1,n0*(L+n-1);% *end of file*%*beginning of file*%interlacecode.mfunction dout=interlacecode(din,m,n)%实现信道的交织编码%din为输入交织编码器的数据,m,n分别为交织器的行列值%+variables+% din 输入数据% m 交织器的行值% n 交织器的列值% dout 输出数据%+ for j=1:m temp(j,:)=din(j*n-(n-1):j*n);enddout_temp=reshape(temp,1,length(din);dout=dout_t

19、emp(1:end);%*end of file*%*beginning of file*%qpsk.m%QPSK调制映射function dout=qpsk(din)%+variables+% din 输入数据% dout 输出数据%+ din2=1-2*din;din_temp=reshape(din2,2,length(din)/2);for i=1:length(din)/2, dout(i)=din_temp(1,i)+j*din_temp(2,i);end% *end of file*%*beginning of file*%seq_train.m%生成用于同步的训练符号funct

20、ion dout=seq_train()%第一帧产生短训练序列,第二帧产生长训练序列%每个短训练符号由16个子载波组成,短训练序列%是由伪随机序列经过数字调制后插0后,再经过%IFFT之后得到的。具体过程如下:首先采用抽头%系数为1 0 0 1 的4级移位存放器产生长度为%15的伪随机序列之后末尾补0,经过QPSK调制之%后的伪随机序列只在16的整数倍位置上出现,其%余的位置补0,产生长度为128的序列,此序列再%补128个0经过数据搬移后做256点的IFFT变换就%得到16个以16为循环的训练序列,经过加循环前%后缀就会产生20个一样的短训练序列。长训练序%列的产生同短训练序列。global

21、 seq_num if seq_num=1 fbconnection=1 0 0 1; QPSKdata_pn=m_sequence(fbconnection),0; QPSKdata_pn=qpsk(QPSKdata_pn);elseif seq_num=2 fbconnection=1 0 0 0 0 0 1; QPSKdata_pn=m_sequence(fbconnection),0; QPSKdata_pn=qpsk(QPSKdata_pn);endcountmod=0;for k=1:128 if seq_num=1 if mod(k-1,16)=0 %生成16位循环的短训练符号

22、countmod=countmod+1; trainsp_temp(k)=QPSKdata_pn(countmod); else trainsp_temp(k)=0; end elseif seq_num=2 if mod(k-1,2)=0 countmod=countmod+1; trainsp_temp(k)=QPSKdata_pn(countmod); else trainsp_temp(k)=0; end endenddout=trainsp_temp;% *end of file*%*beginning of file*%m_sequence.m%用线性移位存放器产生m序列funct

23、ion mseq= m_sequence(fbconnection);%+variables+% fbconnection 线性移位存放器的系数% mseq 生成的m序列%+ n = length(fbconnection);N = 2n-1;register = zeros(1,n - 1) 1;%定义移位存放器的初始状态mseq(1)= register(n);for i = 2:N newregister(1)= mod(sum(fbconnection.*register),2); for j = 2:n, newregister(j)= register(j-1); end; reg

24、ister = newregister; mseq(i) = register(n);end% *end of file*%*beginning of file*%nyquistimp_PS.m%使用改进的Nyquist脉冲实现OFDM信号的PAPR抑制function dout=nyquistimp_PS()%改进的Nyquist脉冲整形方法能够显著改善OFDM信%号的PAPR分布;该方法实现简单,和PTS和SLM相比%不需迭代计算多个IFFT操作,不需传送边带信息,%不会引起信号的畸变;通用性强,可以调整滚降%系数以适应任何子载波数的通信系统。当然,%Nyquist脉冲成形的方法由于扩展了

25、频谱,一定程% 度上降低了频谱利用率。%creat a matri* to shape the subcarries.%the spectrum of the pulse is as follows:% if abs(f)Bw*(1-b)&(abs(f)Bw)&(abs(f)=Bw*(1+b)% spec=0; % end% end% end% end N=106;L=11;b=0.22;% N=84;% L=22;% b=0.5;% N=98;% L=15;% b=0.3;% N=116;% L=6;% b=0.1;T=0.004;Ts=T/N;Bw=1/Ts;begin=-Bw*(1+b)

26、+Bw*(1+b)/128;finish=Bw*(1+b)-Bw*(1+b)/128;distance=Bw*(1+b)/64;kk=0;aa=log(2)/(b.*Bw);for f=begin:distance:finish kk=kk+1; if abs(f)Bw*(1-b)&(abs(f)Bw)&(abs(f)=Bw*(1+b) spec=0; end end end end C(kk)=spec;endfor m=0:N-1 for k=0:(N+2*L-1) p(m+1,k+1)=C(k+1)*e*p(-i*2*pi.*m.*(k-L)./N); endenddout=p;% *e

27、nd of file*%*beginning of file*%fft_my.m%实现N点FFT运算function dout=fft_my(din)%本程序对输入序列din实现DITFFT基2算法,点数取大于等于din长度的2的幂次%+variables+% din 输入数据% dout 输出数据%+ m=ne*tpow2(din) ;N=2m ;if length(din)=128 count_dds_up=count_dds_up-128; end end up_sin,up_cos=ram_sin(count_dds_up); up_sin_t(mk)=up_sin; up_cos_t

28、(mk)=up_cos;endfor *l=1:length(dini) DUCdata(*l)=dini(*l)*up_cos_t(*l)-dinq(*l)*up_sin_t(*l);enddout=DUCdata;% *end of file*%*beginning of file*%ram_sin.m%构造用于DDS的查找表function ysin,ycos=ram_sin(adr)%dds方式需要的sin表%ram_sin为存放器名称%adr为输入地址,y为读出数据%+variables+% adr 输入地址% ysin 输出的正弦值% ycos 输出的余弦值%+ anl_inc=2

29、*pi/128;for n=1:128 data_sin(n)=sin(n-1)*anl_inc); data_cos(n)=cos(n-1)*anl_inc);endysin=data_sin(adr+1);ycos=data_cos(adr+1);% *end of file*%*beginning of file*%guiyi_DUCdata.mfunction dataout,datama*=guiyi_DUCdata(datain)%实现数据的归一化%+variables+% datain 输入数据% dataout 输出数据% datama* 输入数据中的最大值%+ datama*

30、=ma*(abs(datain);dataout=datain./datama*;% *end of file*%*beginning of file*%down_convert_ofdm.mfunction douti,doutq=down_convert_ofdm(fwc_down,din)%用DDS的方式实现下变频%+variables+% fwc_down 下变频处的频率控制字% din 输入数据% douti 输出数据的实部% doutq 输出数据的虚部%+ global seq_num global count_dds_downglobal count_dds_down_tmpfo

31、r mkd=1:length(din) if (seq_num=1) & (mkd=1) count_dds_down=0; count_dds_down_tmp=0; else count_dds_down=round(count_dds_down_tmp+fwc_down); count_dds_down_tmp=count_dds_down_tmp+fwc_down; if count_dds_down=128 count_dds_down=count_dds_down-128; count_dds_down_tmp=count_dds_down_tmp-128; end end up_

32、sin_d,up_cos_d=ram_sin(count_dds_down); up_sin_td(mkd)=up_sin_d; up_cos_td(mkd)=up_cos_d; DDCdatai(mkd)=din(mkd)*up_cos_td(mkd); DDCdataq(mkd)=-din(mkd)*up_sin_td(mkd);enddouti=DDCdatai;doutq=DDCdataq;% *end of file*%*beginning of file*%cic_deci.m%接收机的CIC滤波器设计function dout=cic_deci(din,r,init)%抽取CIC滤波器通过降采样实现%+variables+% din 输入数据%

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!