您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于MATLAB的OFDM的仿真
0一、实习目的1、熟悉通信相关方面的知识、学习并掌握OFDM技术的原理2、熟悉MATLAB语言3、设计并实现OFDM通信系统的建模与仿真二、实习要求仿真实现OFDM调制解调,在发射端,经串/并变换和IFFT变换,加上保护间隔(又称“循环前缀”),形成数字信号,通过信道到达接收端,结束端实现反变换,进行误码分析三、实习内容1.实习题目《正交频分复用OFDM系统建模与仿真》2.原理介绍OFDM的基本原理就是把高速的数据流通过串并变换,分配到传输速率相对较低的若干个子信道中进行传输。由于每个子信道中的符号周期会相对增加,因此可以减轻由无线信道的多径时延扩展所产生的时间弥散性对系统造成的影响。并且还可以在OFDM符号之间插入保护间隔,令保护间隔大于无线信道的最大时延扩展,这样就可以最大限度地消除由于多径而带来的符号间干扰(ISI)。而且,一般都采用循环前缀作为保护间隔,从而可以避免由多径带来的子载波间干扰((ICI)。3.原理框图4.功能说明4.1确定参数需要确定的参数为:子信道,子载波数,FFT长度,每次使用的OFDM符号数,调制度水平,符号速率,比特率,保护间隔长度,信噪比,插入导频数,基本的仿真可以不插入导频,可以为0。4.2产生数据使用个随机数产生器产生二进制数据,每次产生的数据个数为carrier_count*symbols_per_carrier*bits_per_symbol。4.3编码交织交织编码可以有效地抗突发干扰。4.4子载波调制OFDM采用BPSK、QPSK、16QAM、64QAM4种调制方式。按照星座图,将每个子信道上的数据,映射到星座图点的复数表示,转换为同相Ich和正交分量Qch。其实这是一种查表的方法,以16QAM星座为例,bits_per_symbol=4,则每个OFDM符号的每个子信道上有4个二进制数{d1,d2,d3,d4},共有16种取值,对应星座图上16个点,每个点的实部记为Qch。为了所有的映射点有相同高的平均功率,输出要进行归一化,所以对应BPSK,PQSK,16QAM,64QAM,分别乘以归一化系数系数1,21,101,421.输出的复数序列即为映射后的调制结果。图1-1OFDM原理框图高速数据14.5串并转换。将一路高速数据转换成多路低速数据4.6IFFT。对上一步得到的相同分量和正交分量按照(Ich+Qch*i)进行IFFT运算。并将得到的复数的实部作为新的Ich,虚部作为新的Qch。在实际运用中,信号的产生和解调都是采用数字信号处理的方法来实现的,此时要对信号进行抽样,形成离散时间信号。由于OFDM信号的带宽为B=N·Δf,信号必须以Δt=1/B=1/(N·Δf)的时间间隔进行采样。采样后的信号用sn,i表示,i=0,1,…,N-1,则有从该式可以看出,它是一个严格的离散反傅立叶变换(IDFT)的表达式。IDFT可以采用快速反傅立叶变换(IFFT)来实现4.7加入保护间隔。由IFFT运算后的每个符号的同相分量和正交分量分别转换为串行数据,并将符号尾部G长度的数据加到头部,构成循环前缀。如果加入空的间隔,在多径传播的影响下,会造成载波间干扰ICI。保护见个的长度G应该大于多径时的扩张的最大值。图1-2多径情况下,空闲保护间隔在子载波间造成的干扰4.8加窗加窗是为了降低系统的PAPR,滚降系数为1/32。通过这种方法,可以显著地改善OFDM通信系统高的PAPR分布,大大降低了峰值信号出现的概率以及对功率放大器的要求,节约成本。经常被采用的窗函数是升余弦窗sssTTtTttwcos5.05.00.1cos5.05.0sssssTtTTtTTt10(1-2)图1-9经过加窗处理后的OFDM符号示意图4.9通过信道。信道分为多径实验信道和高斯白噪声信道。多径时延信道直射波河延迟波对于标准时间按照固定比率递减,因此多径时延信道参数为比率和对大延迟时间。4.10同步。同步是决定OFDM系统高性能十分重要的方面,实际OFDM系统都有同步过称。主要同步方法有使用导频,循环前缀,忙算法三种。研究目的为同步的可以详细实现本步,基本的方针可以略过此步,假设接收端已经于发射端同步。4.11去掉保护间隔。根据同步得到的数据,分别见给每个符号的同相分量和正交分量开头的保护间隔去掉。4.12并串转换。将每个符号分布在子信道上的数据,还原为一路串行数据。4.13FFT。对每个符号的同相分量和正交分量按照(Ich+Qch*i)进行FFT运算。并将得到的实部作为新的Ich,虚部作为新的Qch。与发端相类似,上述相关运算可以通过离散傅立叶变换(DFT)或快速傅立叶变换(FFT)来实现,即:4.14子载波解调FFT后的同相粉脸感和正交分量两组数据在星座图上对饮高的点,由于噪声和信道的影响,不再是严格的发送端的星座图。将得到的星座图上的点按照最近原则判决为原星座图上的点,并按映射规则还原为一组数据。4.15解码解交织。按照编码交织对应解码,解交织的方法,还原为原始数据,并进行纠错处理。4.16计算误码率。比较第2步产生的数据和接收到的数据,计算误码率BER图1-3保护间隔的插入过程25.实现步骤5.116QAM的调制函数function[complex_qam_data]=qam16(bitdata)%modulationof16QAM,modulatebitdatato16QAMcomplexsignalX1=reshape(bitdata,4,length(bitdata)/4)';d=1;%mindistanceofsymblefori=1:length(bitdata)/4;forj=1:4X1(i,j)=X1(i,j)*(2^(4-j));endsource(i,1)=1+sum(X1(i,:));%converttothenumber1to16endmapping=[-3*d3*d;-d3*d;d3*d;3*d3*d;-3*dd;-dd;dd;3*dd;-3*d-d;-d-d;d-d;3*d-d;-3*d-3*d;-d-3*d;d-3*d;3*d-3*d];fori=1:length(bitdata)/4qam_data(i,:)=mapping(source(i),:);%datamappingendcomplex_qam_data=complex(qam_data(:,1),qam_data(:,2));5.216QAM的解调函数。function[demodu_bit_symble]=demoduqam16(Rx_serial_complex_symbols)%将得到的串行16QAM数据解调成二进制比特流complex_symbols=reshape(Rx_serial_complex_symbols,length(Rx_serial_complex_symbols),1);d=1;mapping=[-3*d3*d;-d3*d;d3*d;3*d3*d;-3*dd;-dd;dd;3*dd;-3*d-d;3-d-d;d-d;3*d-d;-3*d-3*d;-d-3*d;d-3*d;3*d-3*d];complex_mapping=complex(mapping(:,1),mapping(:,2));fori=1:length(Rx_serial_complex_symbols);forj=1:16;metrics(j)=abs(complex_symbols(i,1)-complex_mapping(j,1));end[min_metricdecode_symble(i)]=min(metrics);%将离某星座点最近的值赋给decode_symble(i)enddecode_bit_symble=de2bi((decode_symble-1)','left-msb');demodu_bit_symble=reshape(decode_bit_symble',1,length(Rx_serial_complex_symbols)*4);5.3加窗函数function[rcosw]=rcoswindow(beta,Ts)%定义升余弦窗,其中beta为滚降系数,Ts为包含循环前缀的OFDM符号的长度,Ts为正偶数t=0:(1+beta)*Ts;rcosw=zeros(1,(1+beta)*Ts);fori=1:beta*Ts;rcosw(i)=0.5+0.5*cos(pi+t(i)*pi/(beta*Ts));endrcosw(beta*Ts+1:Ts)=1;forj=Ts+1:(1+beta)*Ts+1;rcosw(j-1)=0.5+0.5*cos((t(j)-Ts)*pi/(beta*Ts));endrcosw=rcosw';%变换为列向量5.4OFDM主程序clearall;closeall;carrier_count=200;%子载波数symbols_per_carrier=12;%每子载波含符号数bits_per_symbol=4;%每符号含比特数,16QAM调制IFFT_bin_length=512;%FFT点数PrefixRatio=1/4;%保护间隔与OFDM数据的比例1/6~1/4GI=PrefixRatio*IFFT_bin_length;%每一个OFDM符号添加的循环前缀长度为1/4*IFFT_bin_length即保护间隔长度为128beta=1/32;%窗函数滚降系数GIP=beta*(IFFT_bin_length+GI);%循环后缀的长度20SNR=15;%信噪比dB%==================================================%================信号产生===================================baseband_out_length=carrier_count*symbols_per_carrier*bits_per_symbol;%所输入的比特数目carriers=(1:carrier_count)+(floor(IFFT_bin_length/4)-floor(carrier_count/2));%共轭对称子载波映射复数数据对应的IFFT点坐标conjugate_carriers=IFFT_bin_length-carriers+2;%共轭对称子载波映射共轭复数对应的IFFT点坐标4baseband_out=round(rand(1,baseband_out_length));%输出待调制的二进制比特流%==============16QAM调制====================================complex_carrier_matrix=qam16(baseband_out);%列向量complex_carrier_matrix=reshape(complex_carrier_matrix',carrier_count,symbols_per_carrier)';%symbols_per_carrier*carrier_count矩阵figure(1);plot(complex_carrier_matrix,'*r');%16QAM调制后星座图title('16QAM调制后星座图')axis([-4,4,-4,4]);gridon%=================IFFT===========================IFFT_modulation=zeros(symbols_per_carrier,IFFT_bin_length);%添0组成IFFT_bin_lengthIFFT运算IFFT_modulation(:,carriers)=complex_carrier_matrix;%未添加导频信号,子载波映射在此处IFFT_modulation(:,conjugate_ca
本文标题:基于MATLAB的OFDM的仿真
链接地址:https://www.777doc.com/doc-5652945 .html