在 0 Hz 处获得 FFT 结果峰值

Posted

技术标签:

【中文标题】在 0 Hz 处获得 FFT 结果峰值【英文标题】:Getting FFT result peaks at 0 Hz 【发布时间】:2020-11-14 18:09:30 【问题描述】:

我有一个音频帧,它是一个长度为 16000 的 NumPy 数组。

当我对音频帧应用 numpy FFT 时,我得到一个峰值为 0 Hz 的频谱。我从同一个音频文件中尝试了不同的音频帧,但它们似乎都有 0 Hz 的峰值。

谁能帮我理解我在哪里做错了?谢谢。

【问题讨论】:

您使用的值不是在audio_frame 音量级别吗? 是的,它是audio_frame中的音量级别。 好的,主要问题是您的音频信号有负偏移。这就解释了 0Hz 峰值。先去掉偏移,它的强度压倒所有其他的。 这能回答你的问题吗? power spectrum by numpy.fft.fft 【参考方案1】:

有大约 -0.2 的偏差,对吧?这是一个随时间变化的常数值。也就是说,与围绕该恒定值的变化相比,在 0 Hz 处存在强分量。您只需要解释结果。

解决方案:尝试从时域中的信号中减去平均值。我想,神奇地,0 Hz 分量会消失。

【讨论】:

我在规范化中做了一些奇怪的事情。当我从数组中减去平均值时它起作用了!感谢您的提示! @Akihero3:请注意,从信号中减去平均值与将 0 频率分量设置为 0 完全相同(但计算成本更高)。所以只需忽略 0 频率分量。 @CrisLuengo 谢谢,你的意思是我不应该减去和忽略 FFT 之后的第一个元素,因为从计算角度来看,这是一个更好的解决方案?另外,我仍然不明白为什么从数组中减去平均值会导致 0 频率分量为 0。你知道是否有任何资源可以帮助我理解它是如何工作的? @Akihero3:任何关于傅里叶变换的教科书都会解释这一点。这是傅里叶变换的基本属性:零频率分量的值等于输入信号的平均值(或总和,取决于归一化)。这基本上就是 0 频率分量的含义。什么是 0 Hz 的信号分量?一个常量组件。 @Leos313 是的,我在应用 FFT 之前对其进行了归一化,因为我不希望 -0.2 的恒定信号没有意义。感谢您的提示!

以上是关于在 0 Hz 处获得 FFT 结果峰值的主要内容,如果未能解决你的问题,请参考以下文章

使用 EZAudio 从 FFT 获得更精确的频率?

没有从 Exocortex FFT 获得预期的输出

通过 C 中的 FFT 将 1000Hz 噪声添加到 wav 文件

16 位音频的 fftw :: 峰值在 2f 处出现错误

了解正弦曲线的 FFT

如何获得 iOS Accelerate FFT 结果的频率幅度?