[파이썬] 음성 데이터의 피처 추출 (MFCC, Chroma 등)

음성 데이터는 다양한 응용 분야에서 중요한 역할을 합니다. 음성 인식, 음악 분석 등 다양한 분야에서 음성 데이터의 특징을 추출하는 것은 매우 중요한 작업입니다. 이러한 특징을 가져올 수 있는 여러 방법 중에 MFCC(Mel-frequency cepstral coefficients)Chroma가 널리 사용됩니다.

MFCC

MFCC는 음성 데이터의 주파수 특성을 표현하기 위해 사용되는 피처 추출 방법입니다. MFCC는 다음과 같은 단계로 구성됩니다:

  1. 음성 신호를 프레임 단위로 분할합니다.
    import librosa
    
    signal, sample_rate = librosa.load("audio.wav")
    frames = librosa.util.frame(signal, frame_length=2048, hop_length=512)
    
  2. 각 프레임에 대해 STFT(Short Time Fourier Transform)를 수행합니다.
    stft = librosa.stft(frames, n_fft=2048, hop_length=512)
    
  3. 주파수 축을 Mel scale로 변환합니다.
    mel = librosa.feature.melspectrogram(sr=sample_rate, S=librosa.amplitude_to_db(stft))
    
  4. Mel 스펙트로그램을 로그 스케일로 변환하고, 케프스트랄 계수(Cepstral coefficients)를 추출합니다.
    mfcc = librosa.feature.mfcc(S=librosa.power_to_db(mel), n_mfcc=13)
    

MFCC를 추출하면 각 프레임에 대해 특정 주파수 대역의 주파수 성분이 얼마나 강하게 나타나는지를 표현하는 계수를 얻을 수 있습니다.

Chroma

Chroma는 음악 분석에서 사용되는 피처로, 음악의 음높이 정보를 추출하는 데에 사용됩니다. Chroma는 다음과 같은 단계로 구성됩니다:

  1. 음성 신호를 프레임 단위로 분할합니다.
    import librosa
    
    signal, sample_rate = librosa.load("audio.wav")
    frames = librosa.util.frame(signal, frame_length=2048, hop_length=512)
    
  2. 각 프레임에 대해 STFT(Short Time Fourier Transform)를 수행합니다.
    stft = librosa.stft(frames, n_fft=2048, hop_length=512)
    
  3. STFT 결과를 Chroma feature로 변환합니다.
    chroma = librosa.feature.chroma_stft(S=librosa.amplitude_to_db(stft), n_chroma=12)
    

Chroma를 추출하면 음악에서 다양한 음높이 정보를 표현하는 12개의 계수를 얻을 수 있습니다.

결론

음성 데이터의 피처 추출은 음성 인식, 음악 분석 등 다양한 응용 분야에서 중요한 전처리 단계입니다. 이 글에서는 MFCC와 Chroma라는 대표적인 피처 추출 방법을 알아보았습니다. 이러한 방법을 사용하여 음성 데이터에 대한 특징을 추출하면, 음성 인식 등의 작업에 유용하게 활용할 수 있습니다.