1、产生频偏的原因:
接收机与发射机的本振间存在一定的频率偏差,会导致接收IQ采样数据的相位旋转。理想情况下,接收端对采样的IQ数据(中心频率为fc)进行相干解调时,接收机的本振产生同频率(fc)的载波与采样信号相乘,信号相乘会产生fc+fc和fc-fc两种频率,倍频可通过LPF滤波去除。但由于接收机本振和发射机本振精度间存在差异,可能会存在一定的频偏。假设接收机本振产生的载波频率为(1+e)fc,则,(1+e)fc和fc混频后会产生(2+e)fc和efc,倍频项(2+e)fc可滤波去除,剩余的差频项efc无法滤除,会引入到基带信号中。对信号造成的影响表现在时域上:
基带信号的相位上产生额外的角度,导致星座点的旋转,造成严重的符号间串扰。因此需要估计出频偏角,并进行相位补偿。
2、如何估计频偏:
采用最大似然频偏估计算法,理想情况下,如果没有发生频偏,两个相同符号间延时相关结果为实数,由于现在基带信号中引入了efc频率分量,根据接收端采样的前后两个相同符号(长短训练序列)间作互相关,两个符号之间的延时相关公式(其中,L为单个符号的采样点数,D为两个符号采样间隔,是每个采样周期的相位旋转量):
根据上述公式得到相位旋转量后,可以通过DDS IP核生成一个反向的相位变化量的采样序列补偿到实际采样序列中。DDS信号发生器实现(DDS Compiler 6.0)_dds compiler6.0-CSDN博客
(算法局限性:因为 的取值范围为,所以算法能够估计的频偏范围有限。
3、OFDM接收频偏矫正处理:
3.1、利用短训练符号进行粗频偏矫正。
对前后采样的短训练符号(单个短训练符号采样点取16)作互相关:
FPGA处理互相关处理:首先将接收到的数据先进行延迟16个采样(双端口RAM),然后以当前输入采样点为坐标基准,调用Complex Multiplier IP核计算,最后将复数乘法IP核输出结果进行16点累加滑动平均。
3.2、利用长训练符号进行细频偏矫正。
求两个长训练符号(单个长训练符号采样点是64)的互相关:
FPGA处理互相关处理:首先将接收到的数据先进行延迟64个采样(单端口RAM),然后以当前输入的Si为坐标基准,调用Complex Multiplier IP核计算,最后将复数乘法IP核输出结果进行累加求平均。
- 数据延迟处理代码设计参考双端口ram设计,设计ram深度为延迟大小(以64为例),当ram[0]~ram[63]中写入64个数据后,第65个数据写入ram[0](下一个clkram[0]中的数据才改变)的同时将存入ram[0]中的数据读出(读出的是之前存入的数据也就是滞后当前输入64个采样点的数据)。
-
累加运算可以采用移动相加求平均的方法,参考滑动窗的概念,每次向窗口中加入一个新的数据,窗口末尾的旧数据便会移出。L为滑动窗的长度。具体公式如下(以64为例):
4、接收频偏矫正处理前后data域星座图(采用64QAM调制):
注:利用长短训练进行频偏矫正的前需要对接收数据进行包检测和符号对齐操作(后续更新),在界定出长训练符号位置后,选择合适的采样点获取长训练符号自相关计算结果,并通过调用CORDIC IP核求频偏角,进而计算频率控制字,调用DDS IP核生成载波,补偿到基带信号。
文章均是个人日常学习总结,如有理解不正确地方,欢迎指正。