Short Time Fourier Transformation, the Mel Filterbank, and MFCC (Audio Signal Processing Pt.2)

Contents

  • Feature Extraction
  • Short Time Fourier Transformation
  • The Mel Scale and Mel Filterbank
  • MFCC (Mel Frequency Cepstral Coefficient)

Feature Extraction

이전 포스팅에서 아날로그 오디오 시그널이 어떻게 디지털 오디오 데이터로 변하는지에 대한 과정을 알아보았다 (ADC). 디지털 오디오를 확보하였다면, 분석을 해야 하는데 첫 단계가 Feature Extraction 이다. 오디오 데이터는 앞서 설명하였듯이 굉장히 많은 주파수가 섞여있는 고차원 데이터이기 때문에, 그냥 분석하기엔 굉장히 어렵다. 오디오 데이터 뿐만 아니라 전반적인 데이터 분석 과정에선 데이터를 잘 설명하는 feature 을 뽑는게 중요한데, 오디오 데이터를 잘 설명해 주는 feature 인 Mel Frequency Cepstral Coefficient 를 뽑는게 최종 목표다.

Short Time Fourier Transformation

Windowing

오디오 데이터에서 MFCC 를 추출하는 첫 단계는 Windowing(혹은 Framing) 이다. 푸리에 변환은 이전 포스팅에서 설명했듯이 하나의 시그널을 다양한 주기함수의 합으로 표현해 waveform 을 time domain 에서 frequency domain 으로 표현 하는 방법이라고 설명했다. 하지만 오디오 데이터는 time continuous 한 신호이기 때문에, time domain 에 대한 정보를 보존해야 한다. 일반적인 푸리에 변환을 취해주면 time domain 이 frequency domain 으로 바뀌며 시간에 대한 정보가 사라진다. 이를 극복하는 방법이 푸리의 변환의 일종인 STFT (Short Time Fourier Transform) 이다. 이 STFT 가 MFCC 를 추출하는 windowing 의 핵심 키워드다.

Windowing 이란 오디오 데이터를 아주 짧은 주기로 잘라서 그 하나의 조각 (Frame) 에 푸리에 변환을 취해주는 것이다. 각 프레임마다 푸리에 변환을 취해준 결과를 Spectrum 이라 부르는데, 이 Spectrum 의 x 축은 주파수 (Frequency), y 축은 진폭 (Amplitude) 이 된다. 그다음 이 Spectrum 에 몇가지 연산을 더 취해준다.

  • Spectrum 의 Amplitude 를 제곱 → Power Spectrum
  • Power Spectrum 의 Amplitude 를 log → Log Spectrum

이때 Log Spectrum 의 y 축이 우리에게 익숙한 소리의 크기를 표현하는 단위인 decibel 이다.

Log Spectrum 의 x 축은 주파수, y 축은 decibel 이다. 이 Log Spectrum 을 옆으로 차곡차곡 쌓은 것이 Spectrogram 이란 그래프다. x 축은 다시 time domain 이 되고, y 축은 주파수, 그리고 z 축이라고도 할 수 있는 색의 intensity 가 바로 Log Spectrum 의 decibel (Magnitude) 이 되는 것이다.

이렇게 오디오 데이터의 time domain 정보를 보존하면서 frequency domain을 구할 수 있다.

The Mel Scale and Mel Filterbank

Spectrogram 은 오디오 데이터의 3가지 domain (time, frequency, magnitude) 를 전부 나타낸다. 하지만 아직 이 Spectrogram 을 데이터로 쓸 수는 없다. Spectrogram 의 y 축은 주파수, 즉 헤르츠 스케일로 매핑되어있는데 사람이 실질적으로 받아들이는 구분점이나 민감도를 반영하지 못한다. 사람은 낮은 주파수에 비교적 예민하고 높은 주파수에 비교적 둔감하기 때문이다. 예시로 사람은 1kHz 에서 2kHz 까지의 변화는 눈치채지만 5kHz 에서 8kHz 까지의 변화는 눈치채지 못한다. 그렇기 때문에 Mel Scale 이란 것을 사용한다.

The Mel Scale

Mel Scale 은 사람이 음(音)을, 즉 주파수를 인지하는 기준을 반영한 로그 스케일이다.

주파수를 위 Mel Scale 함수에 대입하면 사람이 인지하는 기준으로 주파수가 선형적으로 변한다. 이 Mel Scale 을 선형적이게 구간을 나누어 구현을 한 것이 바로 Mel Filterbank 이다. Mel Scale 을 선형적으로 나누어 다시 Hz 로 바꿔주는 함수다.

Mel Filterbank 을 자세히 보면 1kHz 까지 (비교적) 선형적이고 이후엔 지수적으로 증가하는데, 높은 주파수에 둔감한 사람이 실질적으로 받아들이는 변화의 감도를 표현한 것이다.

Frequency → Mel Filterbank = Values on the Mel Scale

Mel Scale Value → Mel Filterbank = 사람의 민감도를 반영한 Frequency

기존에 STFT 로 얻은 Spectrogram 을 이 Mel Filterbank 에 통과시키면 보다 인간 친화적인 Mel Spectrogram 을 얻을 수 있다.

MFCC (Mel Frequency Cepstral Coefficient)

Mel Spectrogram 구축 후 한 단계만 더 거치면 원래의 목표인 MFCC 를 추출 할 수 있다. 푸리에 변환이 뭔지 복기해보면 하나의 복잡한 함수의 합 (급수) 로 표현하는 방법이다. 이와 다른 방법 중 하나는 Discrete Cosine Transformation (DCT) 라고 한다. Mel Spectrogram 의 각 프레임 또한 함수이기 때문에, 프레임에 DCT 를 취하면 급수로 나타낼 수 있다. 이때 이 급수의 첫 12개의 코사인 계수를 오디오 데이터의 Cepstral Coefficient 라고 한다.

이 12개의 Cepstral Coefficient 과 해당 프레임의 에너지, 즉 평균 데시벨 값까지 총 13개의 feature 을 우리는 오디오 데이터의 주 feature 인 MFCC 라고 부른다. 보통 오디오 데이터 분석을 할 때 어떤 라이브러리를 사용하는지에 따라 상이하지만 13개의 MFCC 를 사용하는 라이브러리도 있고, 여기서 추가적으로 각 프레임의 13개의 feature 에 대해 차분을 추가하고, 2차 차분까지 feature 로 쓰는 라이브러리도 존재한다. 파이썬의 대표적인 오디오분석 라이브러리인 Librosa 는 2차 차분까지 총 39 개의 feature 를 기본 인자로 사용한다.

위 그림은 Mel Spectrogram 에 DCT 를 취해서 MFCC를 Spectrogram 으로 표현 한 그래프다. 여전히 x 축은 time domain, z 축(색깔) 은 Magnitude 를 나타내지만 y 축은 각 MFCC index다.

Audio Signal Processing 의 전반적인 흐름은 다음과 같다.

Analog Audio Signal → ADC → Digital Audio Signal → Windowing through STFT → Spectrum → Power Spectrum → Log spectrum → Spectrogram → Mel filterbank → Mel Spectrogram → DCT → MFCC

References