为什么 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 显示了绘制它时的样子:
我也被这个绊倒了。
查看 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]])
初学者:这是做什么用的?想象矩阵(阵列)被打印在一块透明塑料上,然后抓住左下角并将页面翻转过来,将左下角移动到右上角。
在音频文件上调用 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 显示了绘制它时的样子:
我也被这个绊倒了。
查看 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]])
初学者:这是做什么用的?想象矩阵(阵列)被打印在一块透明塑料上,然后抓住左下角并将页面翻转过来,将左下角移动到右上角。