[ Feature Extraction of signal data ]

Signal data에서 feature를 뽑아내는 대표적인 2가지 방법은 아래와 같다.

  • 1) Fourier Transform
  • 2) Mel-Frequency Cepstral Coefficients (MFCC)

이번 포스트에서는 Mel-Frequency Cepstral Coefficients (MFCC)에 대해서 다룰 것이다.


1. Introduction

MFCC ?

  • signal 데이터에서 “중요한 정보”만 남긴 feature
  • 음성 인식 시스템에서 자주 사용되는 feature
  • NN기반 feature extraction 방법과 달리, “공식”에 기반한 방법


2. Mel-Frequency Cepstral Coefficients (MFCC)

  • Step1 ) 입력 signal을 짧은 구간으로 나눔 ( called “frame” )
  • Step2 )각 frame에 Fourier Transform 실시
    • Fourier Transform : “time” \(\rightarrow\) “frequency”
    • 모든 frame에 Fourier Transform을 한 것을 “Spectrum”이라고 부름
  • Step 3) Spectrum에 Mel Filter Bank 필터 적용 ( called “Mel Spectrum” )
    • Mel Filter Bank : 사람의 말 소리 인식에 민감한 frequency는 세밀하게, 그렇지 않은 부분은 덜 촘촘히 분석하는 필터
  • Step 4) MFCC 생성
    • MFCC : log(Mel Spectrum)에 Inverse Fourier Transform한 것
      • 다시 time 도메인으로 컴백!
    • 인간의 말 소리에서 중요한 특징들이 추출된 것들!
    • NN에 의한 feature extraction도 대두되고 있지만, 여전히 많이 사용되고 있는 feature!



3. 성능 개선을 위해서…

(1) Pre-emphasis

사람의 목소리를 위의 과정처럼 spectrum으로 변환 시,

일반적으로 “LOW frequency” > “HIGH frequency” ( 특히 모음에서 )


성능 개선 via “HIGH frequency”의 에너지 \(\uparrow\) ! 이를 Pre-emphasis라고 함

공식 : \(\mathbf{y}_t = \mathbf{x}_t - \alpha \mathbf{x}_{t-1}\)

  • \(\alpha\)는 주로 0.95나 0.97 사용


Pre-emphasis의 효과

  • 1) 전체 frequency 영역에서 고른 에너지 분포
  • 2) Fourier Transform 시 발생할 수 있는 numerical problem 예방
  • 3) Signal-to-Noise Ratio ( 잡음 비율 ) 개선


(2) Framing

signal은 매우 빠르게 변화함 (non-stationary)

\(\rightarrow\) 정확히 파악하기 어려울 수도!

따라서, signal을 짧은 시간 단위 (주로 25ms) 로 나눔 (위의 step 1). 이를 “framing”이라 함


(3) Windowing

위에서 말한 것 처럼, signal을 매우 작은 시간 단위로 framing한다. 이렇게 해서 생긴 여러 frame들에 어떠한 함수를 적용할 때, smoothing하는 방법이다.

ex) Hamming Window

Hamming Window

\(w[n]=0.54-0.46 \cos \left(\frac{2 \pi n}{N-1}\right)\).

  • frame의 중간에 있는 값들 : 그대로 ( \(\times 1\) )
    • \(0.54-0.46(-1)=1\) 이므로
  • frame 양 끝의 값들 : 작은 값이 곱해짐
    • \(0.54-0.46(1)=0.12\) 이므로

.


(4) Post Processing

MFCCs를 생성한 이후, 성능 향상 위해 Lift 혹은 Mean Normalization을 수행하기도 함


4. 기타

(1) Magnitude

이전 포스트에서 봤듯이, time 도메인의 데이터가 (Discrete) Fourier Transform을 거치고 나면 실수 part와 허수 part로 구성된 frequency 도메인의 데이터가 나온다. ( \(X[k] = a + b\times j\) )

이 frequency의 (1) 진폭(magnitude)와 (2) 위상(phase)는 아래와 같이 나타낼 수 있다.

  • 진폭 : frequency의 “크기”
  • 위상 : frequency의 “위치”

.


(2) Power Spectrum

공식 : \(\text { Power }=\frac{\mid X[k]\mid^{2}}{N}\)


(3) Filter Banks

사람의 목소리 인식은 LOW frequency 영역대가 HIGH frequency 영역대보다 민감하다.

따라서, LOW frequency 영역대를 보다 자세히 볼 필요가 있다.

그러기 위해 사용하는 것이 “Filter Banks”

여기서 사용하는 필터는 Mel Scale(멜 스케일)

  • 헤르츠 (\(Hz\)) \(\rightarrow\) 멜(m)

  • 공식 )

    \(\begin{aligned} m &=2595 \log _{10}\left(1+\frac{f}{700}\right) \\ f &=700\left(10^{m / 2595}-1\right) \end{aligned}\).


(4) Log - Mel Spectrum

Log를 씌우는 이유?

\(\rightarrow\) “사람의 목소리는 log scale!”

용어

  • (log 이전) Mel Spectrum (멜 스펙트럼)
  • (log 이후) Log-Mel Spectrum (로그 멜 스펙트럼)


(5) MFCCs

(Log-) Mel Spectrum은 feature 간의 상관관계 존재!

( \(\because\) 여러 차원에서 서로 영향을 주고 받음 )


이러한 상관관계를 해소하기 위해, 다시 INVERSE Fourier Transform 적용

이것을 “Mel-frequency Cepstral Coefficients(MFCCs)“라고 함


Reference

https://ratsgo.github.io/speechbook/docs/fe/mfcc#magnitude