OFDM 频偏补偿和相位跟踪(2)

要进行频偏补偿和相位补偿,需要实现的算法:

频偏补偿部分:

对于Rx(i)l *conj(H(i))是由信道估计和均衡给过来的关于导频的补偿值;

公式主要实现指数部分;

β:估计出来的相位提增量或者频偏;

对频偏进行补偿的过程:(不对导频信道补偿)

相位跟踪部分:

θj:是每个子载波的相位旋转量,所以会涉及到累加的过程;

Kj:-26:26信道;

sm:通过求取该值,估算每个子载波的相位旋转量;

j:导频信道标号;(-21,-7,7,21)

sm化简后,近似等于:

公式里面 θj 的计算:(导频信道的相位旋转量,j为导频信道号,angle通过cordic ip 求actan)

Rx(i)l *conj(H(i))是导频经信道估计和均衡后的值;

得到sm,就可以求取用于非导频信道估计的相位旋转量;

补偿旋转量公式:

合并补偿频偏和相位 :

关于e^-j:因为实现的是e^j,所以需要进行取反加1,再给到 DDS IP 进行相位的累加运算;

l 是ofdm 符号编号,i=j 是信道编号取值不包含导频信道(-21 ;-7; 7; 21)

框图:

首先需要通过FIFO 剔除导频,在对应导频计数位置,拉低FIFO的 写使能即可,将信道估计补偿后的数据写入FIFO;写入FIFO 的数据将在最后与计算完成的频偏补偿序列进行复数的乘法运算,完成对非导频的信道进行频偏和相位的补偿;

需要去掉扰码序列,然后做相位估计;

如果不去掉,导频序列所得到的相位信息存在问题,不能进行相位估计;

根据导频位置,去掉导频中的绕码;每个OFDM符号来临,绕码序列 S 会进行移位一次;

根据绕码序列,对信道估计补偿后的导频数据进行去绕码;

四个导频序列的初始值为[1 1 1 -1] = [0 0 0 1];0为正1为负;负数进行取反加1,正数保持不变;后续要利用去绕码后的导频序列计算频偏补偿;

求四个导频序列的平均值,通过cordic IP 可以将导频值转换为相位值,再利用计数器对cordic的计算结果进行求和,再求平均;

因为有4个导频信道,所以从cordic ip计算会输出4个导频的角度值,所以需要求平均,利用计数器,将4个导频信道的结果累加求平均;

涉及FIX32_29 到 FIX34_29 的转换:

符号数求4个导频的平均值:(有符号数运算是 >>> ,无符号数 >>)

这里的 avg_phase_beta 就对应了下面的公式;

因为这里 Rx(i)*conj(H)这部分是信道估计补偿后的导频数据;Pri 是去绕码后的导频结果;Sl 是127个绕码序列;

Pri * Sl 是完成对信道估计补偿后的导频数据进行去绕码;

i:是导频信道标号;

l:是ofdm符号标号;

下面计算sm:(公式中的θ 1234就对应了4个导频值,即phase_1 2 3 4)

非导频信道的旋转量估计公式:

先求 -26*sm,后面就累加sm,就可以完成以上公式的计算;

根据公式:

这是是 θj + βl ;即 -26 信道的补偿量,这里的相位补偿量就来源于去绕码后的导频序列;

因为没有去导频的时候是52个信道,去掉后为48;

进行相位累加时,需要对4个导频和1个零频的位置进行相位补偿,

也就是需要加 2*sm ,其余信道位置加 sm即可;

因为 cordic ip 输出的是弧度值,需要归一化,利用复数乘法器;

其目的是将弧度值转换到 DDS 的地址上去;

通过DDS 进行相位累加;

涉及到定点数的转换:

fix40_29--->fix32_21; 截断了小数位低8位

INA fix32_21 =-pi~pi ;

DDS 的相位就是从0开始递增到某一个数;

2^12 dds lut addr=0~2047 = pi ~ -pi ,整个空间为2π;

INB fix32_21 = (1/(2*pi))*2^21,将 -pi ~ pi 的空间映射到了0~2047上面,体现在小数部分;

OUTC fix64_42 =2^42 ~ 0 = -pi ~ pi,取小数位的高12位,作为DDS 的地址;

因为目前得到的是( θj + βl),根据公式补偿值是 e^-j,所以值要进行转换,再给到DDS IP 进行相位累加,得到频偏补偿序列;

根据得到的频偏补偿序列与信道估计补偿后的 I Q 值(在开始就去掉导频后写入FIFO缓存的数据)进行复数乘法,就可以得到补偿后的信号域和数据域的OFDM符号数据;

因为数据结构为一个OFDM符号的信号域加数据域(OFDM符号可变);

所以先输出的是一个OFDM符号长度的信号域,在信号域之后就是数据域的OFDM符号;

利用 comp_mult_out_valid 打一拍,取下降沿,就可以得到数据域的输出valid 信号;

而 comp_mult_out_valid 可以直接作为信号域输出valid 信号,但只会持续一个OFDM;

判断进行输出数据域和信号域的数据:

Cordic IP 配置:

复数乘法器,这里配置输出位宽32,是指将两个相乘的因子实部和虚部都去掉了一位,截断的是小数位最低位;得到结果为64位;

星座图打印结果:

相关推荐
SHOJYS1 小时前
思维难度较大 贪心优化背包 [USACO22DEC] Bribing Friends G
数据结构·算法·深度优先
啊董dong1 小时前
课后作业-2025年12月07号作业
数据结构·c++·算法·深度优先·noi
无限进步_2 小时前
C语言宏的魔法:探索offsetof与位交换的奇妙世界
c语言·开发语言·windows·后端·算法·visual studio
Lucky“经营分析”2 小时前
经营分析师-《经营分析能力》
算法
狐572 小时前
2025-12-04-LeetCode刷题笔记-2211-统计道路上的碰撞次数
笔记·算法·leetcode
listhi5202 小时前
激光雷达点云拟合中的ICP(迭代最近点)算法
算法
持续学习的程序员+12 小时前
强化学习阶段性总结
人工智能·算法
爱装代码的小瓶子3 小时前
【cpp知识铺子】map与set的底层AVL树
开发语言·数据结构·c++·b树·算法·链表
IT·小灰灰3 小时前
腾讯HY2.0 Think推理模型深度解析:技术突破、应用场景与实践指南
开发语言·人工智能·python·深度学习·神经网络·算法·数据分析