窗口大小与FFT的数据长度

Kad*_*len 3 size audio window fft

我正在尝试对流式音频数据进行快速频谱分析以捕获元音(类似于JLip-sync).使用PyAudio以小块(1024)捕获语音数据的持续时间很短(0.0625秒).使用numpy.fft进行分析,并使用numpy.hanning窗口消除泄漏.我使用4096*4作为采样率(不是44100或22050,也可以讨论; 4096*4最接近22050).

考虑到我感兴趣的频率(范围从300 Hz到3000Hz),如何使用我想要的数据长度和最小/最大频率计算理想窗口大小?

谢谢.

卡迪尔

Pau*_*l R 6

关键因素是在频域中需要多少分辨率来区分不同的元音。分辨率是1 / T,其中T是 FFT 窗口的持续时间。因此,如果您的采样时间为 62.5 毫秒,那么如果您的 FFT 与您的采样间隔(1024 个样本)的大小相同,那么您的最大分辨率为 16 Hz(即每个 FFT bin 的宽度为 16 Hz)。如果您使用较小的 FFT,那么显然您的分辨率会成比例地变差,例如 512 点 FFT 的分辨率仅为 32 Hz。


小智 6

@Kadir:

在使用离散傅里叶变换(DFT或FFT)处理数据之前对数据进行窗口化的目的是最大限度地减少频谱泄漏,当您尝试对非周期性数据进行傅里叶变换时会发生这种情况.

窗口化的工作方式是将数据在序列的开始和结束时平滑地强制为零,但不是之前.缩短窗口会不必要地破坏信息.

因此,您的窗口长度应与样本序列的长度相匹配.例如,对于1024个样本,您的窗口长度应为1024.

如果要分辨的最高频率为3 KHz,请以不同的采样率使用8192个样本或更多样本,例如16384或32768个样本.

此外,尝试不同的FFT算法,不同的采样长度和不同的窗口,包括Hann(Hanning),还有其他具有更好旁瓣衰减的窗口,例如Blackman-Harris系列和Kaiser-Bessel系列等.

如果您的应用程序有噪音,您可能需要在更好的噪音抑制窗口和更高的光谱分辨率窗口之间进行选择.因此,尝试不同的窗口是个好主意,因此您可以找到适合您应用的最佳窗口.

现在,使用每个设置(即每个窗口,样本长度,采样率等)记下您的结果,并查找在多个设置中一致的结果.您将了解有关数据的更多信息,并且很可能找到问题的答案.

您可以使用Matlab执行此操作:http: //www.mathworks.com/help/techdoc/ref/fft.html

或者使用这个在线FFT频谱分析仪:http: //www.sooeet.com/math/fft.php

别忘了在这里发布您的结果.