我正在尝试对流音频数据进行快速频谱分析以捕获元音(类似于 JLip-sync)。使用 PyAudio 在短时间内(0.0625 秒)捕获小块 (1024) 的语音数据。使用 numpy.fft 进行分析,并使用 numpy.hanning 窗口消除泄漏。我使用 4096*4 作为采样率(不是 44100 或 22050,也可以讨论;4096*4 最接近 22050)。
考虑到我感兴趣的频率(范围从 300 Hz 到 3000Hz),如何使用我正在寻找的数据长度和最小/最大频率来计算理想的窗口大小?
Thanks.
Kadir
@Kadir:
在使用离散傅里叶变换(DFT 或 FFT)处理数据之前对其进行加窗的目的是最大限度地减少频谱泄漏,这种情况在您尝试对非循环数据进行傅里叶变换时会发生。
窗口化的工作原理是在序列的开始和结束时强制数据平滑为零,但不是之前。缩短窗口会不必要地破坏信息。
因此,您的窗口长度应该与样本序列的长度相匹配。例如,对于 1024 个样本,窗口长度应为 1024。
如果您要解析的最高频率是 3 KHz,请在不同的采样率下使用 8192 个样本或更多样本,例如 16384 或 32768 个样本。
另外,尝试不同的FFT算法、不同的样本长度和不同的窗口,包括Hann(汉宁),还有其他旁瓣衰减更好的窗口,例如Blackman-Harris系列和Kaiser-Bessel系列等。
如果您的应用存在噪声,您可能必须在更好的噪声抑制窗口和更高的光谱分辨率窗口之间进行选择。因此,尝试不同的窗口是个好主意,这样您就可以找到最适合您的应用程序的窗口。
现在,写下每个设置的结果(即每个窗口、样本长度、采样率等),并寻找在多个设置中一致的结果。您将了解更多有关您的数据的信息,并且很可能找到问题的答案。
您可以使用 Matlab 来完成此操作:http://www.mathworks.com/help/techdoc/ref/fft.html http://www.mathworks.com/help/techdoc/ref/fft.html
或者使用此在线 FFT 频谱分析仪:http://www.sooeet.com/math/fft.php http://www.sooeet.com/math/fft.php
并且不要忘记在这里发布您的结果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)