估计正弦波的波长

信息处理 fft 频谱
2022-01-31 22:25:10

我有一个嵌入噪声的正弦信号,我想估计它的幅度和频率,所以我可以把它减去。

我意识到 FFT 可以为我完成这项工作,这就是我一直在做的 - 我对输入信号进行了 FFT,并查看了具有最高幅度的频率仓,将其用作频率的估计波,然后减去它。

但问题是频率只能精确到半个 bin,并且 bin 大小可能相当大(因为我的样本大小通常约为 100 个点),因此波长误差很大。一旦我减去,这会留下相当大的残差。

所以作为第二步,我使用来自 FFT 的频率作为估计值,并使用 Levenberg-Marquardt 算法来拟合频率、相位和幅度。这个解决方案对于我生成的玩具数据非常有效,但由于噪音,它在真实数据上经常失败。噪声的幅度可以(最多)与信号的幅度一样大。

我认为我可以使用自相关来估计波长,但我不确定在多个频率分量的情况下如何解释结果。

问题:有什么方法可以估算不是 FFT 的波的波长?我认为由于频率拟合因噪声而失败,我可以尝试拟合波长,但欢迎任何其他建议!

注意:我在执行 FFT 时并没有真正尝试用零填充,因为如果我这样做的话,噪声似乎会在傅立叶平面上上升,但我会尝试并在此处报告成功。

1个回答

首先要注意的是,LMA 算法是一个估计器,并试图在最小二乘意义上最小化您的数据和可变参数的模型函数之间的误差。

典型的基于 LSE 的频率估计器,您需要在接近成本函数的全局最小值的值上播种它们,否则它们会找到另一个局部最小值来锁定,因此它们需要正确播种,或者“在球中” park',表面上使用一些先验信息。如何获得这个先验信息?见下文。

这个解决方案对于我生成的玩具数据非常有效,但由于噪音,它在真实数据上经常失败。噪声的幅度可以(最多)与信号的幅度一样大。

LMA 将为您提供 LS 意义上的幅度、相位和频率估计。当然,数据中的噪音越多,这个估计值就越差。这就是为什么您需要在应用 LMA之前对数据进行预处理以尽可能多地去除噪声。

您提到零填充数据,虽然这不会增加您的频率分辨率,但这肯定会增加您的频率粒度。(频域内插)。有了这些事实,我将尝试以下解决方案:

  • 通过以我感兴趣的频率为中心的 (FIR) 带通滤波器对数据进行预处理。
  • 执行零填充 FFT 以确定 BPF 数据频带内感兴趣的峰值频率。
  • 从这个峰值,确定频率、幅度和相位,用于播种 LMA。(注意,确保移除 BPF 滤波器为种子值添加的相位偏移)。
  • 运行 LMA。

我猜你的意思是扔掉最高频率的成分等?在那种情况下,我的噪音统计数据会很重要吗?我可以假设它是高斯的,但这可能并非在所有情况下都严格正确

在这种情况下,噪声的统计数据无关紧要。您所做的只是去除存在噪声的频带,而与它们的统计数据无关。通过这种方式,您不会使用不存在信号的 DFT 频段,并保留存在信号的 DFT 频段。