为什么Librosa中的图形不同?

4
我目前正在尝试使用librosa进行stfft,使参数类似于来自不同框架(Kaldi)的stfft过程。
音频文件是fash-b-an251 Kaldi使用采样频率为16 KHz,窗口大小为400(25ms),跳跃长度为160(10ms)。
从中提取的频谱图如下所示: enter image description here 然后我尝试使用librosa做同样的事情:
import numpy as np
import sys
import librosa
import os
import scipy
import matplotlib.pyplot as plt
from matplotlib import cm


#   Input parameter
#   relative_path_to_file


if len(sys.argv) < 1:
    print "Missing Arguments!"
    print "python spectogram_librosa.py path_to_audio_file"
    sys.exit()

path = sys.argv[1]
abs_path = os.path.abspath(path)
spectogram_dnn = "/home/user/dnn/spectogram"

if not os.path.exists(spectogram_dnn):
    print "spectogram_dnn folder didn't exist!"
    os.makedirs(spectogram_dnn)
    print "Created!"

y,sr = librosa.load(abs_path,sr=16000)
D = librosa.logamplitude(np.abs(librosa.core.stft(y, win_length=400, hop_length=160, window=scipy.signal.hanning,center=False)), ref_power=np.max)
librosa.display.specshow(D,sr=16000,hop_length=160, x_axis='time', y_axis='log', cmap=cm.jet)
plt.colorbar(format='%+2.0f dB')
plt.title('Log power spectrogram')
plt.show()
raw_input()
sys.exit()

这基本上是从这里获取的:

我已经修改了stfft函数以适应我的参数.. 问题是它创建了完全不同的图表..

enter image description here

那么,我在librosa中做错了什么?为什么这个图与在kaldi中创建的图相差如此之大。

我是不是漏掉了什么?


4
似乎你使用的绘制音谱图的Librosa代码是在对数频率尺度上绘制频率的(请注意librosa.display.specshow()调用中的y_axis='log'参数),而其他音谱图则在线性频率尺度上绘制频率。 - SleuthEye
这正是情况! - I am not Fat
1个回答

1

这与赫兹刻度有关。第一张图片中的刻度是线性的,而第二张图片中的刻度是对数的。您可以通过将任一图像中的刻度更改为与另一图像匹配来修复它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接