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

频偏补偿部分:
对于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位;

星座图打印结果:
