ImageVerifierCode 换一换
格式:DOCX , 页数:41 ,大小:25.99KB ,
资源ID:9623056      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-9623056.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(OFDM matlab源程序.docx)为本站会员(b****0)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

OFDM matlab源程序.docx

1、OFDM matlab源程序%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 每次进入卷积编码器的信息比特数% G

3、卷积编码的生成矩阵SNR_Pre=-5;interval_SNR=1;for SNR_System=SNR_Pre:interval_SNR:5 frame_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=cnv_en

4、cd(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_QPSKda

5、ta(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矩阵变换

6、+matix_data=nyquistimp_PS();matrix_mult=data2fft_temp*matix_data;%+data2fft2=matrix_mult(65:128),zeros(1,128),matrix_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(

7、IFFTdata)% xlabel(realIFFTdata)% figure% plot(imag(IFFTdata)% xlabel(imagIFFTdata) %+%+以下为插入循环前后缀,2倍升采样+data2fir=add_CYC_upsample(IFFTdata,2);% +% +fir低通滤波+guiyi_a=0.0017216 0.010162 0.025512 0.028801 -0.0059219 -0.060115 -0.0496 0.091431 0.29636 0.3956 0.29636 0.091431 -0.0496 -0.060115 -0.0059219

8、0.028801 0.025512 0.010162 0.0017216 ;%抽样截止频率为128kHZ,通带截止频率为20kHZ,阻带截止频率为40kHZ,带内纹波动小于1dB,带外衰减100dBtxFIRdatai=filter(guiyi_a,1,real(data2fir);txFIRdataq=filter(guiyi_a,1,imag(data2fir);% +%+发射机cic滤波+CICidatai=cic_inter(txFIRdatai,20);CICidataq=cic_inter(txFIRdataq,20);%+%+上变频+fwc_up=16; %控制字可以选择DUCd

9、ata=up_convert_ofdm(fwc_up,CICidatai,CICidataq);%+%+高斯白噪声信道+DUCdata,datamax=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_do

10、wn,DUCdata_tmp);%+%+接收机cic滤波+CICddatai=cic_deci(DDCdatai,40,40);CICddataq=cic_deci(DDCdataq,40,40);%+%+fir低通滤波+guiyi_b= 0.019527 -0.03934 0.049055 -0.018102 -0.1003 0.5944 0.5944 -0.1003 -0.018102 0.049055 -0.03934 0.019527;%抽样截止频率为64kHZ,通带截止频率为20kHZ,阻带截止频率为30kHZ,带内纹波动小于1dB,带外衰减60dBrxFIRdatai=filter

11、(guiyi_b,1,CICddatai);rxFIRdataq=filter(guiyi_b,1,CICddataq);%+%+量化+q_rxFIRdatai=sign(rxFIRdatai); q_rxFIRdataq=sign(rxFIRdataq);%+%+定时同步检测+if seq_num2 seq_num-2 fftw=32+dingshi; rxFIRdata_syn=rxFIRdatai(fftw:fftw+255)+j*rxFIRdataq(fftw:fftw+255); FFTdata=fft_my(rxFIRdata_syn); %+%+降PAPR逆矩阵变换+fftdat

12、a_reg=FFTdata(193:256),FFTdata(1:64);dematrix_data=fftdata_reg*pinv(matix_data);%+%+相位补偿+rx_qpsk_din_th=phase_comp(dematrix_data);%+%+QPSK解调部分+% figure% plot(rx_qpsk_din_th,.)% xlabel(星座图)datatemp4=deqpsk(rx_qpsk_din_th);datatemp4=sign(datatemp4);for m=1:192 if datatemp4(m)=-1 datatemp4(m)=1; elseif

13、 datatemp4(m)=1 datatemp4(m)=0; endend%+%+信道解交织+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_SN

14、R+1)=err_int_final/(90*(frame_num-2)disp(-);enddisp(-end-);SNR_System=SNR_Pre:interval_SNR:5;figuresemilogy(SNR_System,err_rate_final,b-*);xlabel(信噪比/dB)ylabel(误码率)axis(-5,5,0,1)grid on%+%*beginning of file*%cnv_encd.m%卷积码编码程序function output=cnv_encd(G,k0,input)% cnv_encd(G,k0,input),k0 是每一时钟周期输入编码器

15、的 bit 数,% G 是决定输入序列的生成矩阵,它有 n0 行 L*k0 列 n0 是输出 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 的整数

16、部%+variables+% G 决定输入序列的生成矩阵% k0 每一时钟周期输入编码器的 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

17、=size(G,1);% 在信息前后加 0,使存贮器归 0,加 0 个数为(L-1)*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*

18、k0,n+L-1);% 得到输出,输出由生成矩阵 G*uu 得到output=reshape(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_temp(1:end);%*end of file*%*beginning of file*%qpsk.m%QPSK调制映射function dout=qpsk(din)%+variables+

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2