在.wav文件的窗口上计算功率谱图

时间:2016-04-08 16:48:36

标签: python python-2.7 python-3.x signal-processing

我正在尝试计算声音文件的一部分的功率谱图。 目前我正在使用librosa

我用20 * 1e-3 * samplerate计算我的windowsize。 我想知道的是结果(特别是t的长度),如下例所示:

44.1kHz的采样率与20ms的时间帧相结合,产生了882个样本的窗口。

In [2]: D = np.abs(librosa.stft(y[:882]))**2

In [3]: np.shape(D)
Out[4]: (1025, 2)

我得到的是我的结果中的2ms时间帧,这不是我的预期。有人可以帮助我/指出我做错了吗?

1 个答案:

答案 0 :(得分:3)

默认情况下librosa.stft使用2048的FFT大小n_fft,输出的第一维与实际输入信号的非冗余频率分量数相匹配(1+n_fft/2,在这种情况下1025)。

第二个维度由时间片的数量决定,我认为这是你有点困惑的地方,期待你的882个样本的单个时间片。但是librosa.stft计算重叠时间片的输出。默认情况下,每个切片使用的样本数设置为win_length / 4,因为您没有指定win_length,所以设置为n_fft / 4或512.充分利用你的882个样本(以及根据需要填充),这给你两片:

  • 一个样品0至2047;
  • 另一个用于样本512到881,并添加零填充。

如果您不想重叠,可以将hop_length参数设置为与n_fft匹配。