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_out63,mult_out59:58,mult_out57:29};

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

freq_ctrl <= {angle_out_div64x2pi28:0,3'b000};

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

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

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

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

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

相关推荐
.道阻且长.5 小时前
2.LeetCode算法习题讲解--双指针--复写零
算法·leetcode·职场和发展
szxinmai主板定制专家6 小时前
Zynq MPSoC实现半导体真空腔体状态监测|FPGA多传感器时序同步采集方案
fpga开发·zynq·控制器·mpsoc·半导体设备·fpga同步
To_OC7 小时前
LC 438 找到所有字母异位词:暴力超时后,我靠滑动窗口一招搞定
javascript·算法·leetcode
学习FPGA的电气小兴兴8 小时前
基于FPGA的DDS信号发生器设计,生成频率可调的正弦波、三角波、锯齿波和方波
fpga开发·数字信号处理·fpga·vivado·dsp·dds·diy
Forever Nore9 小时前
学完C语言力扣第一题做不来正常吗
数据结构·算法
hansang_IR10 小时前
【题解】LC:倍增 / 区间并查集(Range Parallel Unionfind)
c++·算法·并查集
Tisfy11 小时前
LeetCode 3731.找出缺失的元素:哈希 / 排序
算法·leetcode·哈希算法·排序·哈希表
lucas_AI12 小时前
Q-CueGraph:你的多模态大模型会 zoom,但真的知道该看哪儿吗?
人工智能·算法
kaixin_啊啊12 小时前
test_机器学习算法学习
学习·算法·机器学习