我有一个WAV文件,我想在频率域中对其进行可视化。接下来,我想编写一个简单的脚本,该脚本接收一个WAV文件并输出是否某个特定频率"F"上的能量超过阈值"Z"(即该WAV文件是否具有强烈的音调存在)。网上有很多代码片段展示如何在Python中绘制FFT谱,但我不理解其中很多步骤。
- 我知道wavfile.read(myfile)返回采样率(fs)和数据数组(data),但当我对其运行FFT(y = numpy.fft.fft(data))时,y的单位是什么?
为了获取x轴的频率数组,一些帖子做了这个操作,其中n = len(data):
X = numpy.linspace(0.0, 1.0 /(2.0 * T),n / 2)
而其他人则这样做:
X = numpy.fft.fftfreq(n) * fs)[range(n/2)]
这两种方法之间有区别吗?是否有好的在线说明文档解释它们的概念?
- 一些关于FFT的在线教程提到了窗口函数,但是很少有帖子在其代码片段中使用窗口函数。我知道numpy有一个numpy.hamming(N)函数,但是我应该以什么作为该函数的输入,并如何将其输出窗口“应用”于我的FFT数组?
- 对于我的阈值计算,是否正确查找X中最接近所需音调/频率的频率,并检查Y中相应元素(相同索引)的幅度是否大于阈值?