我正在尝试在Qt中为声音数据绘制适当的声谱图。现在,我可以绘制一个具有fft窗口长度1024和重叠数据长度976的漂亮的频谱图。但是通常使用较小的窗口长度来绘制诸如256的频谱图,这将为我提供更好的时间分辨率。但是,当我将窗口长度减小到256时,频谱图中会出现空行。我知道减小窗口长度会导致FFT的低频分辨率降低,但是为什么其他程序的频谱图中没有空行。我是在做错事还是正常结果?

这是我用来获取频谱图的主要步骤:
-从声音文件中获取数据。
-在第一个窗口上进行FFT(汉宁)。
-将复数fft输出转换为幅度数组(幅度= sqrt(re ^ 2 + im ^ 2))
-将幅度转换为对数刻度(dB)幅度dB = 20 * log10(幅度)
-通过缩放光谱数据以将其固定到列中来绘制频谱图的第一列
-移动窗口48个样本,以进行下一个操作。

您可以在以下屏幕截图中看到问题:
window length 1024
window length 256

(我的目标是制作一个可以从语​​音数据中识别音素的程序。使用FFTW库)

我非常感谢您可以提供的任何帮助。

最佳答案

较短的FFT长度的较低分辨率也意味着每个FFT结果仓的带宽较大。因此,光谱图需要较粗的行线来覆盖每一行的较宽带宽,以填充图中行之间的间隙。

关于c++ - 为什么减小窗口长度,导致频谱图中的行空?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16649464/

10-08 23:27