其他分享
首页 > 其他分享> > 第8章:OFDM同步技术(2)——载波频率偏差

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

作者:互联网

第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