我需要编写一个脚本,该脚本必须检测频率并找到信号中包含的特定频率。问题在于,使用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)
在研究中,我可以看到很多“额外”频率。主要任务是检测那里是否存在特定频率。例如21487 Hz。我还发现了Goertzel算法的实现,但是要花很多时间。有没有快速简单的方法来解决我的问题?
提前谢谢您
据我所知np.fft.fftfreq命令,它仅返回频率段的频率矢量,而不返回信号的fft。
要在信号中找到一个频率,您必须先进行fft,然后在矢量中搜索最大值,然后计算出实际的反向频率。或者,您也可以知道向量中的位置,然后可以在res向量中查找频率。
因为fftfreq不计算fft,所以它比计算Goertzel算法要快得多。