版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上OFDM调制及解调系统的设计一、基本原理概述OFDM背景介绍随着无线通信的迅速发展,以OFDM为代表的多载波调制技术凭借其强大的抗多径衰落能力和较高的频谱利用率,被认为是最有前途的4G方案之一。OFDM通信技术是多载波传输技术的典型代表。多载波传输把数据流分解为若干个独立的子载波比特流,每个子数据流将具有低得多的比特速率,用这样低比特速率形成的低速率多状态符号去调制相应的子载波,就构成了多个低速率符号并行发送的传输系统。OFDM系统的基本原理 OFDM是一种多载波调制技术,其原理是用N个子载波把整个信道分割成N个子信道,即将频率上等间隔的N个子载波信号调制并相加后同时
2、发送,实现N个子信道并行传输信息。这样每个符号的频谱只占用信道带宽的1/N,且使各子载波在OFDM符号周期内保持频谱的正交性。 图1-1是在一个OFDM符号内包含4个子载波的实例。其中,所有的子载波都具有相同的幅值和相位,但在实际应用中,根据数据符号的调制方式,每个子载波都有相同的幅值和相位是不可能的。从图1-1可以看出,每个子载波在一个OFDM符号周期内都包含整数倍个周期,而且各个相邻的子载波之间相差1个周期。这一特性可以用来解释子载波之间的正交性,即 图1-1OFDM符号内包括4个子载波的情况 这种正交性还可以从频域的角度来解释,图1-2给出了相互覆盖的各个子信道内经过矩形波成形得到的符号
3、sinc函数频谱。每个子载波频率最大值处,所以其他子信道的频谱值恰好为零。因为在对OFDM符号进行解调过程中,需要计算这些点上所对应的每个子载波频率的最大值,所以可以从多个相互重叠的子信道符号中提取每一个子信道符号,而不会受到其他子信道的干扰。从图1-2中可以看出OFDM符号频谱实际上可以满足奈奎斯特准则,即多个子信道频谱之间不存在相互干扰。因此这种子信道频谱出现最大值而其他子信道频谱为零的特点可以避免载波间干扰(ICI)的出现。图1-2OFDM系统中子信道符号的频谱 在发送端,设串行的码元周期为ts,速率为rs=1ts。经过串/并变换后N个串行码元被转换为长度为Ts=Nts、速率为Rs=1T
4、s=1Nts=rsN的并行码。N个码元分别调制N个子载波: (n=0,1,2,N-1) fn=f0+nf 式中:f为子载波的间隔,设计为 它是OFDM系统的重要设计参数之一。当f0>>1/Ts时,各子载波是两两正交的,即 1,n=m0, nm输入的串行比特以L比特为一帧,每帧分为N组,每组比特数可以不同,第i组有qi个比特,即 第i组比特对应第i子信道的Mi=2qi个信号点。这些复数信号点对应这些子信道的信息符号,用dn(n=0,1,2,N-1)表示。利用IDFT可以完成dn的OFDM基带调制,因为式(4-147)的复包络可以表示为 则OFDM信号就为若对A(t)以1ts速率抽样,
5、由式(4-147)得到: 可见,所得到的A(m)是dn的IDFT,或者说直接对dn求离散傅氏反变换就得到A(t)的抽样A(m)。而A(m)经过低通滤波(D/A变换)后所得到的模拟信号对载波进行调制便得到所需的OFDM信号。在接收端则进行相反的过程,把解调得到的基带信号经过A/D变换后得到dn,在经过并串变换输出。当N比较大时可以采用高的效率IFFT(FFT)算法,现在已有专用的IC可用,利用它可以取代大量的调制解调器,使结构变得简单。 OFDM系统实现框图如下。其中,上部分对应于发射机链路,下半部分对应于接收机链路,整个系统包含信道编/解码、数字调制/解调、IFFT/FFT、加/去保护间隔。二
6、、系统仿真设计方案 拟用MATLAB进行仿真。采用自上而下的策略。首先根据系统原理框图编写,然后再实现子程序模块,然后整合汇总成main_OFDM.m主函数。根据OFDM系统原理,在此环境下仿真系统的构建可分为以下8部分:信源、编码交织和解码去交织、调制映射和解调逆映射、OFDM发送和接收、并串和串并变换模块、信道、信道估计和信道补偿、误码率计算模块。 仿真模型是建立在基带传输的基础上的,这是因为载波系统可以进行低通等效。下图为基带系统框图。 OFDM发送和接受框图模型为:具体包括了发送端的串并转换、训练序列的插入、过采样的IFFT变换及加入循环前缀和接收端的循环前缀的去除、FFT变换、去除虚
7、子载波、训练序列的接收以及并串转换。继续将系统框图细化:信道估计仿真模型:为了研究信道和噪声对OFDM传输系统的影响,采用加性高斯白噪声信道(AWGN)和多径瑞利衰落信道(MuhipathReyleighFading)模块进行仿真。具体实现如下:1 信道编码信道编码采用卷积码和交织编码进行信道级联编码。卷积码码率为1/2,仿真时设置k=1,G=1 0 1 1 0 1 1;1 1 1 1 0 0 1,将输入的90个0、1二进制数经过卷积编码后可得到192个0、1二进制数。交织编码采用24行8列的矩阵,按行写入,按列读出,交织编码可以有效的抗突发干扰。卷积实现如下:%*beginning of f
8、ile*%cnv_encd.m%卷积码编码程序function output=cnv_encd(G,k0,input)% cnv_encd(G,k0,input),k0 是每一时钟周期输入编码器的 bit 数,% G 是决定输入序列的生成矩阵,它有 n0 行 L*k0 列 n0 是输出 bit 数,% 参数 n0 和 L 由生成矩阵 G 导出,L 是约束长度。L 之所以叫约束长度% 是因为编码器在每一时刻里输出序列不但与当前输入序列有关,% 而且还与编码器的状态有关,这个状态是由编码器的前(L-1)k0。% 个输入决定的,通常卷积码表示为(n0,k0,m),m=(L-1)*k0 是编码% 器中
9、的编码存贮个数,也就是分为 L-1 段,每段 k0 个% 有些人将 m=L*k0 定义为约束长度,有的人定义为 m=(L-1)*k0% 查看是否需要补 0,输入 input 必须是 k0 的整数部%+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 一致
10、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)*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 比特
11、增加%从 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=reshape(rem(G*uu,2),1,n0*(L+n-1);% *end of file*交织实现如下:%*beginning of file*%interlacecode.mfunction dout=interlacecode(din,m,n)%实现信道的交织编码%din为输入交织
12、编码器的数据,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+% din 输入数据% dout 输出数据%+ din2=1-2*din;d
13、in_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*2 QPSK调制 在数字信号的调制方式中,使用了QPSK,这种调制方法具有较高的频谱利用率以及抗干扰性。实现代码见附件。3 插导频、矩阵变换 导频数据是在进行矩阵变换之前插入有效数据的,在系统设计中我们每8个有效数据插入一个导频,但是数据中间位置不插入导频。96个复数据插入10个导频后,一帧数据长度为106。 矩阵变换是为了降低系统的PAPR,采用方法的是改进Ny
14、quist脉冲调整法(PS)。这里矩阵大小为106*128,滚将系数a=0.22。具体实现如下:%*beginning of file*%seq_train.m%生成用于同步的训练符号function dout=seq_train()%第一帧产生短训练序列,第二帧产生长训练序列%每个短训练符号由16个子载波组成,短训练序列%是由伪随机序列经过数字调制后插0后,再经过%IFFT之后得到的。具体过程如下:首先采用抽头%系数为1 0 0 1 的4级移位寄存器产生长度为%15的伪随机序列之后末尾补0,经过QPSK调制之%后的伪随机序列只在16的整数倍位置上出现,其%余的位置补0,产生长度为128的序列
15、,此序列再%补128个0经过数据搬移后做256点的IFFT变换就%得到16个以16为循环的训练序列,经过加循环前%后缀就会产生20个相同的短训练序列。长训练序%列的产生同短训练序列。global 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; QPSK
16、data_pn=qpsk(QPSKdata_pn);endcountmod=0;for k=1:128 if seq_num=1 if mod(k-1,16)=0 %生成16位循环的短训练符号 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
17、; end endenddout=trainsp_temp;% *end of file*4 IFFT变换经过矩阵乘模块后,一帧数据长度为128,由于子载波个数为256,所以需要在数据后面补128个零。具体实现如下:%*beginning of file*%fft_my.m%实现N点FFT运算function dout=fft_my(din)%本程序对输入序列din实现DITFFT基2算法,点数取大于等于din长度的2的幂次%+variables+% din 输入数据% dout 输出数据%+ m=nextpow2(din) ;N=2m ;if length(din)<N din=din
18、,zeros(1,N-length(din);endnxd=bin2dec(fliplr(dec2bin(1:N-1,m)+1;y=din(nxd);for mm=1:mNmr=2mm;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; endenddout=y;% *end of file*5 加循环前后缀与升采样用IFFT输出数据的钱32点作为循环后缀,后32点作为循环前缀。假定射频的采样时钟为2.56MHz,所以
19、需要数据速率匹配,对基带进行升采样。采样过程由两部分组成。第一部分对加了循环前后缀之后的数据进行2倍升采样,所采取的方式是在每个数据中间插入1个0;第二部分用上变频模块CIC内插滤波器对信号进行20倍升采样。 具体实现:%add_GI_upsample.m%加循环前后缀和升采样程序function dout=add_CYC_upsample(din,upsample)%插入循环前后缀是将每个OFDM符号的前32个数据放%到符号尾部,将每个OFDM符号的后32个数据放到符号头部,%升采样是通过中间插零的方式实现%+variables+% din 输入数据% upsample 升采样倍数 % do
20、ut 输出数据%+ 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 系统的同步将基带信号送到帧检测模块,目的是系统需要知道是否有信号到达和信号来到后粗定时的位置,当检测到信号来到后同时启动粗定时模块、频偏捕获模块。符号粗定时与粗频偏捕获利用的是前导序
21、列中的短序列来实现的,二细频偏估计采用的是前导序列中的长训练序列实现的。然后,利用前导序列中的Tm1和Tm2进行本地互相关,得到相关峰值,通过峰值所确定的位置确定精确的FFT开窗位置,并通过OFDM数据帧中的循环前后缀的循环特性进行频率跟踪,在频域中,再利用解调出的导频信息进行相位补偿。实现框图:(具体实现见附件)7 主函数模块%main_OFDM.m%这是一个相对完整的OFDM通信系统的仿真设计,包括编码,调制,IFFT,%上下变频,高斯信道建模,FFT,PAPR抑制,各种同步,解调和解码等模%块,并统括系统性能的仿真验证了系统设计的可靠性。clear allclose allclc%+全局
22、变量+% seq_num 表示当前帧是第几帧% count_dds_up 上变频处的控制字的累加% count_dds_down 下变频处的控制字的累加(整整)% count_dds_down_tmp 下变频处的控制字的累加(小数)% dingshi 定时同步的定位% m_syn 记录定时同步中的自相关平台global seq_numglobal count_dds_upglobal count_dds_downglobal count_dds_down_tmpglobal dingshi global m_syn%+% SNR_Pre 设定用于仿真的信噪比的初值% interval_SNR
23、设定用于仿真的信噪比间隔% 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=
24、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_nu
25、m<3trainsp_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_Q
26、PSKdata(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矩阵变换+matix_data=nyquistimp_PS();matrix_mult=data2fft_temp*matix_data;%+data2fft2=matrix_mult(65:128),zeros(1,128),matrix_mult(1:64);%+iff
27、t运算+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(IFFTdata)% xlabel('realIFFTdata')% figure% plot(imag(IFFTdata)% xlabel('imagIFFTdata') %+%+以下为插入循环前后缀,2倍升采样+data2fir=
28、add_CYC_upsample(IFFTdata,2);% +% +fir低通滤波+guiyi_a=0.0.0.0.-0.-0.-0.04960.0.296360.39560.296360.-0.0496-0.-0.0.0.0.0. ;%抽样截止频率为128kHZ,通带截止频率为20kHZ,阻带截止频率为40kHZ,带内纹波动小于1dB,带外衰减100dBtxFIRdatai=filter(guiyi_a,1,real(data2fir);txFIRdataq=filter(guiyi_a,1,imag(data2fir);% +%+发射机cic滤波+CICidatai=cic_inter(
29、txFIRdatai,20);CICidataq=cic_inter(txFIRdataq,20);%+%+上变频+fwc_up=16; %控制字可以选择DUCdata=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/);r_fre_offset
30、=*(fwc_down-fwc_up)/128);DDCdatai,DDCdataq=down_convert_ofdm(fwc_down,DUCdata_tmp);%+%+接收机cic滤波+CICddatai=cic_deci(DDCdatai,40,40);CICddataq=cic_deci(DDCdataq,40,40);%+%+fir低通滤波+guiyi_b= 0.-0.039340.-0.-0.10030.59440.5944-0.1003-0.0.-0.039340.;%抽样截止频率为64kHZ,通带截止频率为20kHZ,阻带截止频率为30kHZ,带内纹波动小于1dB,带外衰减6
31、0dBrxFIRdatai=filter(guiyi_b,1,CICddatai);rxFIRdataq=filter(guiyi_b,1,CICddataq);%+%+量化+q_rxFIRdatai=sign(rxFIRdatai); q_rxFIRdataq=sign(rxFIRdataq);%+%+定时同步检测+if seq_num<3time_syn(q_rxFIRdatai,q_rxFIRdataq);end%+%+频率同步+fre_offset=fre_syn(rxFIRdatai,rxFIRdataq);%+ %+fft运算+if seq_num>2 seq_num-
32、2 fftw=32+dingshi; rxFIRdata_syn=rxFIRdatai(fftw:fftw+255)+j*rxFIRdataq(fftw:fftw+255); FFTdata=fft_my(rxFIRdata_syn); %+%+降PAPR逆矩阵变换+fftdata_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
33、_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 datatemp4(m)=1 datatemp4(m)=0; endend%+%+信道解交织+interdout=interlacedecode(datatemp4,8,24);%+%+以下为viterbi译码部分+decodeDATA=viterbi(G,k0,interdo
34、ut);%+%+误比特统计+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)disp('-');enddisp('-end-');SNR_System=SNR_Pre:interval_SNR:5;figuresemilogy(SN
35、R_System,err_rate_final,'b-*');xlabel('信噪比/dB')ylabel('误码率')axis(-5,5,0,1)grid on%+三、OFDM系统仿真设计结果仿真结果1 经OFDM调制后时域信号波形与经过瑞利衰落信道的时域信号波形对比:未经瑞利衰落信道前:经瑞利衰落及加性高斯白噪声信道后:后者较于前者,波形更凌乱,由此可看出多径衰落信道和高斯白噪声对传输信号的干扰。1、 未经瑞利衰落信道信号频谱与经瑞利衰落信道信号频谱对比为经信道的信号频谱:经过信道传输后的信号频谱:在仿真过程中,经信道传输后的信号功率频谱图的上 升沿和下降沿一起上下起浮,不是很稳定。这是由于多径瑞利衰落信道中延迟和增益参数设置问题所导致,也验证了此仿真系统是在窄带信道下进行的仿真。当对二参数设置都为零的条件下,窄带行为更为明显;当对二参数取值增大,则接收信号功率频谱图上升沿和下降沿不在一起上下起浮,从而显示出宽带行为特征。这是信道特性对OFDM系统特性显著影响的表现。2、 对信号没有进行信道估计和进行信道估计后的星座
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 智能物流系统开发协议
- 优惠合同协议样本
- 铜绞线采购协议
- 51透镜初中物理人教版(2024)八年级上册
- 《蓖麻油环糊精包合物和Pickering乳的研究》
- 尿管护理及拔管程序
- 《贾国平室内乐作品《流韵》的音响情境及创作技法研究》
- 《江苏制造业增加值率与全要素生产率之间的关系研究》
- 《体适能练习对学龄前5~6岁儿童运动能力发展的影响研究》
- 小儿肾病综合征的护理
- 电大财务大数据分析编程作业2
- 叉车工安全技术交底书
- 市场营销职业规划生涯发展报告
- translated-(2024.V1)NCCN临床实践指南:心理痛苦的处理(中文版)
- 外国新闻传播史 课件 第十章 俄罗斯地区的新闻传播事业
- 《民用建筑项目节能评估技术导则》
- (2024年)《口腔医学美学》课件
- 七年级英语下册读写综合专项训练
- 门诊护患沟通技巧(简)
- 放射性物质的标志与标识
- 2024年传染病培训课件
评论
0/150
提交评论