본문 바로가기
신호처리

[신호처리] 6. Mel-Filter Bank/MFCC (Mel-Frequency Cepstral Coefficient)

by mhiiii 2025. 2. 24.
728x90

MFCC란? 

음성 인식과 관련해 불필요한 정보는 버리고 중요한 특질만 남긴 피처(feature)

인간의 말소리 인식에 중요한 특질들이 추출된 결과

 

MFCC를 만드는 전체 과정

 

  1. 입력 음성을 짧은 구간(대개 25ms 내외)으로 나눔 $\to$ 쪼개진 음성을 frame이라고 함
  2. 프레임 각각에 푸리에 변환(Fourier Transform)을 실시 $\to$ 해당 구간 음성에 담긴 주파수 정보를 추출
  3. 모든 프레임 각각에 푸리에 변환을 실시한 결과를 스펙트럼(spectrum)이라고 함
  4. 스펙트럼에 사람의 말소리 인식에 민감한 주파수 영역대는 세밀하게 보고
    나머지 영역대는 상대적으로 덜 촘촘히 분석하는 필터(Mel Filter Bank)를 적용 $\to$ 멜 스펙트럼(Mel Spectrum)
  5. 이후 로그를 취한 것이 바로 로그 멜 스펙트럼(log-Mel Spectrum)
  6. 로그 멜 스펙트럼에 역푸리에변환(Inverse Fourier Transform)을 적용해 주파수 도메인의 정보를 새로운 시간(time) 도메인으로 바꾼 것 $\to$ MFCC

📌 spectrumspectrogram의 차이가 뭐야?

더보기

Spectrum

  • 특정 한 시점(또는 한 프레임)에 대한 주파수 성분을 나타낸 것

Spectrogram

  • 여러 프레임의 스펙트럼을 시간 순서대로 쌓아놓은 것

Pre-emphasis

고주파 성분의 에너지를 올려주는 전처리 과정

 

사람 말소리를 스펙트럼(spectrum)으로 변환해서 관찰하면,

일반적으로 저주파(low frequency) 성분의 에너지(energy)가 고주파(high frequency)보다 많은 경향이 있음

 

고주파 성분의 에너지를 조금 올려주면 음성 인식 모델의 성능을 개선할 수 있게 됨

따라서, High-pass filter를 적용하는 것과 같은 것

 

  1. 상대적으로 에너지가 적은 고주파 성분을 강화함으로써 원시 음성 신호가 전체 주파수 영역대에서 비교적 고른 에너지 분포를 갖도록 함.
  2. 푸리에 변환시 발생할 수 있는 numerical problem 예방.
  3. Signal-to-Noise Ratio(SNR) 개선.

$t$번째 원시 음성 신호를 $x_t$라고 하면,

다음과 같은 식으로 pre-emphasis를 적용할 수 있음

$$y_t = x_t - \alpha x_{t-1}$$

 

pre-emphasis coefficient $\alpha$는 보통 0.95나 0.97을 사용

 

728x90

Framing

음성 신호를 짧은 시간 단위로 잘게 쪼개는 과정

 

분석 대상 시간 구간이 지나치게 길 경우 빠르게 변화하는 신호의 주파수 정보를 정확히 캐치하기 어려움

이에 음성 신호가 stationary하다고 가정해도 좋을 만큼 원시 음성 신호를 아주 짧은 시간 단위(대개 25ms)로 잘게 쪼갬

 

자르되 일정 구간은 겹치도록 함

 

 

Windowing

각각의 프레임에 특정 함수를 적용해 경계를 스무딩하는 기법

 

대표적으로 해밍 윈도우(Hamming Window)라는 함수를 사용

 

개별 프레임에 아래 그림과 같은 해밍 윈도우를 적용하게 되면,

프레임 중간에 있는 값들은 1이 곱해져 그대로 살아남고 양 끝 부분은 0에 가까운 값이 곱해져 그 값이 작아짐

 

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

 

n은 해밍 윈도우 값 인덱스, N은 프레임 길이

 

만약 해밍 윈도우가 아닌 Rectangular Window를 적용하면,

 

Rectangular Window로 자른 프레임의 양끝에서는 신호가 살아 있다가 갑자기 죽는(=0) 상황이 발생

 

이같은 프레임에 이후 푸리에 변환을 실시하게 되면 불필요한 고주파(high frequency) 성분이 살아남게 됨

 

해밍 윈도우를 적용하게 되면 위 그림의 하단 우측처럼 양끝 부분이 스무딩되어 앞서 설명한 부작용을 완화할 수 있게됨

 

 

DFT

자세한 설명은 여기

 

 

Filter Banks

사람의 소리 인식은 1000Hz 이하의 저주파수(low frequency) 영역대가 고주파수(high frequency) 대비 민감

그에 비해, STFT는 주파수 축을 선형적으로 표현

 

저주파수 영역대를 고주파수 영역대 대비 상대적으로 세밀하게 볼 필요가 있음

 

이때 적용하는 기법을 필터뱅크(Filter Banks)라고 함

 

필터뱅크는 멜 스케일(Mel Scale) 필터를 사용

 

기존 주파수(f, 단위는 헤르츠/Hz)를 멜(m, 단위는 멜/mel)로, 멜을 헤르츠로 변환하는 공식

$$\begin{align*} m = 2595\log_{10}(1+\frac{f}{700}) \\ f = 700(10^{m/2595}-1) \end{align*}$$

 

헤르츠 단위 주파수 k를 멜 단위 주파수 m에 대응시키는 필터를 만드는 공식

 

삼각형 필터를 사용해 특정 주파수 대역을 강조

저주파수 영역대는 촘촘하게, 고주파수 영역대는 듬성듬성

 

한 개의 필터만 사용하면 특정 주파수 대역만 강조되므로, 여러 개의 필터를 사용하여 전체 주파수 범위를 커버

저주파수에서는 필터가 촘촘하고, 고주파수에서는 필터가 넓게 배치됨

 

✔ 멜 필터 개수가 많을수록 주파수 해상도가 높아지지만, 연산량이 증가

 

헤르츠 단위 주파수 k를 멜 단위 주파수 m에 대응시키는 필터 H를 만드는 공식

 

 

 

Log-Mel Spectrum

 

사람의 소리 인식은 로그 스케일에 가깝다고 함

다시 말해 사람이 두 배 큰 소리라고 인식하려면 실제로는 에너지가 100배 큰 소리여야 한다는 것

 

음성 분야에선 인간의 말소리 인식에 중요한 특질을 추출하는 데 관심이 있으므로 멜 스펙트럼에 로그 변환을 수행

 

멜 스펙트럼, 로그 멜 스펙트럼 모두 수행 이후의 차원 수는 frame 개수 × 필터 개수

 

 

MFCCs

멜 스펙트럼 혹은 로그 멜 스펙트럼은 태생적으로 피처(feature) 내 변수 간 상관관계(correlation)가 존재

👉 필터 H를 만드는 위 공식에서도 연속적인 필터(Triangular Filter)를 사용하여 주변 몇 개의 헤르츠 기준 주파수 영역대 에너지를 한데 모아 보기 때문

 

즉, 서로 인접한 주파수 대역의 값들이 강하게 연관(correlation)됨

 

따라서, 로그 멜 스펙트럼에 역푸리에 변환(Inverse Fourier Transform)을 수행해 변수 간 상관관계를 해소한 피처를 Mel-frequency Cepstral Coefficients(MFCCs)라고 함

 

실제로는 역이산 코사인 변환(Inverse Discrete Cosine Transform)을 사용해 실수 파트에서 푸리에 변환을 수행 

 

 

📌 어떻게 해소가 되는걸까?

더보기

DCT(이산 코사인 변환, Discrete Cosine Transform)는 고주파 성분을 분리하여 정보를 더 "독립적인" 형태로 변환하는 기법

 

고주파 성분은 인접한 주파수 간 변화가 빠르기 때문에 더 연관된 정보를 포함하고,

로그 멜 스펙트럼에서 멜 필터는 점점 넓어지는데, 고주파 영역에서는 필터가 겹치는 정도가 더 커서, 상관관계가 강하게 나타남.


🔥 DCT를 적용하면 낮은 주파수 성분(주요 정보)만 남기고, 중복된 정보(고주파 성분)를 줄일 수 있음.

 

최종적으로 MFCCs의 shape은 frame 개수 * 필터 개수인데,

이 행렬 가운데 2-13번째 열벡터들만 뽑아서 최종적인 MFCCs 피처로 사용

 

 

References

https://ratsgo.github.io/speechbook/docs/fe/mfcc#filter-banks

 

MFCCs

articles about speech recognition

ratsgo.github.io

 

https://sooftware.io/mfcc/

 

Sooftware Speech - MFCC (Mel-Frequency Cepstral Coefficient)

MFCC (Mel-Frequency Cepstral Coefficient) ‘Voice Recognition Using MFCC Algorithm’ 논문 참고 MFCC란? 음성인식에서 MFCC, Mel-Spectrogram…

sooftware.io

 

 

 

 

728x90