ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MFCC(Mel-Frequency Cepstral Coefficient) 이해하기
    Machine Learning/Audio Feature 2019. 7. 12. 03:57

    이 글은 음성/음악 등 오디오 신호 처리 분야에서 널리 쓰이는 특징값(Feature) 중 하나인

    MFCC(Mel-Frequency Cepstral Coefficient)에 대해 정리한 글입니다.

     

    알고리즘 구현보다는 MFCC의 전반적인 이해실제 활용에 초점을 맞춰 정리했습니다 :)

     


    MFCC란?

    MFCC는 오디오 신호에서 추출할 수 있는 feature로, 소리의 고유한 특징을 나타내는 수치입니다.

     

    주로 음성 인식, 자 인식, 음성 합성, 음악 장르 분류 등 오디오 도메인의 문제를 해결하는 데 사용됩니다.

     

    먼저 MFCC를 쉽게 이해하기 위해 MFCC의 실제 사용 예시를 들어보겠습니다.

     

     

    1) 화자 검증(Speaker Verification)

     

    화자 검증이란 화자 인식(Speaker Recognition)의 세부 분류로서 말하는 사람이 그 사람이 맞는지를 확인하는 기술입니다.

     

    시스템에 등록된 음성에만 반응하는 아이폰의 Siri를 예로 들 수 있습니다.

     

    MFCC는 등록된 음성과 현재 입력된 음성의 유사도판별하는 근거의 일부로 쓰입니다.

     

    MFCC가 음성의 고유한 특징을 표현하는 값으로 사용된다는 사실을 알 수 있습니다.

     

     

    2) 음악 장르 분류(Music Genre Classification)

     

    MFCC는 음성뿐만 아니라 음악 신호에서도 사용됩니다.

     

    화자 인식에서 화자의 특징을 표현할 수 있는 것처럼, 음악의 특징도 MFCC로 표현할 수 있습니다.

    음악에서 추출한 feature를 이용해 어떤 장르인지 분류할 때 MFCC가 활용될 수 있습니다.

     

     

    MFCC의 기술적인 이해

    기술적으로 말하면, MFCC(Mel-Frequency Cepstral Coefficient)는 Mel Spectrum(멜 스펙트럼)에서 Cepstral(켑스트럴) 분석을 통해 추출된 값입니다.

     

    따라서, MFCC를 기술적으로 이해하려면 선행으로 다음 개념들을 알아야 합니다.

    Spectrum(스펙트럼)

     Cepstrum(켑스트럼)

     Mel Spectrum(멜 스펙트럼)

     

    MFCC의 추출 과정을 따라가면서, 기술적인 설명을 병행하겠습니다.

     

    MFCC의 추출 과정

    여러 중간 과정을 생략하고 간략하게 표현한 MFCC의 추출 과정을 그림으로 표현하면 다음과 같습니다.

    간략한 MFCC 추출 과정

    1. 오디오 신호를 프레임별(보통 20ms - 40ms)로 나누어 FFT를 적용해 Spectrum을 구한다.

    2. SpectrumMel Filter Bank를 적용해 Mel Spectrum을 구한다.

    3. Mel SpectrumCepstral 분석을 적용해 MFCC를 구한다.

     

    오디오 신호는 시간(가로축)에 따른 음압(세로축)의 표현, 즉 시간 영역(time domain)의 표현입니다.

     

    여기에 FFT를 수행하면 주파수(가로축)에 따른 음압(세로축)의 표현, 즉 주파수 영역(frequency domain)의 표현이 가능해지고, 그것이 Spectrum입니다.

     

    ※ FFT(Fast Fourier Transform : 고속 푸리에 변환)
    신호를 주파수 성분으로 변환하는 알고리즘으로, 기존의 이산 푸리에 변환(DFT)을 더욱 빠르게 수행할 수 있도록 최적화한 알고리즘.

     

    Spectrum을 사용하면 각 주파수의 대역별 세기를 알 수 있으니, 신호에서 어떤 주파수가 강하고 약한지를 알 수 있게 됩니다.

     

    이렇게 주파수에 대한 정보를 가진 Spectrum에서 소리의 고유한 특징을 추출할 수 있습니다.

     

    그리고 그 정보를 추출할 때 사용하는 방법이 Cepstral 분석입니다.

     

    다만 MFCC는 일반적인 Spectrum이 아니라 특수한 필터링을 거친 Mel SpectrumCepstral 분석을 적용해 추출합니다.

     

    Spectrum

    어떻게 Spectrum에서 소리의 고유한 특징을 추출할 수 있을까요?

     

    먼저 Spectrum에 어떤 정보가 숨겨져 있는지 알아야 합니다.

     

    악기 소리나 사람의 음성은 일반적으로 배음(harmonics) 구조를 가지고 있습니다.

     

    ※ 배음(harmonics) 구조
    소리는 한 가지의 주파수만으로 구성되지 않습니다.
    기본 주파수(fundamental frequency)와 함께 기본 주파수의 정수배인 배음(harmonics)들로 구성됩니다.

    예를 들어 우리가 피아노 건반에서 4옥타브 '라'(440Hz) 음을 연주했다면 그 소리는 기본 주파수인 440Hz뿐만 아니라 그 정수배인 880Hz, 그리고 그다음 배음들까지 포함하고 있습니다.

     

    http://blog.naver.com/200613241/221137045066

     

    배음 구조는 악기나 성대의 구조에 따라 달라지며 배음 구조의 차이가 음색의 차이를 만듭니다.

     

    즉, Spectrum에서 배음 구조를 유추해낼 수 있다면 소리의 고유한 특징을 찾아낼 수 있는 것입니다.

    이것을 가능하게 하는 것이 Ceptral 분석입니다.

     

    Cepstral Analysis

    이제 Cepstral 분석이 어떤 과정으로 수행되는지 알아보겠습니다.

     

    다음은 일반적인 Spectrum 그림입니다.

    http://www.speech.cs.cmu.edu/15-492/slides/03_mfcc.pdf

    화살표로 지목된 피크(peak)들은 신호에서 지배적인 주파수 영역을 가리킵니다.

     

    이 피크들을 포먼트(Formants)라고 합니다.

     

    ※ 포먼트(Formants)
    소리가 공명되는 특정 주파수 대역.

    사람의 음성은 성대(vocal folds)에서 형성되어 성도(vocal track)를 거치며 변형되는데,
    소리는 성도를 지나면서 포먼트를 만나 증폭되거나 감쇠됩니다.

    즉, 포먼트는 배음(harmonics)과 만나 소리를 풍성하게 혹은 선명하게 만드는 필터 역할을 합니다.

     

    포먼트는 소리의 특징을 유추할 수 있는 중요한 단서가 됩니다.

     

    우리가 해야 할 일은 포먼트들을 연결한 곡선과 Spectrum을 분리해내는 일입니다.

     

    그 곡선을 Spectral Envelope라 하고, MFCC는 둘을 분리하는 과정에서 도출됩니다.

     

     

    이때 사용하는 수학과 알고리즘이 logIFFT(Inverse FFT : 역 고속 푸리에 변환)입니다.

     

     

    Mel Spectrum

    위에서 MFCC Spectrum이 아닌 Mel Spectrum에서 Cepstral 분석으로 추출한다고 했는데요.

    Mel Spectrum이 어떤 과정을 거쳐 만들어지는지 알아보겠습니다.

     

    사람의 청각기관은 고주파수(high frequency) 보다 저주파수(low frequency) 대역에서 더 민감합니다.

     

    사람의 이런 특성을 반영해 물리적인 주파수와 실제 사람이 인식하는 주파수의 관계를 표현한 것이 Mel Scale(멜 스케일)입니다. [위키피디아]

     

    Mel Scale에 기반한 Filter BankSpectrum에 적용하여 도출해낸 것이 Mel Spectrum입니다.

     

    Mel ScaleFilter Bank를 나눌 때 어떤 간격으로 나눠야 하는지 알려주는 역할을 합니다.

     

    Filter Banks on the Mel-scale.  https://haythamfayek.com/2016/04/21/speech-processing-for-machine-learning.html

     

    이렇게 사람 청각기관의 특성을 반영해 최종적으로 얻어낸 Mel Spectrum에서 Cepstral 분석을 수행해 MFCC를 추출할 수 있습니다.

     

     

     

    Reference

    ˙Kishore Prahallad  "Speech Technology : A Practical Introduction"

    ˙Haytham Fayek  "Speech Processing for Machine Learning"

    ˙Pratheeksha Nair  "The dummy’s guide to MFCC"

    ˙Practical Cryptography  "Mel Frequency Cepstral Coefficient (MFCC) tutorial"

    ˙여민  "캡스트럼(cepstrum)"

    ˙Ricardo Gutierrez-Osuna  "Introduction to Speech Processing L9 : Cepstral analysis"

    ˙로고스 사운드  "배음과 포먼트 : 목소리, 음색에 대한 이해"

    ˙Jubilee Voice Studio  "소스필터이론 : 포먼트의 정의"

    ˙Voice Science Works  "HARMONICS vs. FORMANTS"

    댓글