MFCC(Mel-Frequency Cepstral Coefficients,梅爾頻率倒譜系數)是音訊訊號處理中的一種重要特徵,用於捕捉音訊訊號的頻譜特徵。MFCC廣泛應用於語音識別、音樂資訊檢索、聲紋識別等領域。以下是MFCC的詳細講解:
1. 背景
人耳對不同頻率的聲音感知是非線性的,特別是對高頻聲音的敏感度較低。梅爾頻率標度(Mel scale)是一種模擬人耳感知的頻率標度。MFCC正是基於這種標度來進行音訊訊號的特徵提取。
2. 計算步驟
預加重 (Pre-emphasis):
透過一個高通濾波器增加高頻部分的能量,通常使用以下濾波器:
y[n]=x[n]−αx[n−1]
其中,
α 通常取值為0.97。
分幀 (Framing):
將音訊訊號分成多個小段(幀),每幀通常包含20到40毫秒的資料。相鄰幀之間通常有一定的重疊(通常為50%)。
加窗 (Windowing):
對每一幀訊號應用一個窗函式(通常是Hamming窗)以減少頻譜洩露。
y[n]=x[n]⋅w[n]
其中,
w[n] 是窗函式。
快速傅立葉變換 (FFT):
對加窗後的訊號進行FFT,得到每一幀的頻譜。
功率譜 (Power Spectrum):
計算每一幀的功率譜:
其中,
X[k] 是FFT的結果,
N 是FFT的點數。
梅爾濾波器組 (Mel Filter Bank):
將頻譜對映到梅爾頻率標度,並透過一組三角形濾波器對頻譜進行加權平均。梅爾頻率和普通頻率 f 的關係為:
對數壓縮 (Log Compression):
對濾波器組輸出的每個值取對數,以模擬人耳對聲音強度的感知。
離散餘弦變換 (DCT):
對對數梅爾頻譜進行DCT,得到梅爾頻率倒譜系數(MFCC)。DCT的目的是將頻譜壓縮到更少的係數,並去除相關性。
保留低階係數:
通常保留前12到13個係數,因為低階係數包含了主要的頻譜資訊,高階係數往往與噪聲有關。
3. 應用
語音識別:MFCC是語音識別系統中的常用特徵,因為它能夠有效捕捉語音訊號中的重要資訊。
音樂資訊檢索:MFCC可以用於音樂分類、情感識別等任務。
聲紋識別:MFCC可用於使用者身份驗證和安全系統中。
4. 優點與缺點
優點:
模擬人耳的聽覺特性,使得特徵更具代表性。
計算過程高效,能夠實時應用。
缺點:
對噪聲較為敏感,需要額外的預處理步驟。
對非語音訊號(如背景音樂)的處理效果較差。
5. 程式碼示例 (Python)
使用庫librosa來計算MFCC:
import librosa
import numpy as np
# 載入音訊檔案
y, sr = librosa.load('audio.wav', sr=None)
# 計算MFCC
mfccs = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=13)
# 列印MFCC的形狀
print(mfccs.shape)
# 視覺化MFCC
import matplotlib.pyplot as plt
import librosa.display
plt.figure(figsize=(10, 6))
librosa.display.specshow(mfccs, x_axis='time')
plt.colorbar()
plt.title('MFCC')
plt.tight_layout()
plt.show()
總結
MFCC是音訊訊號處理中的一種關鍵特徵,能夠有效捕捉頻譜資訊並模擬人耳的聽覺特性。透過一系列的訊號處理步驟,MFCC可以將複雜的音訊訊號轉換為易於處理的特徵向量,在語音識別、音樂資訊檢索等領域具有廣泛的應用。