2025年6月,v2版文章发布了。之前第一版的三篇文章合并为一篇,同时增加了三个频率估计算法的讲解,这两个算法的仿真程序在下一篇。一个是利用相位差分来精确估计频率值,还有两个是Quinn算法。本文接近三千字,内容超多,请耐心看完。
先看利用相位差分计算频率的内容。这也是当年我在读研期间了解的数字信号处理方面的经典知识。
上述内容来自于Tsui的著作。再来看看Rife算法和Quinn算法。
Rife算法的核心思想是利用DFT频谱中最大谱线及其相邻谱线来插值估计实际频率,克服了DFT固有的栅栏效应(频谱泄漏导致的频率分辨率限制)。Rife算法的核心思想是利用DFT频谱中最大谱线及其相邻谱线来插值估计实际频率,克服了DFT固有的栅栏效应(频谱泄漏导致的频率分辨率限制)。
这段内容似乎有问题,来自于DeepSeek,有点“瞎写”的味道。再次在网上搜索该算法内容的相关文章!总结如下:Quinn算法是一种基于FFT的高精度频偏估计方法,通过改进Rife算法,在噪声环境下仍能保持较高估计精度,计算复杂度适中,适合工程应用。它通过判断信号FFT变换后的峰值位置及其相邻值的关系来计算频偏,具有比Rife算法更高的估计精度。Quinn算法的计算复杂度略高,需要4次除法运算,但绝对计算量仍在工程可接受范围内。在存在噪声的情况下(SNR较低时,可以通过仿真来观察估计效果),Quinn算法仍能保持较高的频偏估计精度,适用于实际信号处理场景。该算法主要用于基于FFT的频率偏移估计领域。下一篇文章会给出这两种算法的相关仿真程序。互联网上写文章一定要追求准确性,如果给出不合理的解释,将会误导读者。很多在校学生很难分辨出真与假的,或者要花很长的时间才能分辨出来。一个能确保内容正确的公众 号此时就显得难能可贵,况且已经持续写了十年,纯属自我表扬,莫见怪。
频谱的真实分辨率是由信号的长度来决定的!不过计算频率值的时候也有些技巧哦!比如补0!什么是补0?如何补0?补0能带来什么好处呢?
补零好处有二。其一是,可使数据点数为2的整次幂,以便使用FFT。其二,对原数据起到了做插值的作用,一方面克服“栏栅”效应,使谱的外观平滑,另一方面,由于对数据截短时引起的频域泄漏,有可能在频谱中出现一些难以确认的谱峰。
在工程上,经过通过补零来完成FFT的运算。用GPS信号捕获的工程实现作为例子进行讲解!在GPS信号捕获过程中,使用FFT(快速傅里叶变换)进行相关运算时,补零(Zero-Padding)是一个关键步骤。
GPS接收机需要捕获卫星信号(如C/A码),其核心是计算接收信号与本地伪码的循环互相关。由于时域相关运算计算量大,工程上通常采用以下频域方法:
对接收信号(长度)和本地伪码(长度,通常M≤N)分别做FFT。
将本地伪码的FFT结果取共轭后与接收信号的FFT结果相乘。
对乘积结果做IFFT,找到时域相关峰。
那么问题就来了。若直接对长度不等的信号做FFT(比如N=1024,M=1023),会导致周期循环时数据错位,无法 正确计算线性相关。此时需要补零。
操作:将本地伪码补零至与接收信号相同长度(例如补1个零到1024点)。
目的:使两者FFT长度一致,满足频域相乘的条件。
数学原理:FFT要求输入长度相同才能逐点相乘。补零不会改变本地伪码的频谱信息,但扩展了其时域长度。
看看老师写的程序吧!单纯在信号后面加入不同长度的0,看看在频域带来哪些变化?