OFDM的系统仿真与实现_第1页
OFDM的系统仿真与实现_第2页
OFDM的系统仿真与实现_第3页
OFDM的系统仿真与实现_第4页
OFDM的系统仿真与实现_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 ofdm的系统仿真与实现一、 实验器件matlab编程软件、pc机二、 实验目的1、通过实验过程熟悉ofdm的系统运行过程.2、进一步练习通过matlab解决通信系统的仿真问题.3、掌握导频插入、训练序列等原理与实际运用.4、掌握通过实际仿真与理论分析的结合的方法.三、ofdm的基本原理ofdm(orthogonal frequency division multiplexing)即正交频分复用技术,实际上ofdm是多载波调制的一种。其主要思想是:将信道分成若干正交子信道,将高速数据信号转换成并行的低速子数据流,调制到在每个子信道上进行传输。正交信号可以通过在接收端采用相关技术来分开,这样可

2、以减少子信道之间的相互干扰 ici 。每个子信道上的信号带宽小于信道的相关带宽,因此每个子信道上的可以看成平坦性衰落,从而可以消除符号间干扰。而且由于每个子信道的带宽仅仅是原信道带宽的一小部分,信道均衡变得相对容易。在向b3g/4g演进的过程中,ofdm是关键的技术之一,可以结合分集,时空编码,干扰和信道间干扰抑制以及智能天线技术,最大限度的提高了系统性能。包括以下类型:v-ofdm,w-ofdm,f-ofdm,mimo-ofdm,多带-ofdm。ofdm是一种无线环境下的高速传输技术。无线信道的频率响应曲线大多是非平坦的,而ofdm技术的主要思想就是在频域内将给定信道分成许多正交子信道,在每

3、个子信道上使用一个子载波进行调制,并且各子载波并行传输。这样,尽管总的信道是非平坦的,具有频率选择性,但是每个子信道是相对平坦的,在每个子信道上进行的是窄带传输,信号带宽小于信道的相应带宽,因此就可以大大消除信号波形间的干扰。由于在ofdm系统中各个子信道的载波相互正交,它们的频谱是相互重叠的,这样不但减小了子载波间的相互干扰,同时又提高了频谱利用率。ofdm技术属于多载波调制(multicarriermodulation,mcm)技术。有些文献上将ofdm和mcm混用,实际上不够严密。mcm与ofdm常用于无线信道,它们的区别在于:ofdm技术特指将信道划分成正交的子信道,频道利用率高;而m

4、cm,可以是更多种信道划分方法。 ofdm技术的推出其实是为了提高载波的频谱利用率,或者是为了改进对多载波的调制,它的特点是各子载波相互正交,使扩频调制后的频谱可以相互重叠,从而减小了子载波间的相互干扰。在对每个载波完成调制以后,为了增加数据的吞吐量、提高数据传输的速度,它又采用了一种叫作homeplug的处理技术,来对所有将要被发送数据信号位的载波进行合并处理,把众多的单个信号合并成一个独立的传输信号进行发送。另外ofdm之所以备受关注,其中一条重要的原因是它可以利用离散傅立叶反变换/离散傅立叶变换(idft/dft)代替多载波调制和解调。ofdm增强了抗频率选择性衰落和抗窄带干扰的能力。在

5、单载波系统中,单个衰落或者干扰可能导致整个链路不可用,但在多载波的ofdm系统中,只会有一小部分载波受影响。此外,纠错码的使用还可以帮助其恢复一些载波上的信息。通过合理地挑选子载波位置,可以使ofdm的频谱波形保持平坦,同时保证了各载波之间的正交。ofdm尽管还是一种频分复用(fdm),但已完全不同于过去的fdm。ofdm的接收机实际上是通过fft实现的一组解调器。它将不同载波搬移至零频,然后在一个码元周期内积分,其他载波信号由于与所积分的信号正交,因此不会对信息的提取产生影响。ofdm的数据传输速率也与子载波的数量有关。ofdm每个载波所使用的调制方法可以不同。各个载波能够根据信道状况的不同

6、选择不同的调制方式,比如bpsk、qpsk、8psk、16qam、64qam等等,以频谱利用率和误码率之间的最佳平衡为原则。我们通过选择满足一定误码率的最佳调制方式就可以获得最大频谱效率。无线多径信道的频率选择性衰落会使接收信号功率大幅下降,经常会达到30db之多,信噪比也随之大幅下降。为了提高频谱利用率,应该使用与信噪比相匹配的调制方式。可靠性是通信系统正常运行的基本考核指标,所以很多通信系统都倾向于选择bpsk或qpsk调制,以确保在信道最坏条件下的信噪比要求,但是这两种调制方式的频谱效率很低。ofdm技术使用了自适应调制,根据信道条件的好坏来选择不同的调制方式。比如在终端靠近基站时,信道

7、条件一般会比较好,调制方式就可以由bpsk(频谱效率1bit/s/hz)转化成16qam64qam(频谱效率46bit/s/hz),整个系统的频谱利用率就会得到大幅度的提高。自适应调制能够扩大系统容量,但它要求信号必须包含一定的开销比特,以告知接收端发射信号所应采用的调制方式。终端还要定期更新调制信息,这也会增加更多的开销比特。ofdm还采用了功率控制和自适应调制相协调工作方式。信道好的时候,发射功率不变,可以增强调制方式(如64qam),或者在低调制方式(如qpsk)时降低发射功率。功率控制与自适应调制要取得平衡。也就是说对于一个发射台,如果它有良好的信道,在发送功率保持不变的情况下,可使用

8、较高的调制方案如64qam;如果功率减小,调制方案也就可以相应降低,使用qpsk方式等。自适应调制要求系统必须对信道的性能有及时和精确的了解,如果在差的信道上使用较强的调制方式,那么就会产生很高的误码率,影响系统的可用性。ofdm系统可以用导频信号或参考码字来测试信道的好坏。发送一个已知数据的码字,测出每条信道的信噪比,根据这个信噪比来确定最适合的调制方式。三、ofdm系统实现的整体思路1、系统图如下:2、具体实现过程(1)先进行信道编码为了提高数字通信系统的性能,信道编码(通常还伴有交织)是普遍采用的方法。在ofdm系统中,如果信道衰落不是太严重,均衡是无法再利用信道的分集特性来改善系统性能

9、的,因为ofdm系统自身具有利用信道分集特性的能力,一般的信道特性信息已经被ofdm这种调制方式本身所利用了。但是,ofdm系统的结构却为在子载波间进行编码提供了机会,形成cofdm(前置编码ofdm)方式。编码可以采用各种码,如分组码、卷积码等,其中卷积码的效果要比分组码好,但分组码的编解码实现更为简单。 (2)子载波调制传输信号进行信道编码后,要进行子载波的数字调制将其转换成载波幅度和相位的映射,一般采用qam或mpsk方式。各子载波不必要采用相同的状态数(进制数),甚至不必要采用相同的调制方式。这使得ofdm支持的传输速率可以在一个较大的范围内变化,并可以根据子信道的干扰情况,在不同的子

10、信道上采用不同状态数的调制,甚至采用不同的调制方式。调制信号星座在ifft之前根据调制模式形成。(3)加入保护间隔应用ofdm的一个重要原因在于它可以有效地对抗多径时延扩展。把输入数据流串并变换到 个并行的子信道中,使得每一个调制子载波的数据周期可以扩大为原始数据符号周期的n倍,因此时延扩展与符号周期的数值比也同样降低n倍。另外,通过在每个ofdm符号间插入保护间隔可以进一步抵制符号间干扰(isi),还可以减少在接收端的定时偏移错误。这种保护间隔是一种循环复制,增加了符号的波形长度,在符号的数据部分,每一个子载波内有一个整数倍的循环,此种符号的复制产生了一个循环的信号,即将每个ofdm符号的后

11、 时间中的样点复制到ofdm符号的前面,形成循环前缀,在交接点没有任何的间断。因此将一个符号的尾端复制并补充到起始点增加了符号时间的长度。符号的总长度为 ,其中 为ofdm符号的总长度,为抽样的保护间隔长度,tfft为fft变化产生的无保护间隔的ofdm符号长度, 则可以完全克服isi的影响。同时,由于ofdm延时副本内所包含的子载波的周期个数也为整数,时延信号就不会破坏子载波间的正交性,在fft解调过程中就不会产生载波间干扰(ici)。(3)将信号进行上变频(载波调制)后,发送出去,在接收端经过解调、逆快速傅里叶变换、去掉保护间隔等过程即可恢复原始的信号。四、ofdm系统的具体实现1、详细设

12、计思路接收端采用的算法和程序流程与发送端发送的ofdm符号的帧结构有关系。具体的帧结构,以及定时估计,频偏估计,剩余误差跟踪的算法可参考算法说明文档。这里对程序的流程进行说明。首先根据短训练字的特性进行相关运算,进行信号到达检测,当检测到相关值大于门限一定次数后,认为有信号到达。然后根据长训练字的特性,进行相关运算,进行ofdm符号fft窗口起始位置的估计。估计出fft窗口的位置后,先在时域进行小频偏的估计,将两个长训练字进行小频偏补偿后,进行fft运算,根据fft运算的结果进行整数倍频偏的估计。这些参数估计完成后,就可以进行数据解调了。先对数据部分进行完整的频偏补偿,然后根据估计的fft窗口

13、位置进行fft运算得到频域的数据,进行解调。然后在对应于导频的子载波位置上提取出导频信息,根据导频信息估计出剩余定时误差以及剩余的信道响应误差,将误差量送入环路进行跟踪。当收到所有数据后,重新回到信号到达检测状态,进行下一次信号到达的检测和信号接收。2、程序流程图3、具体代码实现nfft=128*2; %256 进行256点的fftng=32*2; %64nzero=0;nzerosub=floor(nfft*0.5)/2); %for padding ntotal=ng+2*nzero+nfft; %320constellation_num=16;symbol_num=20; %ablen=

14、symbol_num*nfft; %totalns=symbol_num*ntotal;pnum_least(1:symbol_num)=10000;pnum(1:symbol_num)=0;ndata_o=symbol_num*(nfft/2-nfft/16/2);sita=0;sita1=1;sita2=0;sita3=0; % 测试变量sign=1;%for filterlhbf1=23; % 半带滤波器长度% i1=zeros(1,ndata_o);% i2=zeros(1,ndata_o);% i3=zeros(1,ndata_o);% i4=zeros(1,ndata_o);chb

15、f1(1:lhbf1)=0;insertgiout(1:symbol_num,1:ntotal)=0;% 半带滤波器系数fid2=fopen('hbf23.txt','r');chbf1=fscanf(fid2,'%f');fclose(fid2);ihbf1in(1:lhbf1)=0;qhbf1in(1:lhbf1)=0; % 进行半带滤波时的缓冲区ihbf1out(1:2*ns)=0;qhbf1out(1:2:ns)=0; % 两倍上采样后时域数据的存放数组 % i、q分别表示i、q两路信号ii=1;k=1;k1=1;k2=1;k3=1;k4

16、=1;k5=1;t=1;t2=1;t3=1;souti(1:ns)=0;soutq(1:ns)=0; % 没有进行两倍上采样之前的时域数据存放数组 % i、q分别表示i、q两路信号ifftouti(1:symbol_num,1:nfft)=0;ifftoutq(1:symbol_num,1:nfft)=0;ifftoutiq(1:symbol_num,1:nfft)=0;ifftoutiqs(1:symbol_num,1:nfft)=0; % 进行ifft运算后ofdm符号存放数组 % i、q分别表示i、q两路信号 % iq表示复数信息fftout_t_1(1:symbol_num,1:2*n

17、fft)=0;fftout_t_2(1:symbol_num,1:4*nfft)=0;fftout_t_3(1:symbol_num,1:8*nfft)=0; % 测试变量ii=1;m_pilot=8;subcarrier(1:n)=0;subcarriercom(1:n)=0;%train_word% 获得短前导字频域信息fid3=fopen('data_i_train_word_re_i0_256.txt','r');i_train_word_re_temp=fscanf(fid3,'%f');fclose(fid3);i_train_wor

18、d_re = (i_train_word_re_temp)'fid3=fopen('data_q_train_word_re_i0_256.txt','r');q_train_word_re_temp=fscanf(fid3,'%f');fclose(fid3);q_train_word_re = (q_train_word_re_temp)'% 获得一个长前导字频域信息fid3=fopen('data_i_train_word_1_i0_256.txt','r');i_train_word_1_t

19、emp=fscanf(fid3,'%f');fclose(fid3);i_train_word_1 = (i_train_word_1_temp)'fid3=fopen('data_q_train_word_1_i0_256.txt','r');q_train_word_1_temp=fscanf(fid3,'%f');fclose(fid3);q_train_word_1 = (q_train_word_1_temp)'% 获得二个长前导字频域信息fid3=fopen('data_i_train_word

20、_2_i0_256.txt','r');i_train_word_2_temp=fscanf(fid3,'%f');fclose(fid3);i_train_word_2 = (i_train_word_2_temp)'fid3=fopen('data_q_train_word_2_i0_256.txt','r');q_train_word_2_temp=fscanf(fid3,'%f');fclose(fid3);q_train_word_2 = (q_train_word_2_temp)'

21、;l=1;% 加窗处理的参数设置wind=zeros(1,(nfft+ng);windo=hamming(nfft+ng);wind(ng+1):nfft)=windo(ng+1):nfft);wind(1:ng)=windo(ng+1);wind(nfft+1):(nfft+ng)=windo(nfft);stst=1;% 获得随机数,当作用户信息,调制到各个子载波上fid3=fopen('i1.txt','r');i1=fscanf(fid3,'%d,');fclose(fid3);fid3=fopen('i2.txt',&#

22、39;r');i2=fscanf(fid3,'%d,');fclose(fid3);fid3=fopen('i3.txt','r');i3=fscanf(fid3,'%d,');fclose(fid3);fid3=fopen('i4.txt','r');i4=fscanf(fid3,'%d,');fclose(fid3);% bits mapping to constellationsfor i=1:n % 前面4个符号是前导字 if(i < nfft*4+1) % 短

23、前导字 if( i>0 & i < 2*nfft+1) if(rem(i,nfft) = 0) imapped(i) = i_train_word_re(nfft); qmapped(i) = q_train_word_re(nfft); else imapped(i) = i_train_word_re(rem(i,nfft); qmapped(i) = q_train_word_re(rem(i,nfft); end end % 第一个长前导字 if( i>2*nfft & i < 3*nfft+1) if(rem(i,nfft) = 0) imap

24、ped(i) = i_train_word_1(nfft); qmapped(i) = q_train_word_1(nfft); else imapped(i) = i_train_word_1(rem(i,nfft); qmapped(i) = q_train_word_1(rem(i,nfft); end end % 第二个长前导字 if (i>3*nfft & i<nfft*4+1) if(rem(i,nfft) = 0) imapped(i) = i_train_word_2(nfft); qmapped(i) = q_train_word_2(nfft); el

25、se imapped(i) = i_train_word_2(rem(i,nfft); qmapped(i) = q_train_word_2(rem(i,nfft); end end else % 前导字发送完后,发送用户信息,这里用随机数代替用户信息 % 中间查0的虚拟子载波没有用户信息 if (rem(i,nfft) < (nfft/2-nzerosub+1) | (rem(i,nfft) > (nfft/2+nzerosub) if(rem(i,nfft/(2*m_pilot)=0) % insert pilots if (sign=1) isignal=3*1.414;

26、qsignal=0; else isignal=-3*1.414; qsignal=0; end % sub-carrier polit scheme is bpsk stst=stst+1; else % 插入导频信息 isignal = 2*(i1(l)*1+i2(l)*2)-3; qsignal = 2*(i3(l)*1+i4(l)*2)-3; l=l+1; end imapped(i)=isignal; qmapped(i)=qsignal; else % 中间查0的虚拟子载波没有用户信息 imapped(i)=0; qmapped(i)=0; end endif (rem(i,nff

27、t)=0) now_step = num2str(ii) sign=rem(sign+1,2); imappedfs(1:nfft)=imapped(i-nfft+1:i); qmappedfs(1:nfft)=qmapped(i-nfft+1:i); % 对频域信息进行ifft变换,获得时域信息 ifftouti(ii,1:nfft)=ifft(imappedfs,nfft); ifftoutq(ii,1:nfft)=ifft(qmappedfs,nfft); %ifftoutiq(ii,1:nfft)=ifftouti+j*ifftoutq; ifftoutiqs(ii,1:nfft)=i

28、fft(imappedfs(1:nfft)+j*qmappedfs(1:nfft),nfft); ifftoutiq(ii,1:nfft)=ifftoutiqs(ii,1:nfft); ii=ii+1;end;end; % end of fft symbol generationfor (ig=1:symbol_num) % 插入循环前缀 insertgiout(ig,1:nzero)=0; insertgiout(ig,ng+nzero+1:(ng+nfft+nzero)=ifftoutiq(ig,1:nfft); insertgiout(ig,nzero+1:(ng+nzero)=ifft

29、outiq(ig,(nfft-ng)+1:nfft); insertgiout(ig,(ng+nfft+nzero)+1:ntotal)=0; % 加窗处理 if(ig > 4) insertgiouta(ig,1:ntotal)=insertgiout(ig,1:ntotal); insertgiout(ig,1:ntotal)=insertgiouta(ig,1:ntotal).*wind; endfftout_t(ig,1:nfft)=fft(insertgiout(ig,ng+1-sita:nfft+ng-sita),nfft); % 进行中间变量的测试 % 将生成的ofdm时域

30、信号依次写入一个数组里,形成一个连续的ofdm时域数据流 for (is=1:ntotal) souti(ig-1)*ntotal+is)=real(insertgiout(ig,is); soutq(ig-1)*ntotal+is)=imag(insertgiout(ig,is); end; end;% 对生成的ofdm时域信号进行两倍上采样% sample rate interpolation and modulationfor(k=1:ns) % hbf1 for j1=1:2 ihbf1in(2:lhbf1)=ihbf1in(1:lhbf1-1); qhbf1in(2:lhbf1)=q

31、hbf1in(1:lhbf1-1); if (j1=1) ihbf1in(1)=souti(k); qhbf1in(1)=soutq(k); else ihbf1in(1)=0; qhbf1in(1)=0; end; ihbf1out(k1)=2*ihbf1in*chbf1; qhbf1out(k1)=2*qhbf1in*chbf1; if (rem(k1,2*ntotal)=0)fftout_t_1(t,1:2*nfft)=fft(ihbf1out(k1-2*nfft+1-sita1:k1-sita1),2*nfft)+j*fft(qhbf1out(k1-2*nfft+1-sita1:k1-

32、sita1),2*nfft); t=t+1; end; k1=k1+1; end;% end of j1end; %end of k% modulation% 将基带信号转换成中频信号m=2;nn=length(ihbf1out);phase0=pi/30;error_f=0;w=pi/m; % if=8*(symbol rate) or (sample rate)/4imod(1:nn)=0;qmod(1:nn)=0;modout(1:nn)=0;for i=1:nn imod(i)=cos(rem(i*w+phase0,2*pi)*ihbf1out(i); qmod(i)=-sin(rem(i*w

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论