본문 바로가기

Audio & Speech

오디오 데이터 전처리 (4) Mel Filter Bank

오디오 데이터 전처리 (3)에서 이어지는 4번째 글입니다. 지난 글에서는 잠깐 전체 흐름을 벗어나 cepstrum 분석에 대해 간단히 알아보았습니다. Cepstrum은 주파수 대역 간의 변동 특성을 파악하기 위한 Fundamatal frequencey, harmonic peak 등을 구할 수 있었습니다. 이는 spectrum보다 음성 신호를 더 잘 설명하기에 cepstrum-level에서 feature를 구할 겁니다. 이번 글에서는 잠시 떠났던 전처리 흐름으로 다시 돌아가 Mel filter bank를 통과시키는 scaling 과정에 대해 알아보겠습니다.

Index

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

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

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

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

 

Mel Filter Bank

 

다시 전처리 흐름으로 돌아와서, 우리는 (1)번 글에서 waveform에 FFT를 취해 spectrum을 만들었다. 이제 이 spectrum에 Mel filter bank라는 필터를 통과 시킨다. Mel-filter의 기본 아이디어는 사람의 청력은 1000Hz 이상의 frequency에 대해서는 덜 민감하므로 1000Hz까지는 Linear하게 그 이상은 Log scale로 변환해주자! 이다. 

다시 말해 Hertz scale은 사람이 받아들이는 민감도나 구분점을 잘 반영하지 못한다. 예를 들어 5000Hz 와 8000Hz를 들어도 사람은 3000 정도의 주파수가 차이나는 것을 인지하지 못한다. 따라서 이를 사람이 쉽게 인지 가능한 scale로 변환해준 것이 Mel scale이다. 앞서 설명한 바와 같이, 1000Hz까지는 Linear하게 변환하다가 그 이후로는 Mel scale triangular filter를 만들어 곱해준다. 

Mel scale triangular filter

보통 26개 혹은 40개 정도의 filter bank를 사용한다. 각 Filter Bank 영역대 마다 Energy값(spectrum power값 평균)을 모두 합하고 log를 취해준다. 이렇게 주파수 영역뿐만 아니라 amplitude 영역에서도 log scaling을 해주는 이유는 사람이 주파수 영역뿐만 아니라 amplitude 영역에서도 log scale로 반응하기 때문이다. 이렇게 하면 결과적으로 filter bank 개수만큼의 Mel scale bin 별로 log power 값들이 구해진다.


이 과정을 spectrum이 아닌 spectrogram에서 진행해보자.

spectrogram

위 spectrogram에 Mel-filter bank를 통과시키면,  frequency와 power가 다음과 같이 모두 mapping 된다. 

(1) Frequency -> Mel-frequency 

(2) 각 포인트에서의 Power -> Log(각 Mel scale bin 별로 power 평균값)

Mel-spectrogram

이해를 위해 spectrum을 벡터로, spectrogram 행렬로 각 값들을 explicit하게 나타내서 다음과 같이 과정을 그려보았다.

 

전체 흐름을 다시 보면 Mel filter bank를 통과한 값이 26개 이므로 26개의 filter bank를 사용했음을 알 수 있고, 26개의 Mel scale bin 별로 해당 구간의 power 평균값이 들어가 있음을 알 수 있다. 이후 log를 취해 amplitude 영역에서의 log scaling을 진행해주었다. 자 이제 마지막으로 DCT 과정을 통해 최종 MFCC를 구하면 끝이다! 

 


Reference 

한국 인공지능 아카데미 [딥러닝] 오디오 처리 박성관 교수님

Introduction to speech processing(7E) https://wiki.aalto.fi/display/ITSP/Cepstrum+and+MFCC