【发布时间】:2020-03-19 18:18:02
【问题描述】:
我需要编写一个脚本,它必须检测频率并找到一个特定的频率(如果它包含在信号中)。问题是我在使用 FFT 后得到了大量不同的频率,并且没有应该的频率。例如,如果我只是发送简单的 440 Hz,找到峰值并打印相应的频率,效果很好。但是如果我发送带有其他噪声的高频信号,它就不起作用了。这个案例对我来说更有趣。
我在做什么:
from scipy.io import wavfile
import numpy as np
from numpy import fft
fs, data = wavfile.read('./signal.wav')
frs = np.fft.fftfreq(len(data))
res = abs(frs*fs)
在 res 中,我可以看到很多“额外”频率。主要任务是检测是否存在特定频率。例如,21487 赫兹。我还找到了 Goertzel 算法的实现,但它需要很多时间。有没有快速简单的方法来解决我的问题?
提前谢谢你
【问题讨论】:
-
“大量不同频率”是由噪声造成的。检查波形文件是否真的包含那个高频率。如果 f0 由于抗混叠过滤而接近 Fs/2,则可能不会。
-
好吧,为了检查它,我生成了高频信号并使用了显示捕获频率的移动应用程序。我发送的频率是 15342 Hz。
-
等效实现的 Goertzel 算法比 FFT 更快。
标签: python audio fft frequency