为什么librosa librosa.feature.mfcc()吐出2D数组?

时间:2016-03-23 15:46:01

标签: python mfcc

在音频文件上调用librosa.feature.mfcc()会像这样吐出一个2D数组:

array([[ -5.229e+02,  -4.944e+02, ...,  -5.229e+02,  -5.229e+02],
   [  7.105e-15,   3.787e+01, ...,  -7.105e-15,  -7.105e-15],
   ...,
   [  1.066e-14,  -7.500e+00, ...,   1.421e-14,   1.421e-14],
   [  3.109e-14,  -5.058e+00, ...,   2.931e-14,   2.931e-14]])

我的问题是这些是什么?因为我期待一维系数的数组,为什么它是2D?什么尺寸?也许这是我对我应该回来的误解,但是任何解释都会受到赞赏。我尝试在网上看,但似乎每个人都知道它是什么。

2 个答案:

答案 0 :(得分:3)

我也绊倒了这个。

专门查看https://librosa.github.io/librosa/glossary.html“框架”的措辞。

你通常会想象一系列样本在x轴上从左到右 - 但请注意它在librosa中被称为'y'。

假设我的样本是2,窗口大小为1:

[1,2,3,4,5]

当我期待以下内容时:

array([[1, 2],
       [2, 3],
       [3, 4],
       [4, 5]])

librosa实际上给了我的是:

array([[1, 2, 3, 4],
       [2, 3, 4, 5]])

这似乎是由于方便了librosa喜欢显示/抛出数据的方式。

使用你脑子里常用的简单方法是转换 np.array

mfccs = librosa.feature.mfcc(np.array([1,2,3,4,5]))
# The mfccs exists down the columns, not across each row!

array([[-353.18529412],
       [  -9.92147635],
       [   1.39044844],
       [  19.76460942],
       [  25.52789074],
       [ -18.65229483],
       [  17.41164986],
       [  32.40858638],
       [ -13.52776281],
       [   8.38747316],
       [  23.82210792],
       [  16.50381765],
       [ -23.39931177],
       [  40.04480991],
       [   7.76233177],
       [  -2.54971281],
       [   4.81715362],
       [  36.80008536],
       [  -9.8943455 ],
       [  -0.57583487]])

mfccs.T
# Now mffcs[0] (the first row) refers to the first mfcc!

array([[-353.18529412,   -9.92147635,    1.39044844,   19.76460942,
          25.52789074,  -18.65229483,   17.41164986,   32.40858638,
         -13.52776281,    8.38747316,   23.82210792,   16.50381765,
         -23.39931177,   40.04480991,    7.76233177,   -2.54971281,
           4.81715362,   36.80008536,   -9.8943455 ,   -0.57583487]])

初学者 :这是做什么用的?想象一下矩阵(阵列)印在一块透明塑料上,然后抓住左下角翻转页面,将左下角移动到右上角。

答案 1 :(得分:1)

一个维度是时间,另一个维度是不同的频率。此链接显示了绘制它的外观:

http://musicinformationretrieval.com/mfcc.html