当前位置:文档之家› 移动通信系统课设_OFDM系统仿真设计

移动通信系统课设_OFDM系统仿真设计

移动通信系统课程设计报告OFDM系统仿真——目录移动通信系统课程设计报告 (1)(一)题目要求: (2)(二)相关原理: (2)1)OFDM: (2)2)QPSK调制: (3)3)导频与均衡: (3)4)循环前缀: (3)5)分组交织: (4)(三)基本思路: (4)(四)结果: (10)1)软解码与硬解码情况下不同信噪比的误码率: (10)2)不同信噪比下译码相位图: (11)(五)总结体会: (12)(六)分工合作: (13)(七)程序代码: (13)(一)题目要求:1)OFDM128路传输;2)QPSK调制3)AWGN信道4)3径或4径瑞利衰落信道(二)相关原理:1)OFDM:将信道分成若干正交子信道,将高速数据信号转换成并行的低速子数据流,调制到在每个子信道上进行传输。

正交信号可以通过在接收端采用相关技术来分开,这样可以减少子信道之间的相互干扰(ISI) 。

每个子信道上的信号带宽小于信道的相关带宽,因此每个子信道上可以看成平坦性衰落,从而可以消除码间串扰,而且由于每个子信道的带宽仅仅是原信道带宽的一小部分,信道均衡变得相对容易。

2) QPSK 调制:将每两个相连比特组在一起形成双比特码元,它的四种状态用4个不同的相位表示;3) 导频与均衡:在OFDM 信息序列中插入已知的导频序列()x n ,通过信道后将其提取得()y n ,做频域除法得传输函数[][]z =[]Y z H X z ,再通过线性插值后得到每个信道频率响应,均衡滤波传输函数[]1E []z H z =; 4) 循环前缀:循环前缀(Cyclic Prefix, CP)是将OFDM 符号尾部的信号搬移到头部构成的。

用来消去码间干扰,通常取长度g T τ≥(τ为信道冲激响应持续时间)5) 分组交织:为了解决成串的比特差错问题,采用了交织技术:把一条消息中的相 继比特分散开的方法,即一条信息中的相继比特以非相继方式发送,这样即使在传输过程中发生了成串差错,恢复成一条相继比特串的消息时,差错也就变成单个(或者长度很短)的错误比特,这时再用信道纠正随机差错的编码技术(FEC )消除随机差错。

纠错数max b D t =⋅(三) 基本思路:说明:1) 编码:使用216卷积码;相关代码:%卷积编码%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ori_data_t_1=reshape(ori_data_t,num_inf,2*channell); %58*192 ori_data_t_2=zeros(num,2*channell); %128*192 信号产生卷积编码交织(32)QPSK 调制(96路)插入导频信号(32路)OFDM 调制(IFFT )插入循环前缀(1/4长度)并串转换AWGN 信道3径瑞利信道串并转换OFDM 解调(FFT )取导频信道估计与均衡并串转换QPSK 解调解交织卷积译码误码率统计for i = 1:2*channellseq = ori_data_t_1(:,i)';seq_code = encode216(seq)';ori_data_t_2(:,i) = seq_code;endori_data=reshape(ori_data_t_2,1,2*num*channell); %1*24576 编码函数:function code=encode216(m)%输入信息序列%g1=[1,0,0,0,0,0];g2=[1,1,0,0,1,1];trel=poly2trellis(6,[40 63]);%定义网格m1=[m,0,0,0,0,0,0];code=convenc(m1,trel);%卷积码编码2)交织:交织深度为32;相关代码:%编码交织%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ori_data1=reshape(ori_data,deep,(2*num*channell)/deep)'; %768*32 ori_data2=reshape(ori_data1,1,2*num*channell); %1*245763)QPSK调制:转换为96路相位信号(复数);代码:%QPSK调制%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ori_data_0=reshape(ori_data2,2,channell*num); %拆分成两行12288列ori_data_1=bi2de(ori_data_0','left-msb')'; %QPSK的未调制数据12288列M=4的数据de_OFDM_1=modem.pskmod(4); %生成调制器对象,设置qpsk调制QPSK_data=modulate(de_OFDM_1,ori_data_1); %1*12288复数形式%channel_data=reshape(QPSK_data,channell,num); %拆分成128行,每行10个复数 128*10channel_data=reshape(QPSK_data,num,channell); %拆分成128行,每行96个复数 128*964)插入导频:32路已知序列;代码:%插入导频信号%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%pliot_1=2*rand(128,32);pliot_2=2*rand(128,32); %插入的导频信号,实数pliot=pliot_1+pliot_2*1i; %插入的导频信号,复数channel_data_1=zeros(128,128);for i = 0:31channel_data_1(:,4*i+1)=pliot(:,i+1);channel_data_1(:,4*i+2)=channel_data(:,3*i+1);channel_data_1(:,4*i+3)=channel_data(:,3*i+2);channel_data_1(:,4*i+4)=channel_data(:,3*i+3);end5)OFDM调制:使用IFFT;相关代码:%OFDM信号产生%%%%%%%%%%%%%%%%%%%%%%%%%%%%%IFFT_data=zeros(128,128);for i = 1:128IFFT_data(:,i)=ifft(channel_data_1(:,i),128); %128*128if ft数据endr_ifft_data=real(IFFT_data); %实部 128*128i_ifft_data=imag(IFFT_data); %虚部 128*1286)插入循环前缀:这里选取长度为32;相关代码:%加入循环前缀%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%r_data=[r_ifft_data(num-num/4+1:num,:);r_ifft_data]; %保护间隔取传送数据的四分之一i_data=[i_ifft_data(num-num/4+1:num,:);i_ifft_data]; %160*1287)并串转换:转换成1路;代码:%并串转换%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%r_out=reshape(r_data,1,(num+num/4)*channel); %1*1600i_out=reshape(i_data,1,(num+num/4)*channel); %1*1600data=r_out+i_out.*1i;8)AWGN:加入信噪比-10~20dB的噪声;代码:%AWGN信道%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%data_AWGN=awgn(data,SNR,'measured') ;%加入噪声9)串并转换:转换成128路;代码:%串并转换%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%r_rcv_data1=reshape(r_rcv_data,num+num/4,channel);i_rcv_data1=reshape(i_rcv_data,num+num/4,channel);10)OFDM 解调:FFT 快速算法;代码:%OFDM 解调FFT%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%de_OFDM_data=zeros(128,128);for i = 1:128de_OFDM_data(:,i)=fft(rcv_data(:,i),128); %128*128矩阵end11)去导频:取出过信道后导频序列()y n ;12)信道估计:计算收到每一路导频序列的Y[z],已知导频序列的X[]z ,得到信道[][]z =[]Y z H X z ,利用线性插值得到每一路信息序列的[]i z H ;13)均衡:将每一路信号i [][]i X z E z ⋅,1E [][]i i z H z =,得到均衡后的信号频域 Y []i z ',然后得到y '()n ;代码:%信道估计与均衡(新的)depliot=zeros(128,32);for i = 0:31depliot(:,i+1)=de_OFDM_data(:,4*i+1);enddepliot_1=zeros(128,32);depliot_2=zeros(32,128);de_OFDM_0=zeros(128,32);for i = 1:32depliot_1(:,i)=pliot(:,i)./depliot(:,i);% depliot_2(i,:)=reshape(depliot_1(:,i),1,128);% x=1:128;% hx=1:128;% de_OFDM_0(:,i)=interp1(x,depliot_2(i,:),hx,'pchip'); %线性插值endde_OFDM_1=zeros(128,128);for i= 0:30de_OFDM_1(:,4*i+1)=depliot_1(:,i+1);de_OFDM_1(:,4*i+2)=depliot_1(:,i+1)+(depliot_1(:,i+2)-depliot_1(:,i +1))/4;de_OFDM_1(:,4*i+3)=depliot_1(:,i+1)+(depliot_1(:,i+2)-depliot_1(:,i +1))/2;de_OFDM_1(:,4*i+4)=depliot_1(:,i+1)+(depliot_1(:,i+2)-depliot_1(:,i +1))/4*3;endde_OFDM_1(:,125)=depliot_1(:,32);de_OFDM_1(:,126)=depliot_1(:,32);de_OFDM_1(:,127)=depliot_1(:,32);de_OFDM_1(:,128)=depliot_1(:,32);de_OFDM_2=de_OFDM_data.*de_OFDM_1; %还原数据de_OFDM_3=[];for i = 2:4:126de_OFDM_3=[de_OFDM_3,de_OFDM_2(:,i:i+2)]; %提取出128*96数据部分end14)并串转换:变为96路信息序列;代码:%并串转换%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%de_OFDM_data3=reshape(de_OFDM_3,1,channell*num); %128*9615)QPSK解调:还原调制前的数据;代码:%QPSK解调%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%de_OFDM_data3_real=real(de_OFDM_data3);de_OFDM_data3_imag=imag(de_OFDM_data3);de_OFDM_4=zeros(1,2*length(de_OFDM_data3_real));%求方差%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%sigma=sum(abs(real(de_OFDM_data3)-real(QPSK_data))+abs(imag(de_OFD M_data3)-imag(QPSK_data)))/(2*length(de_OFDM_data3_real));fori=1:length(de_OFDM_data3_real)%求判决到各个位置的概率%%%%%%%%%%%%%%%%re_f1=normpdf(de_OFDM_data3_real(i),-1,sigma);re_0=normpdf(de_OFDM_data3_real(i),0,sigma);re_1=normpdf(de_OFDM_data3_real(i),1,sigma);im_f1=normpdf(de_OFDM_data3_imag(i),-1,sigma);im_0=normpdf(de_OFDM_data3_imag(i),0,sigma);im_1=normpdf(de_OFDM_data3_imag(i),1,sigma);de_OFDM_4(2*i-1)=(re_f1+re_0*im_f1/(im_f1+im_1))/(re_f1+re_1+re_0) ;de_OFDM_4(2*i)=(im_f1+im_1)/(im_f1+im_1+im_0);enddata_last_0=de_OFDM_4; %1*2457616)解交织;代码:%解交织%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%data_last_0_0=reshape(data_last_0,(2*num*channell)/deep,deep)';data_last_0_1=reshape(data_last_0_0,1,2*num*channell);17)卷积译码:分别使用维特比译码,软解码,硬解码方法,得到译码结果;代码:%卷积码译码%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%data_last_1=reshape(data_last_0_1,num,channell*2); %128*256 data_last_2=zeros(num_inf,channell*2); %58*256for k = 1:2*channellseq0 = data_last_1(:,k)';seq0=1-2.*seq0;seq0_code = decode216(seq0,1)';data_last_2(:,k) = seq0_code;enddata_last = reshape(data_last_2,1,2*num_inf*channell); %1*14848 译码函数:function decode=decode216(m,k)%m为码字序列,硬判决译码输入k为1,软判决译码输入k为0trel=poly2trellis(6,[40 63]);%定义网格tblen=35;%回朔长度,为约束长度的5倍if(k==1)%硬判决译码hcode=m<0;decode1=vitdec(hcode,trel,tblen,'term','hard');else%软判决量化译码(3比特量化)[index,hcode]=quantiz(m,[-0.75,-0.5,-0.25,0,0.25,0.5,0.75],[7,6,5,4,3,2,1,0]);decode1=vitdec(hcode,trel,tblen,'term','soft',3);enddecode=decode1(1:length(decode1)-6);18)误码率统计;代码:%误码率统计%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%error_num=sum(abs(data_last-ori_data_t));bit_error_rate(1,((SNR-SNR_min)/2+1))= error_num/N; %误码率snr(1,((SNR-SNR_min)/2+1))=SNR;endstem(snr,-10*log10(bit_error_rate),'-*','LineStyle','none');xlabel('SNR');ylabel('BER');title('Performance of OFDM under the channel AWGN')(四) 结果:1) 软解码与硬解码情况下不同信噪比的误码率:681012141618SNR(dB)B E R (d B )Performance of OFDM under the channel AWGN由上图可以看出,信号误码性能随着信噪比增加而增加,当信噪比达到10dB的时候误码率已经低于0.01,信噪比达到16dB时误码率已经达到-5量级,再之后出现相关波动;另外,由于此次用于测试的数据只有24576个,所以误码率更高的时候误码率已经变为0。

相关主题