1. 程式人生 > >librosa包進行mfcc特徵提取

librosa包進行mfcc特徵提取

Python中有很多現成的包可以直接拿來使用,本篇部落格主要介紹一下librosa包中mfcc特徵函式的使用。

1、電腦環境

電腦環境:Windows 10 教育版

Python:python3.6

2、需要了解的知識

3、librosa.feature.mfcc的介紹

librosa.feature.mfcc(y=None, sr=22050, S=None, n_mfcc=20, dct_type=2, norm='ortho', **kwargs)
  • 1

引數:

y:np.ndarray [shape=(n,)] 或 None 音訊時間序列

sr:number > 0 [scalar] y的取樣率

S:np.ndarray [shape=(d, t)] or None 對數功能梅爾譜圖

n_mfcc: int > 0 [scalar] 要返回的MFCC數量

dct_type:None, or {1, 2, 3} 離散餘弦變換(DCT)型別。預設情況下,使用DCT型別2。

norm:None or ‘ortho’ 規範。如果dct_type為2或3,則設定norm =’ortho’使用正交DCT基礎。 標準化不支援dct_type = 1。

kwargs:額外的關鍵引數 引數melspectrogram,如果按時間序列輸入操作

返回: M:np.ndarray [shape=(n_mfcc, t)] MFCC序列

4、librosa.feature.mfcc的使用

import librosa
y, sr = librosa.load('i1.wav',sr=None)
mfccs = librosa.feature.mfcc(y=y, sr=sr,n_mfcc=24)
  • 1
  • 2
  • 3

librosa.feature.mfcc這個函式內部是這樣的:

# -- Mel spectrogram and MFCCs -- #
def mfcc(y=None, sr=22050, S=None, n_mfcc=20, **kwargs):
    if S is None:
        S = logamplitude(melspectrogram(y=y, sr=sr, **kwargs))

    return
np.dot(filters.dct(n_mfcc, S.shape[0]), S)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

可以看出,如果只給定原始的時域訊號(即S引數為None),librosa會先通過melspectrogram()函式先提取時域訊號y的梅爾頻譜,存放到S中,再通過filters.dct()函式做dct變換得到y的梅爾倒譜系數。