본문 바로가기

Sound

MFCC(Mel Frequency Cepstral Coefficient)

MFCC란?

Mel Frequency : 우리의 귀가 작동하는 것과 유사한 소리를 측정하는 방법임. 피아노에서 두 개의 높은 음이 두 개의 낮은 음보다 더 가깝게 들리는 것처럼 Mel Frequency는 사운드를 측정하기 위해 특별한 '스케일'을 사용함.

Cepstral Coefficients : 소리의 '성분'을 찾고 있는 방법.  소리의 고음, 저음, 중간음등

 

MFCC의 특징

음성 인식, 음악의 장르 분석, 감정 인식 등 다양한 분야에서 MFCC를 활용합니다. 예를 들어 음성을 인식해야 하는데 목소리가 높은 사람이 높은 음으로 '가나다라~' 하는거랑 낮은 목소리로 '가나다라~' 하는거랑 같게 인식이 되어야 하겠죠? 그러니 MFCC는 적합한 특징값이죠.
반대로 음악에서 악기를 연주하면 그 악기의 음표를 그려주는 목적이라고 하면 MFCC는 절대 사용해선 안되겠죠. 음정의 차이를 무시하도록 디자인되었으니까요.

 

 
 

https://brightwon.tistory.com/11

 

MFCC(Mel-Frequency Cepstral Coefficient) 이해하기

이 글은 음성/음악 등 오디오 신호 처리 분야에서 널리 쓰이는 특징값(Feature) 중 하나인 MFCC(Mel-Frequency Cepstral Coefficient)에 대해 정리한 글입니다. 알고리즘 구현보다는 MFCC의 전반적인 이해와 실

brightwon.tistory.com

 

MFCC를 사용하는 이유?

사람은 특정인의 목소리를 들으면 누구인지 알 수 있지만, 컴퓨터는 사람처럼 소리를 이해하지 않기 때문에 알수 없음. 따라서 MFCC를 사용해서 컴퓨터가 다양한 소리의 요소를 이해하도록 함. 

 

 
 
 
 

 

Mel-Spectrogram python 코드

 

def mel_spectrogram(file_path):
    # Load your audio file
    y, sr = librosa.load(file_path, sr=None)
    # Compute the Mel spectrogram
    
    n_fft = 2048
    win_length = 2048
    hop_length = 1024
    n_mels = 128
 
    D = np.abs(librosa.stft(y, n_fft=n_fft, win_length = win_length, hop_length=hop_length))
    mel_spec = librosa.feature.melspectrogram(S=D, sr=sr, n_mels=n_mels, hop_length=hop_length, win_length=win_length)

    # Convert to log scale (dB). We'll use the peak power (max) as reference.
    log_S = librosa.amplitude_to_db(mel_spec, ref=np.max)

    # Display the spectrogram
    plt.figure(figsize=(12, 4))
    librosa.display.specshow(log_S, sr=sr, x_axis='time', y_axis='mel')
    plt.colorbar(format='%+02.0f dB')
    plt.title('Mel spectrogram')
    plt.tight_layout()
    plt.show()

 

 

 

참고문헌

다카시마 료이치 저/정권우 역. 『파이썬으로 배우는 음성인식 : 음성인식의 기술 발전 동향부터 파이토치를 활용한 딥러닝 실습까지』, 비제이퍼블릭, 01월 2023