2016-10-22 48 views

回答

0

我有點現在更明智,我覺得給出的答案是不完全正確的,所以我想我應該回答我的問題。

librosa.filters.mel返回形狀爲(n_mels,n_fft/2 +1)的矩陣。這意味着矩陣中的每一行都是一個mel。這些列是梅爾濾波器組的每個頻率的權重。頻率以循環次數n_fft爲單位,由於混疊(nyquist定理),我們丟棄其中的一半。

這意味着爲了正確繪製墨水,矩陣需要轉置。因爲我們有效地需要N個不同的地塊,其中N是單位數量。

plt.plot(mel.T)

這給下面的圖片: enter image description here

需要注意的是這一套梅爾濾波器的銀行仍然沒有什麼預期。這是因爲Librosa使用歸一化版本的mel濾波器組,這意味着每個mels的面積都是1,而不是傳統的相等高度1.從librosa返回的矩陣可以轉換爲相等高度的mel-濾波器組方式:

mels /= np.max(mels, axis=-1)[:, None]

然後劇情是這樣的:enter image description here

0

你缺少freq向量,每個過濾器都有nftt/2 +1個樣本,所以mel基礎是librosa中的n_mels x(nfft/2 +1)的矩陣。

爲了計算MFCC,您必須獲得成幀信號的功率譜,稍後再將其與濾波器組相乘。

import numpy.matlib 

sr = 22050 
n_fft = 512 
n = 10 
mel_basis = librosa.filters.mel(sr=sr, n_fft=n_fft, n_mels=n,fmin=0, fmax=sr/2) 
f = np.linspace(0,sr/2,(n_fft/2)+1) 
f_all = np.matlib.repmat(f, n,1) 
plt.plot(f_all,mel_basis) 
plt.show() 

Librosa Mfcc Filter bank

如果你喜歡別的繪製選擇可以是一個for循環。

for i in range(n): 
    plt.plot(f,mel_basis[i]) 
    plt.show() 

Mfcc librosa