为什么 librosa librosa.feature.mfcc() 会吐出一个二维数组?

Why does librosa librosa.feature.mfcc() spit out a 2D array?

在音频文件上调用 librosa.feature.mfcc() 会生成一个二维数组,如下所示:

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]])

我的问题是这些是什么?因为我期待的是一维系数数组,为什么它是二维的?尺寸是多少?也许这是我对我应该得到的东西的误解,但是任何解释将不胜感激。我试着在网上看,但似乎每个人都只知道它是什么。

一个维度是时间,另一个维度是不同的频率。 link 显示了绘制它时的样子:

http://musicinformationretrieval.com/mfcc.html

我也被这个绊倒了。

查看 https://librosa.org/doc/latest/glossary.html 具体 'frame' 的措辞。

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

假设我的样本是,window 为 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]])

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