OFDM 精频偏补偿

利用OFDM 系统中数据协议中包含的2个长训练序列进行自相关实现精频偏补偿;

在接收和发射机的本振会存在频率的偏差,这样会导致 0 中频接收的正交基带采样数据中包含频偏分量,这个频偏分量可以在长训练序列检测中利用自相关值进 行估计;

通过自相关值得到估计频偏分量并补偿到后续的采样序列中,达到精频偏矫正的目的。

当接收到一帧中心频率为 fc 的数据时,接收端使用本振为(1+e)fc的本振进行 下变频,

那么e为频率偏差因子。 根据正交下变频原理进行下变频 ((1+e)fc) 和 fc 混频后得到

((1+e)fc)+fc 和 ((1+e)fc) -fc 倍频项被滤除剩余差频项 e*fc 也就是这个频率偏差会引入到基带信号中。

角频率公式 𝜔=2𝜋𝑓

如果想得到每个采样周期的弧度旋转量,可以在角频率公式两侧乘以 Ts 采样周期:

w𝑇𝑠 = 2𝜋𝑓𝑇s

w𝑇𝑠就是每个采样周期的相位旋转量,用𝛼表示,并把𝑒∗𝑓𝑐带入公式得到

𝛼 =2𝜋𝑒𝑓𝑐𝑇𝑠

如果能够估算出𝛼相位旋转量就可以补偿频偏 ;

使用以下算法使用训练序列进行估计频偏

如果对𝑆𝑚+64取共轭那么得到的两个短训练序列之间的相位旋转量是与实 际相反方向。

如果对𝑆𝑚取共轭得到的相位旋转量是与实际方向相同。

得到了估计的 𝛼𝑙𝑡 相位变化量之后,可以生成一个反向的相位变化量的采样序列补偿到实际采样序列中。

补偿序列在fpga 中就可以以相位递增量为α𝑙𝑡的DDS产生;

精频偏矫正算法框图

精频偏矫正是在粗频偏矫正的基础上进行;

精频偏矫正的输入数据是由粗频偏矫正的输出数据给过来;

做频偏矫正只能取相关峰的值,才能计算出来前后两个长训练序列之间的相位差;

没有频偏的情况下,相位变化量应该是不变的;

计算出来的相位差就能够和频率进行相关联;

延迟96sample目的:在相关峰之后,对齐LT1;

对齐之后会进行精频偏矫正,就会经过上面算法框图的过程,进行延迟64拍、取共轭,一直到最后;

设计思想

  1. 将对齐⭕️ 的信号进行延拍16个采样,保证计算完频偏后可以对此序列 进行补偿频偏。从上图可以看到在第二个搜索长训练序列的相关峰之后才会 有频偏矫正的相关峰,所以计算频偏估计值一定是在⭕️ 信号产生之后 的,所以对之前已经输出的 ⭕️信号无法补偿频偏。因此延迟16采样。
  2. 延迟64采样来进行与第二个LT进行相关,会出现32个采样的相关峰值(LT1/2)。需要在相关峰出现的阶段进行取相关之后的复数值进行做频偏估计。
  3. 采集相关峰值用于频偏矫正,选取位置为第二个搜索长训练序列的相关峰之后的第8个采样点位置取频偏矫正的相关峰值。Second_peak_delay_8s 位置。

实现步骤:

  1. 先对粗频偏矫正后的数据进行64拍的延时,然后是取共轭,(取共轭是对𝑆𝑚+64取,所以后面计算出来的相位旋转量是与实际方向相反的),进行复数乘法运算(取完共轭后的数据与粗频偏矫正后的数据,需要考虑延时打拍),进行累加平滑;同之前的粗频偏矫正模块;
  2. 进行cordic IP 计算弧度(alpha),再计算每个采样点的相位递增量(alpha/(64*2*pi)),定点数的计算:1/(64*2*pi) = 2^29*(1/(64*2*pi);格式是 fix32_29;将除法变为乘法运算,得到的数据格式为 fix64_58;所以取值如下:

angle_out_div64x2pi = {mult_out[63],mult_out[59:58],mult_out[57:29]};

  1. 1 计算频率控制字,freq_ctrl =(angle_out_div64x2pi/2^29)*2^32;即

freq_ctrl <= {angle_out_div64x2pi[28:0],3'b000};

因为计算出来的相位旋转量是与实际方向相反,所以利用减法运算改变方向,得到与实际方向相同的相位旋转量,送入DDS,计算相位旋转量;

  1. 2 最后通过乘法器,将粗频偏矫正后的数据与DDS 输出的相位累加结果进行相乘,对长训练序列进行频偏补偿,最后就得到了精频偏补偿后的时序数据。

频偏量计算:频率控制字 / 2^32 * 20e6

精度频偏补偿能补偿到 10hz 以内;

频偏矫正完成后就到了OFDM符号,就需要到频域进行处理,需要用长训练序列进行信道估计(信道增益情况,用来恢复后面的数据位);

相关推荐
wadesir1 天前
Rust中的条件变量详解(使用Condvar的wait方法实现线程同步)
开发语言·算法·rust
bitQ1 天前
ZBoot-MP:ZYNQ 多介质 Linux 启动与升级解决方案
fpga开发
yugi9878381 天前
基于MATLAB实现协同过滤电影推荐系统
算法·matlab
TimberWill1 天前
哈希-02-最长连续序列
算法·leetcode·排序算法
Morwit1 天前
【力扣hot100】64. 最小路径和
c++·算法·leetcode
leoufung1 天前
LeetCode 373. Find K Pairs with Smallest Sums:从暴力到堆优化的完整思路与踩坑
java·算法·leetcode
wifi chicken1 天前
数组遍历求值,行遍历和列遍历谁更快
c语言·数据结构·算法
胡楚昊1 天前
NSSCTF动调题包通关
开发语言·javascript·算法
Gold_Dino1 天前
agc011_e 题解
算法
bubiyoushang8881 天前
基于蚁群算法的直流电机PID参数整定 MATLAB 实现
数据结构·算法·matlab