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符号,就需要到频域进行处理,需要用长训练序列进行信道估计(信道增益情况,用来恢复后面的数据位);

相关推荐
先吃饱再说13 小时前
判断回文字符串,从一行代码到双指针优化
算法
黄敬峰15 小时前
深入理解算法核心:从递归思想、数组扁平化到快速排序
算法
得物技术17 小时前
从狂野代码到按目标生产:得物推荐 AI Harness 的工程化实践|AICon 演讲整理
人工智能·算法·架构
AI小老六20 小时前
SkillOpt 架构拆解:把 Skill 文本当参数,用执行轨迹训练 Agent
后端·算法·ai编程
胡萝卜术21 小时前
从“分数打架”到“排名投票”:为什么你的ChatBI必须用RRF?
算法·设计模式·面试
Asize21 小时前
初识DFS 与 BFS:递归、队列与图遍历
算法
罗西的思考1 天前
机器人 / 强化学习】HIL-SERL:人类在环驱动的具身智能进化框架
人工智能·算法·机器学习
美团技术团队2 天前
LongCat 开源 VitaBench 2.0:长期动态智能体基准新标杆
人工智能·算法
To_OC2 天前
LC 207 课程表:刚学图论那会儿,我连这是拓扑排序都没看出来
javascript·算法·leetcode