我需要写一个脚本,必须检测频率,并找到一个特定的,如果它包含在信号中。问题是,在使用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算法的实现,但它需要很长时间。有没有快速简单的方法来解决我的问题?
提前谢谢你
发布于 2020-03-20 16:44:04
根据我对np.fft.fftfreq命令的理解,它只返回频率段的频率向量,而不返回信号的快速傅立叶变换。
为了找到信号中的频率,你必须做fft,然后搜索例如向量中的最大值,然后计算返回的频率,也就是说。或者你知道在向量中的位置,然后你可以在res向量中查找频率。
因为fftfreq不计算fft,所以比计算Goertzel算法要快得多。
https://stackoverflow.com/questions/60762958
复制相似问题