私はMFCCを理解しています。Librosaメルフィルタバンク減少三角形
私がメルフィルタバンクを読んだのは、幅が広くピークが同じ場所にある一連の三角形である必要があります。この...
のようなしかし、私は私が手librosaを使用して、メルフィルタバンクを計算する際に...
はコード:
mel_basis = librosa.filters.mel(sr=sr, n_fft=512, n_mels=10,fmin=0, fmax=sr/2)
plt.plot(mel_basis)
私はMFCCを理解しています。Librosaメルフィルタバンク減少三角形
私がメルフィルタバンクを読んだのは、幅が広くピークが同じ場所にある一連の三角形である必要があります。この...
のようなしかし、私は私が手librosaを使用して、メルフィルタバンクを計算する際に...
はコード:
mel_basis = librosa.filters.mel(sr=sr, n_fft=512, n_mels=10,fmin=0, fmax=sr/2)
plt.plot(mel_basis)
私は今少しより多くの情報だと与えられた答えは完全に正確でないような気がしますので、私は、私は自分の質問に答えるべきだと思います。
librosa.filters.melは、形状(n_mels、n_fft/2 +1)の行列を返します。これは、行列の各行がメルであることを意味します。列はメルフィルタバンクの各周波数の重みです。周波数はn_fftまでのサイクル数であり、エイリアシング(ナイキスト定理)のためにそれらの半分を捨てます。
これは、正しくmelsをプロットするためには、行列を転置する必要があることを意味します。私たちが効果的にN個の異なるプロットを望むとき、Nはmelsの数です。
plt.plot(mel.T)
これは、次の画像を与える:メルフィルタバンクのこのセットが期待されているものはまだないことを
注意を。これは、Librosaが正規化されたバージョンのメルフィルタバンクを使用しているためです。これは、各melsが従来の等高1ではなく1の面積を持つことを意味します。librosaから返された行列は、
mels /= np.max(mels, axis=-1)[:, None]
あなたがしています周波数ベクトルが存在しない場合、各フィルタはnftt/2 + 1サンプルを有するので、メル基底は、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()
あなたが別のプロットオプションを希望する場合のためのループである可能性があります。
for i in range(n):
plt.plot(f,mel_basis[i])
plt.show()