본문 바로가기

Audio & Speech

오디오 데이터 전처리 (5) MFCC

오디오 데이터 전처리(4)에서 이어지는 마지막 5번째 글입니다. 지난 4편에서는 spectrogram에 Mel filter bank라는 filter를 통과시켜 frequency와 power를 모두 변환해주어 Mel-Spectrogram을 구했습니다. 이제 마지막으로 Discrete Cosine Transform(DCT) 과정을 거쳐 MFCC를 구하는 과정을 알아보겠습니다.

Index

오디오 데이터 전처리 (1) Waveform

오디오 데이터 전처리 (2) Fourier Transform & Spectrogram

오디오 데이터 전처리 (3) Cepstrum Analysis

오디오 데이터 전처리 (4) MFCC


Discrete Cosine Transform(DCT)

앞선 3편에서 알 수 있듯이 우리는 feature를 spectrum이 아닌 cepstrum domain에서 구하고자 한다. Cepstrum을 구하는 방법 중 3번째인 다음의 과정을 이용한다. " Waveform  ->  Fourier transform  ->  제곱 (power spectrum)  ->  Mel-filter bank  ->  Real log  ->  Discrete cosine transform(DCT) " 우리가 4편에서 구한 Mel-spectrogram이 Mel-filter bank를 취한 단계까지 완료한 값이 된다. 따라서 우리는 Mel-spectrogram에 log를 취하고 DCT를 수행하면 된다. 

DCT는 특정 함수를 cosine 함수의 합으로 표현하는 변환이다. 이때 앞쪽(low) cosine 함수의 계수가 변환 전 데이터의 대부분의 정보를 가지고 있고 뒤쪽으로 갈수록 0에 근사해 데이터 압축의 효과를 보인다. 즉 낮은 주파수 쪽으로 에너지 집중현상이 일어난다.

MFCC는 이 계수(cepstrum coefficient) 중 주파수가 낮은, 정보와 에너지가 몰려있는 12개의 계수(cepstrum coefficient)를 선택해 이를 feature로 사용한다. 그리고 이 12개 계수에 해당하는 각 frame의 Energy를 13번째 feature로 사용한다. cepstrim coefficient는 다음과 같이 구해진다.


MFCC

다시 우리의 논의를 전처리 흐름으로 돌아오면, 다음과 같은 Mel-spectrogram에

Mel-Spectrogram

DCT를 취하고 낮은(정보가 많은) 계수(cepstrum coefficient) 12개와, 이들로 구해진 energy를 더해 한 frame 당 총 13개의 값이 feature 역할을 하게 되고 이를 MFCC(mel frequency cepstrum coefficient)라고 한다. 

MFCC

MFCC 13개 값의 각 frame 간 차이를 Deltas(1차 차분), 다시 이 Deltas 값의 frame 간 차이를 Delta-daltas(2차 차분)로 구해서 해당 값들을 추가적인 feature로 사용해 총 39개의 MFCC featrue를 최종적으로 사용한다. Speech signal이 time-variant 한데, 우리가 frame으로 잘라서 데이터를 보고 있으므로 정보를 충분히 반영하지 못할 수 있다. 이러한 점을 보완하기 위해 각 frame 간의 차이를 구해 인풋 데이터의 time-variant한 특성을 반영해 feature로 사용하는 게 Deltas의 기본 아이디어다. 하지만 본래 signal보다 백색 소음이 증폭되는 문제가 있다. 

MFCC는 음성인식뿐만 아니라 여러 오디오 데이터를 다루는 task에서 기본적인 features로 사용된다. 간단하게 MFCC 장단점을 알아보고 글을 마치려 한다.

 

Pros

(1) Spectrum의 gross-shape(envelope)를 정량화하여 반영한다. 동시에 중요성이 떨어지는 spectrum의 미세한 구조를 제거해 신호의 가장 유용한 부분에 초점을 맞춘다

(2) 직관적이고 결과값이 단순하며 연산 cost가 효율적이다.

Cons

(1) 노이즈에 robust하지 않다. 다른 feature에 비해 노이즈가 많은 데이터에 대해 성능이 항상 좋지 않았다.

(2) 분석에는 적합하고 잘 작동하는 feature이지만 합성(synthesis)에는 문제가 있다. MFCC에서 spectrum으로 변환하는 정확한 역변환을 찾기 어렵기 때문이다.