ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第8章:OFDM同步技术(2)——载波频率偏差

2021-02-22 22:01:05  阅读:435  来源: 互联网

标签:偏差 right yl OFDM CFO 估计 载波 left


第8章(2)内容如下:

OFDM同步技术主要内容如下:
img

图1 OFDM同步技术

上一讲主要介绍了OFDM同步技术中的符号定时偏差(STO)相关问题,这一讲集中在载波频率偏差(CFO)问题。

一、CFO的基本介绍及影响

前面的文章已经多次提过,载波频率偏差主要来自两个方面:

(1)收发端本振频率有偏差;

(2)多普勒频移;

先定义归一化的CFO为CFO与子载波的间隔比值,即 ε = f o f f s e t Δ f \varepsilon = \frac{{{f_{offset}}}}{{\Delta f}} ε=Δffoffset​​ 。

思考一下?为什么要定义归一化 ε \varepsilon ε ?

img

为帮助你理解,我拿DMB举例, ε = f o f f s e t Δ f = υ f c Δ f c = 120 3.6 × 375 × 10 6 1 × 10 3 × 3 × 10 8 = 0.042 \varepsilon = \frac{{{f_{offset}}}}{{\Delta f}} = \frac{{\upsilon {f_c}}}{{\Delta fc}} = \frac{{\frac{{120}}{{3.6}} \times 375 \times {{10}^6}}}{{1 \times {{10}^3} \times 3 \times {{10}^8}}} = 0.042 ε=Δffoffset​​=Δfcυfc​​=1×103×3×1083.6120​×375×106​=0.042

表格中使用“最大多普勒频率”这个词,是因为一般还有一个cos(theta)函数值的影响,theta是用户相对于基站移动速度的夹角,因此会用“最大”二字放在前面。

先复习一下信号与系统课程中常用的傅立叶变换对:

img

注意到CFO对接收信号的影响

img

联系到STO对接收信号的影响,你是否有没有把CFO对接收信号的影响和STO对接收信号的影响这两者搞混呢?

建议多看几遍表5.3和5.1中的内容,我一开始也很懵逼。

img

继续看《MIMO-OFDM无线通信技术及MATLAB实现》第5章的内容:

img

img

img

img

img

由于QPSK是相位调制,在进行解调时是以相位作为判决条件。而由于CFO的影响,结合上面的相位差(即图5.5右边的三幅图),若相位差超过 π \pi π ,结果就会引起相位模糊,导致判决出错

严格来说,若相位差超过 π \pi π/4就有可能判决出错,这取决于接收端的解调方式了。(想想为什么?对照星座图可以理解。)

接下来介绍IFO和FFO的概念,这和符号定时偏差的内容有很大不同。

img

img

注意接收机这端是N点FFT,而不是IFFT

(不过,用FFT也可以实现IFFT,用IFFT也可以实现FFT,本质上没有多大区别,思考下为什么?数字信号处理课本上一般有这段内容)

图片中提到“子载波频率分量之间的正交性没有被破坏,因此没有出现ICI”,这怎么理解呢?

回到IFFT(IDFT的表达式):

x [ n ] = ∑ k = 0 N − 1 X [ k ] e j 2 π k n / N , n = 0 , 1 ⋯   , N − 1 x\left[ n \right] = \sum\limits_{k = 0}^{N - 1} {X\left[ k \right]{e^{j2\pi kn/N}}} ,n = 0,1 \cdots ,N - 1 x[n]=k=0∑N−1​X[k]ej2πkn/N,n=0,1⋯,N−1

即 2 π k / N {2\pi k/N} 2πk/N ,当k=0,1…N-1,这些频率之间是相互正交的。

相应的,由于 ε i {\varepsilon _i} εi​ 是整数,所以 2 π ( k + ε i ) / N 2\pi \left( {k{\rm{ + }}{\varepsilon _i}} \right)/N 2π(k+εi​)/N ,各子载波分量,当然也是保持正交的。

img

img

img

上面的(5.8)和(5.9)运算起来有点小复杂,你可以直接跳过该部分内容看下面这图,来理解FFO对星座图的影响。

img
二、CFO的估计技术

上面已经讲过了CFO的定义和影响,为了保证OFDM系统性能,接收机必须估计出CFO的大小,然后进行补偿,为后面的正确解调做准备。

CFO的估计技术也可以在时域或者频域进行,时域可利用CP或者训练符号进行CFO估计。

1、基于CP的CFO估计技术

img

img

在这里解释一下为什么是 ε ^ = 1 2 π arg ⁡ { ∑ n = − N G − 1 y l ∗ [ n ] y l [ n + N ] } \hat{\varepsilon}=\frac{1}{2 \pi} \arg \left\{\sum_{n=-N_{\mathrm{G}}}^{-1} y_{l}^{*}[n] y_{l}[n+N]\right\} ε^=2π1​arg{∑n=−NG​−1​yl∗​[n]yl​[n+N]} ,

令 y l [ n ] = A e j θ 1 {y_l}\left[ n \right] = A{e^{j{\theta _1}}} yl​[n]=Aejθ1​ , y l [ n + N ] = B e j θ 2 {y_l}\left[ {n + N} \right] = B{e^{j{\theta _2}}} yl​[n+N]=Bejθ2​

则 y l ∗ [ n ] y l [ n + N ] = A e − j θ 1 B e j θ 2 = C e j ( θ 2 − θ 1 ) = C e j 2 π ε y_l^*\left[ n \right]{y_l}\left[ {n + N} \right] = A{e^{ - j{\theta _1}}}B{e^{j{\theta _2}}} = C{e^{j\left( {{\theta _2} - {\theta _1}} \right)}} = C{e^{j2\pi \varepsilon }} yl∗​[n]yl​[n+N]=Ae−jθ1​Bejθ2​=Cej(θ2​−θ1​)=Cej2πε ,

这样的思路在CFO的估计中会很常见。

2、基于训练信号的CFO估计技术

img

img

img

(1)频域梳状信号可以参考导频结构相关知识:第7章:OFDM 信道估计与均衡(4)

(2)为方便理解公式(5.26)(5.27),我举一个例子,假设N=32,D=4,即做32点FFT,则32/4=8。

Am不妨就取2进制的数,0或1。

ε ∧ = 4 2 π arg ⁡ { ∑ n = 0 7 y l ∗ [ n ] y l [ n + 8 ] } = 4 2 π arg ⁡ { y l ∗ [ 0 ] y l [ 8 ] + y l ∗ [ 1 ] y l [ 9 ] … + y l ∗ [ 7 ] y l [ 15 ] } \mathop \varepsilon \limits^ \wedge = \frac{4}{{2\pi }}\arg \left\{ {\sum\limits_{n = 0}^7 {y_l^*\left[ n \right]{y_l}\left[ {n + 8} \right]} } \right\} = \frac{4}{{2\pi }}\arg \left\{ {y_l^*\left[ 0 \right]{y_l}\left[ 8 \right] + y_l^*\left[ 1 \right]{y_l}\left[ 9 \right] \ldots + y_l^*\left[ 7 \right]{y_l}\left[ {15} \right]} \right\} ε∧=2π4​arg{n=0∑7​yl∗​[n]yl​[n+8]}=2π4​arg{yl∗​[0]yl​[8]+yl∗​[1]yl​[9]…+yl∗​[7]yl​[15]}

以 y l ∗ [ 0 ] y l [ 8 ] = 2 π × ε N × N D y_l^*\left[ 0 \right]{y_l}\left[ 8 \right] = 2\pi \times \frac{\varepsilon }{N} \times \frac{N}{D} yl∗​[0]yl​[8]=2π×Nε​×DN​ 为例, 则 ε ∧ = 4 2 π y l ∗ [ 0 ] y l [ 8 ] \mathop \varepsilon \limits^ \wedge = \frac{4}{{2\pi }}y_l^*\left[ 0 \right]{y_l}\left[ 8 \right] ε∧=2π4​yl∗​[0]yl​[8] ,也即上面这个式子得证了。

根据(5.27)后的那句话,这种技术能够估计出的CFO的范围是 ∣ ε ∣ ≤ 2 \left| \varepsilon \right| \le 2 ∣ε∣≤2 。

img

img

img

在频域CFO技术中的Moose方法,要求发射两个相同的训练符号,且这个两个训练符号中不能传输数据符号

(在代码实现中也将看到,前两个OFDM符号只含有导频数据经过IFFT的时域信号+相应的CP,不包含传输数据符号,从第三个OFDM符号开始才有数据符号进行传输)。

三、CFO估计技术的可运行MATLAB代码及其注意点

下面将实现三种CFO的估计方法,基于CP的方法、频域的Moose/Classen方法。

%%%%%%%%%%%%%%%%%%%%%        基于CP的CFO(载波频偏估计)    %%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%        CFO_estimation_sim1.m            %%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%      date:2020年12月14日  author:飞蓬大将军   %%%%%%%%%%

%%%%%%%%%%%%%%%%%程序说明
%%%完成时域基于CP的方法和频域的Moose/Classen方法,用于后续CFO补偿


%%%%%%    仿真环境
%软件版本:MATLAB R2019a
clear, clf
CFO = 0.15;
% CFO = 0;
Nfft=128; % FFT size   
Nbps=2; 
M=2^Nbps; % Number of bits per (modulated) symbol
Es=1; 
A=sqrt(3/2/(M-1)*Es); % Signal energy and QAM normalization factor
N=Nfft;
Ng=Nfft/4;
Nofdm=Nfft+Ng; 
Nsym=3;  
% h=complex(randn,randn)/sqrt(2);
% %h=[1 zeros(1,5)]; 
% channel(h,0);  
%Transmit signal
x=[];
for m=1:Nsym
   msgint=randi([0 M-1],1,N); %bits_generator(1,Nsym*N,Nbps) 

   if m<=2
       Xp = add_pilot(zeros(1,Nfft),Nfft,4); 
       Xf=Xp; % add_pilot
   else  %Xf= QAM(msgint((i-1)*N+1:i*N),Nbps);  % constellation mapping. average power=1        
       Xf = A.*qammod(msgint,M,'UnitAveragePower',true);
   end                        
   xt = ifft(Xf,Nfft);  
   x_sym = add_CP(xt,Ng);
   x= [x x_sym];
end    

%*************************  信道 **************
%channel 可添加所需信道
y=x; % No channel effect

%Signal power calculation
sig_pow= y*y'/length(y); % Signal power calculation

%%%%
SNRdBs= 0:3:30;  
% SNRdBs= 100; 设100是为调试程序  
MaxIter = 100;  
for i=1:length(SNRdBs)
   SNRdB = SNRdBs(i);
   MSE_CFO_CP = 0; 
   MSE_CFO_Moose = 0; 
   MSE_CFO_Classen = 0;
   rand('seed',1); 
   randn('seed',1);  % Initialize seed for random number generator
   y_CFO= add_CFO(y,CFO,Nfft); % Add CFO
   %%%%多次迭代取平均
   for iter=1:MaxIter
      %y_aw=add_AWGN(y_CFO,sig_pow,SNRdB,'SNR',Nbps);  % AWGN added, signal power=1
      y_aw = awgn(y_CFO,SNRdB,'measured');  % AWGN added, signal power=1
      
      Est_CFO_CP = CFO_CP(y_aw,Nfft,Ng); % CP-based 
      MSE_CFO_CP = MSE_CFO_CP + (Est_CFO_CP-CFO)^2;
      
      Est_CFO_Moose = CFO_Moose(y_aw,Nfft); % Moose (based on two consecutive preambles)
      MSE_CFO_Moose = MSE_CFO_Moose + (Est_CFO_Moose-CFO)^2;
      
      Est_CFO_Classen = CFO_Classen(y_aw,Nfft,Ng,Xp); % Classen (Pilot-based)
      MSE_CFO_Classen = MSE_CFO_Classen + (Est_CFO_Classen-CFO)^2;
      
   end % the end of for (iter) loop
   MSE_CP(i) = MSE_CFO_CP/MaxIter; 
   MSE_Moose(i) = MSE_CFO_Moose/MaxIter;  
   MSE_Classen(i) = MSE_CFO_Classen/MaxIter;
end%ebn0 end    
semilogy(SNRdBs, MSE_CP,'-+');
grid on, hold on
semilogy(SNRdBs, MSE_Moose,'-x'); semilogy(SNRdBs, MSE_Classen,'-*');
xlabel('SNR[dB]'), ylabel('MSE'); title('CFO Estimation'); %axis([0 30 10e-8 10e-2])
% str=sprintf('CFO = %1.2f',CFO);
legend('CP-based technique','Moose (Preamble-based)','Classen (Pilot-based)');
% legend(str);

%%********************* 实验结果 *************
%%%记录在CFO_fig1,对比了不同算法的CFO估计结果
%%%2020年12月14日 程序运行正确
%%%成功估计CFO小数部分,CFO估计后续再考虑

完整代码下载地址是:

https://github.com/123kevin456/OFDM–STO-CFOgithub.com

若缺少相应子函数,可在原书代码中照到相应子函数即可。

运行上面的代码,有以下几点需要注意:

(1)运行代码,可以比较不同算法估计CFO,和真实的CFO进行比较,估计的优劣采用均方误差进行衡量。

img

图2 不同算法估计CFO的性能比较

(2)噪声考虑的是接收机热噪声,并没有考虑信道对信号的影响。

因此,你可以根据自己实验内容所需,对其添加信道,比如瑞利信道、莱斯信道等,便可以衡量出不同STO技术在相应信道下的估计性能了。

(3)整数倍的CFO估计问题还未完成;

(4)估计出来的CFO与真实的CFO在数值上相差不大,说明估计性能还不错。

后续的频偏补偿,解调等过程没有进行。你可以根据需要,画出在残留频偏下的误码率曲线图,便可观察残留频偏对误码率的影响了。

四、总结

至此,OFDM两大同步问题均已讲完。下一章,将更新OFDM的PAPR,即峰均比相关问题。

欢迎你双击屏幕、点赞、收藏、转发和分享,关注我的知乎号,也欢迎读者朋友就相关技术问题与我交流,一起学习,共同进步。请你也别忘了把这篇文章分享给你身边正在学习通信专业的同学们,也许能够帮到Ta。

这是《陈老湿·通信MATLAB仿真》的第8章,期待下次更新见!

标签:偏差,right,yl,OFDM,CFO,估计,载波,left
来源: https://blog.csdn.net/weixin_44283855/article/details/113957435

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有