본문 바로가기

Audio & Speech

오디오 데이터 전처리 (2) Fourier Transform & Spectrogram

오디오 데이터 전처리 (1) Waveform에서 이어지는 글입니다. 1편에서는 오디오 데이터에 대한 정의와 waveform, ADC, windowing과 energy에 대해 알아봤습니다. 이번 2편에서는 푸리에 변환을 통해 waveform을 spectrum으로 변환해 time domain에서 frequenct domain으로 넘기는 과정과 의미에 대해 알아보겠습니다.

Index

오디오 데이터 전처리 (1) Waveform

오디오 데이터 전처리 (3) Cepstrum Analysis

오디오 데이터 전처리 (4) Mel Filter Bank

오디오 데이터 전처리 (5) MFCC


푸리에 변환(Fourier Transform)

앞서 언급한 바와 같이 Audio 신호는 차원이 매우 크고 한 신호에도 서로 다른 여러 frequnecy들이 결합되어 있어 waveform에서 feature를 뽑아내기가 어렵다. 푸리에 변환은 신호를 서로 다른 frequency들의 합으로 표현해, waveform을 time domain에서 frequency domain으로 변환시킨다. 이를 통해 아무리 복잡한 신호라도 각각의 frequency에서 해석이 가능하다. 밑에 그래프를 보며 이해해보자.

빨간색의 wave form은 오른쪽 보라색의 각각 4, 1.5의 Frequency를 가지는 두 주기(frequency) 함수로 분리될 수 있다. 실제 audio는 훨씬 다양한 Frequency들이 섞여 있고, 푸리에 변환은 이를 각 frequency로 분해해준다. 

다시 우리 task로 돌아와서, 이 푸리에 변환을 어디에 적용할지 생각해보자. 전체 waveform에 한 번에 변환을 취할 수도 있겠지만, 여기서 우린 Short Time Fourier Transfrom(STFT)이라는 멋진 방법을 시도한다. 푸리에 변환을 하면 아래 그림 처럼 time domain이 사라져 해석에 어려움이 생긴다. 

STFT는 위에서 자른 frame마다 푸리에 변환을 취해 각각을 시간 순으로 옆으로 쌓아 time domain을 살리기 위한 방법이다. 

single frame

위에서 자른 frame, 여기에 STFT을 취하면, 다음과 같이 X축이 time에서 frequency로 바뀌었음을 알 수 있다. 이를 spectrum이라고 정의한다.

spectrum

여기에 Y축 magnitude를 제곱해준 것이 power이고 다음과 같이 나타내며, 이를 power spectrum이라고 한다.

power spectrum

일반적으로는, magnitude에 log scale을 한 데시벨(dB) 단위를 많이 사용하고 이를 Log-spectrum이라고 한다. 다음과 같은 equation으로 magnitude를 log scaling 해서 데시벨을 구한다.

데시벨(dB) = $20\log_{10}\left | X_{k} \right |$

Log-spectrum

 

이전 글 1. Windowing 과정에서 다뤘던 데이터에 대해 STFT로 power-spectrum을 구해보면 다음과 같다. (N으로 나눠준 것은 nomarlize 스케일링)


여기에 데시벨 변환 공식을 취해서 log-spectrum을 구하고 이를 세로로 세워서 frame마다 차곡차곡 옆으로 쌓으면, 푸리에 변환으로 사라졌던 time domain을 복원할 수 있고 이를 Spectrogram이라고 한다.

Spectrogram

위 그래프를 보면 X축이 각 frame 이 되므로 time의 의미를 가진다고 해석할 수 있고 Y축이 frequency, 그리고 데시벨(dB)이 Z 축으로 색으로 표현됨을 알 수 있다.

각 frame 마다의 spectrum을 그냥 평균 내서 하나의 벡터로 사용하는 경우도 있다.(ex. 환경음, 새소리) 하지만 time-dependancy가 중요한 데이터나 task의 경우 차곡차곡 잘 옆으로 쌓자! 그다음 제곱하고 N으로 나눠주면 위 그림 같은 normarlize Spectrogram을 얻을 수 있다.