我正在尝试计算声音文件的一部分的功率谱图。 目前我正在使用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时间帧,这不是我的预期。有人可以帮助我/指出我做错了吗?
答案 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个样本(以及根据需要填充),这给你两片:
如果您不想重叠,可以将hop_length
参数设置为与n_fft
匹配。