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

相关推荐
程序员-King.1 小时前
day109—同向双指针(字符串)—每个字符最多出现两次的最长子字符串(LeetCode-3090)
算法·leetcode·双指针
青山的青衫1 小时前
【单调栈和单调队列】LeetCode hot100+面试高频
算法·leetcode·面试
俊俊谢1 小时前
【浮点运算性能优化】浮点转定点算法库的多平台通用移植方案与性能评估优化
算法·性能优化·c·浮点转定点·多平台移植
电饭叔1 小时前
Luhn算法与信用卡识别完善《python语言程序设计》2018版--第8章14题利用字符串输入作为一个信用卡号之三
android·python·算法
bbq粉刷匠1 小时前
力扣-电话号码组合
java·算法
狗头实习生1 小时前
电话号码字母组合
java·算法·leetcode
C雨后彩虹1 小时前
矩阵扩散问题
java·数据结构·算法·华为·面试
独自破碎E1 小时前
力场重叠问题
java·开发语言·算法
free-elcmacom1 小时前
机器学习入门<5>支持向量机形象教学:寻找最安全的“三八线”,人人都能懂的算法核心
人工智能·python·算法·机器学习·支持向量机