当前位置:   article > 正文

基于ZF均衡算法的OFDM调制解调系统的MATLAB仿真_ofdm调制解调matlab

ofdm调制解调matlab

UP目录

一、理论基础

二、核心程序

三、测试结果


一、理论基础

        OFDM(Orthogonal Frequency Division Multiplexing)即正交频分复用技术,实际上OFDM是MCM(Multi Carrier Modulation),多载波调制的一种。通过频分复用实现高速串行数据的并行传输, 它具有较好的抗多径衰落的能力,能够支持多用户接入。OFDM技术由MCM(Multi-Carrier Modulation,多载波调制)发展而来。OFDM技术是多载波传输方案的实现方式之一,它的调制和解调是分别基于IFFT和FFT来实现的,是实现复杂度最低、应用最广的一种多载波传输方案。

        OFDM的技术的核心思想是将宽频率载波划分成多个带宽较小的正交子载波,如图3所示,并使用这些正交子载波发送及接收信号。由于每个子载波的带宽小于信道带宽, OFDM可以有效克服频率选择性衰落。 由于同时使用多个载波进行信号传输,OFDM技术属于多载波传输技术的一种。下面我将用数学模型讲解OFDM传输信号的原理。

        在通信系统中,信道所能提供的带宽通常比传送一路信号所需的带宽要宽得多。如果一个信道只传送一路信号是非常浪费的,为了能够充分利用信道的带宽,就可以采用频分复用的方法。
        OFDM主要思想是:将信道分成若干正交子信道,将高速数据信号转换成并行的低速子数据流,调制到在每个子信道上进行传输。正交信号可以通过在接收端采用相关技术来分开,这样可以减少子信道之间的相互干扰(ISI) 。每个子信道上的信号带宽小于信道的相关带宽,因此每个子信道上可以看成平坦性衰落,从而可以消除码间串扰,而且由于每个子信道的带宽仅仅是原信道带宽的一小部分,信道均衡变得相对容易。

      调制多个子载波同时传输信息,将高速的串行输入分解为多个较低速率的信息流进行传输,这些子载波们批在一个符号周期内相互正交,体现在频谱上则是相邻子载波之间不仅没有隔离带而且还重合了50%的频谱。假定系统有N个子载波,一般输入的是信息序列{bn},我们会将其进行QAM星座图映射,得到一个由一个个对应复数值组成的序列{Sn},再将其进行串并转换,再将这N个已调子载波信号合并后,构成一个OFDM符号:

       将OFDM系统接收端的频域输出方程组用矩阵表示为:
Y=HX+W

其中W为加性高斯白噪声。为了得到发送端的发送信号X,最简单的实现方法是将Y乘以矩阵的逆,即:
在这里插入图片描述

所以迫零均衡器为:
在这里插入图片描述 

但当传输信道具有较深的频谱凹陷点时,H(-1)一般不存在,此时一般由其伪逆H+来代替,即
在这里插入图片描述 

ZF算法有个很大的缺点,没有对噪声进行消除,反而会放大噪声,当信噪比比较低时,性能会非常不好。 

二、核心程序

  1. .............................................................
  2. BitsTx = floor(rand(1,NumLoop*NumSubc)*2);%产生0,1随机数
  3. SymQAMtmp = reshape(BitsTx,2,NumLoop*NumSubc/2).';
  4. SymQAMtmptmp = bi2de(SymQAMtmp,2,'left-msb');
  5. QAMTable = [-1-i -1+i 1-i 1+i];
  6. SymQAM = QAMTable(SymQAMtmptmp+1);
  7. SymIFFT = zeros(NumSubc,NumLoop);%?
  8. SymIFFTtmp = reshape(SymQAM,NumSubc/2,NumLoop);
  9. SymIFFTtmptmp = zeros(NumSubc,NumLoop);
  10. SymIFFTtmptmp(1,:) = real(SymIFFTtmp(1,:)); % 实数
  11. SymIFFTtmptmp(NumSubc/2+1,:) = imag(SymIFFTtmp(1,:)); % 实数
  12. .....................................................................
  13. s1=zeros(1,20);
  14. s2=zeros(1,20);
  15. for snr=0:24; % = SNR + 10*log10(log2(2));
  16. snr
  17. BerSnrTable(snr+1,1) = snr;
  18. SymCh = awgn(SymChtmptmp,snr,'measured');
  19. SymDeCP = zeros(NumSubc,NumLoop);
  20. SymDeCPtmp = reshape(SymCh,NumSubc + NumCP,NumLoop);
  21. SymDeCP = SymDeCPtmp((NumCP+1+SyncDelay):NumAddPrefix+SyncDelay,:);%%%%%???????????????????!!!!!!!!!!!!!!!
  22. % FFT %
  23. SymFFT1 = fft(SymDeCP,NumSubc,1);
  24. % equalization channel %
  25. hh=[a1,zeros(1,m2-1),a2,zeros(1,m3-m2-1),a3,zeros(1,m4-m3-1),a4,zeros(1,m5-m4-1),a5,zeros(1,NumSubc-m5-1)];
  26. %length(hh);
  27. HH=fft(hh,NumSubc);
  28. HH_inv=1./HH;
  29. %SymFFT2=SymFFT1';
  30. for nn=1:NumSubc
  31. SymFFT2(nn,:)=HH_inv(nn)*SymFFT1(nn,:);
  32. end
  33. SymFFT=SymFFT2;
  34. ............................................................
  35. % Bit Error
  36. BitsRx = zeros(1,NumSubc*NumLoop);
  37. BitsRx = SymDec(:).';
  38. [Num,Ber] = symerr(BitsTx,BitsRx)
  39. snr
  40. BerSnrTable(snr+1,2) = Num ;
  41. BerSnrTable(snr+1,3) = Ber ;
  42. s1(snr+1)=Num;
  43. s2(snr+1)=Ber;
  44. end
  45. snr=0:24;
  46. figure;
  47. semilogy(snr,s2,'b-o');
  48. grid on
  49. xlabel('SNR');
  50. ylabel('error');
  51. up81

三、测试结果

通过matlab2021a仿真结果如下:

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号