개요
음성 신호 처리에서 MFCC(Mel-Frequency Cepstral Coefficients, 멜 주파수 켑스트럼 계수)는 오디오의 스펙트럼 특징을 압축적으로 표현하는 대표적인 특징 벡터입니다. 파이썬에서는 python_speech_features 라이브러리로 MFCC를 추출한 뒤, Matplotlib를 사용해 이를 히트맵 이미지 형태로 손쉽게 시각화할 수 있습니다.
구현 절차
MFCC를 플롯하려면 다음 단계를 따릅니다.
- 그림 크기를 설정하고 서브플롯 주변과 사이의 여백(padding)을 조정합니다.
- WAV 파일을 열고 읽어들입니다.
- 오디오 신호로부터 MFCC 특징을 계산합니다.
- Figure와 서브플롯 집합을 생성합니다.
- 배열의 두 축(axis)을 서로 교환합니다.
- 데이터를 2D 래스터 이미지 형태로 표시합니다.
- show() 메서드를 호출해 그림을 화면에 출력합니다.
예제 코드
from python_speech_features import mfcc
import scipy.io.wavfile as wav
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
(rate, sig) = wav.read("my_audio.wav")
mfcc_data = mfcc(sig, rate)
fig, ax = plt.subplots()
mfcc_data = np.swapaxes(mfcc_data, 0, 1)
cax = ax.imshow(mfcc_data, interpolation='nearest', cmap='copper', origin='lower')
plt.show()코드 설명
wav.read()는 샘플링 레이트와 신호 데이터를 반환하며, mfcc() 함수는 해당 신호에서 프레임별 MFCC 계수를 계산합니다. 결과 배열은 (프레임 수 × 계수 수) 형태이므로 np.swapaxes()로 축을 교환하면 x축은 시간(프레임), y축은 켑스트럼 계수 인덱스가 됩니다. 마지막으로 imshow()를 사용해 'copper' 컬러맵의 히트맵으로 렌더링합니다.
실행 결과
위 코드를 실행하면 시간의 흐름에 따른 MFCC 계수 값의 변화가 컬러 강도로 표현된 히트맵이 출력됩니다.
