N=2^m ;
if length(din) din=[din,zeros(1,N-length(din))]; end nxd=bin2dec(fliplr(dec2bin([1:N]-1,m)))+1; y=din(nxd); for mm=1:m Nmr=2^mm; u=1; WN=exp(-i*2*pi/Nmr); for j=1:Nmr/2 for k=j:Nmr:N kp=k+Nmr/2; t=y(kp)*u; y(kp)=y(k)-t; y(k)=y(k)+t; end u=u*WN; end end dout=y; % ************************end of file********************************** 5. 加循环前后缀与升采样 用IFFT输出数据的钱32点作为循环后缀,后32点作为循环前缀。假定射频的采样时钟为2.56MHz,所以需要数据速率匹配,对基带进行升采样。采样过程由两部分组成。第一部分对加了循环前后缀之后的数据进行2倍升采样,所采取的方式是在每个数据中间插入1个0;第二部分用上变频模块CIC内插滤波器对信号进行20倍升采样。 具体实现: -d_GI_upsample.m %加循环前后缀和升采样程序 function dout=add_CYC_upsample(din,upsample) %插入循环前后缀是将每个OFDM符号的前32个数据放 %到符号尾部,将每个OFDM符号的后32个数据放到符号头部, %升采样是通过中间插零的方式实现 %+++++++++++++++++++++++variables++++++++++++++++++++++++++++ % din 输入数据 % upsample 升采样倍数 % dout 输出数据 %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ data_buf=[din(225:256),din,din(1:32)]; temp(1,:)=data_buf; temp(2:upsample,:)=zeros(upsample-1,length(data_buf)); dout_temp=reshape(temp,1,length(data_buf)*upsample); dout=dout_temp(1:end); % ************************end of file********************************* 6. 系统的同步 将基带信号送到帧检测模块,目的是系统需要知道是否有信号到达和信号来到后粗定时的位置,当检测到信号来到后同时启动粗定时模块、频偏捕获模块。符号粗定时与粗频偏捕获利用的是前导序列中的短序列来实现的,二细频偏估计采用的是前导序列中的长训练序列实现的。然后,利用前导序列中的Tm1和Tm2进行本地互相关,得到相关峰值,通过峰值所确定的位置确定精确的FFT开窗位置,并通过OFDM数据帧中的循环前后缀的循环特性进行频率跟踪,在频域中,再利用解调出的导频信息进行相位补偿。 实现框图:(具体实现见附件) 7. 主函数模块 %main_OFDM.m %这是一个相对完整的OFDM通信系统的仿真设计,包括编码,调制,IFFT, %上下变频,高斯信道建模,FFT,PAPR抑制,各种同步,解调和解码等模 %块,并统括系统性能的仿真验证了系统设计的可靠性。 clear all close all clc %++++++++++++++++++++++++++全局变量++++++++++++++++++++++++++++++ % seq_num 表示当前帧是第几帧 % count_dds_up 上变频处的控制字的累加 % count_dds_down 下变频处的控制字的累加(整整) % count_dds_down_tmp 下变频处的控制字的累加(小数) % dingshi 定时同步的定位 % m_syn 记录定时同步中的自相关平台 global seq_num global count_dds_up global count_dds_down global count_dds_down_tmp global dingshi global m_syn %+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ % SNR_Pre 设定用于仿真的信噪比的初值 % interval_SNR 设定用于仿真的信噪比间隔 % frame_num 每一个信噪比下仿真的数据帧数 % err_int_final 用于计算每帧出现的误比特数 % fwc_down 设定的接收机初始载波频率控制字 % fre_offset 设定接收机初始载波频率偏移调整量(单位为Hz) % k0 每次进入卷积编码器的信息比特数 % G 卷积编码的生成矩阵 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_encd(G,k0,datain); %+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %+++++++++++++++++++++++++++信道交织编码+++++++++++++++++++++++++ interlacedata=interlacecode(encodeDATA,8,24); %+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %+++++++++++++++++++++++++以下为QPSK调制部分+++++++++++++++++++++ QPSKdata=qpsk(interlacedata); %+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %+++++++++++++++++++++++++++生成训练序列+++++++++++++++++++++++++ if seq_num<3 trainsp_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(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),PIL OT,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矩阵变换++++++++++++++++++++++++ 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; end IFFTdata=fft_my(conj(ifftin)/256); IFFTdata=conj(IFFTdata); % figure % plot(real(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 0.028801 0.025512 0.010162 0.0017216 ]; %抽样截止频率为128kHZ,通带截止频率为20kHZ,阻带截止频率为40kHZ,带内纹波动小于1dB,带外衰减100dB txFIRdatai=filter(guiyi_a,1,real(data2fir)); txFIRdataq=filter(guiyi_a,1,imag(data2fir)); % ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库OFDM调制及解调系统的设计 - 图文(3)在线全文阅读。
相关推荐: