在 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 结果峰值的主要内容,如果未能解决你的问题,请参考以下文章