确定信号中是否包含特定频率

问题描述 投票:1回答:1

我需要编写一个脚本,该脚本必须检测频率并找到信号中包含的特定频率。问题在于,使用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算法的实现,但是要花很多时间。有没有快速简单的方法来解决我的问题?

提前谢谢您

python audio fft frequency
1个回答
0
投票

据我所知np.fft.fftfreq命令,它仅返回频率段的频率矢量,而不返回信号的fft。

要在信号中找到一个频率,您必须先进行fft,然后在矢量中搜索最大值,然后计算出实际的反向频率。或者,您也可以知道向量中的位置,然后可以在res向量中查找频率。

因为fftfreq不计算fft,所以它比计算Goertzel算法要快得多。

Description of np.fft.fftfreq

© www.soinside.com 2019 - 2024. All rights reserved.