为啥 librosa 中的情节不同?

Posted

技术标签:

【中文标题】为啥 librosa 中的情节不同?【英文标题】:Why is the plot in librosa different?为什么 librosa 中的情节不同? 【发布时间】:2017-01-13 16:44:58 【问题描述】:

我目前正在尝试使用 librosa 执行 stfft,以使参数类似于来自不同框架 (Kaldi) 的 stfft 进程。

音频文件为fash-b-an251

Kaldi 使用 16 KHz 的采样频率,window_size = 400 (25ms),hop_length=160 (10ms)。

从中提取的频谱图如下所示:

然后我尝试使用 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()

基本取自here:

我在其中修改了 stfft 函数,使其适合我的参数.. 问题在于,它创建了一个完全不同的情节..

所以.. 我在 librosa 中做错了什么?.. 为什么这个情节与 kaldi 中的情节如此不同。

我错过了什么吗?

【问题讨论】:

看起来你用 librosa 绘制频谱图的代码在对数刻度上绘制频率(参见 librosa.display.specshow() 调用的 y_axis='log' 参数),而另一个频谱图将它绘制在线性频率范围。 原来如此!! 【参考方案1】:

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

【讨论】:

以上是关于为啥 librosa 中的情节不同?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 scipy 和 librosa 在读取 wav 文件时不同?

为啥情节提要 ui 元素未显示在 xcode 9 中的 UIViewController 上

iOS中的Librosa Python库集成[关闭]

如何从 librosa 中的 mel 频谱图重建 STFT 矩阵,以便重建原始音频?

iOS:不同情节提要中的 presentViewController 未显示导航栏

为啥使用情节提要在 UIScrollView 中不显示内容