본문 바로가기

Audio & Speech

[Sound AI #10] 오디오 데이터 전처리 (이론)

sound if ai 강의 바탕으로 작성되었습니다.


sound?

sound 데이터를 다루기 위해선, sound가 무엇인지 어떻게 표현되는지 알아야한다.

기본적으로, sound는 어떤 물체가 진동하면서 발생한다. 예를 들어 목소리의 경우 공기 분자가 진동을 하면서 발생한다. 즉 매질인 공기 분자가 얼마나 크게 흔들렸는지에 따라 형성되는 이러한 공기압의 진폭이, waveform 형태를 띄게 되어 우리가 흔히 보는 그래프가 그려진다.

 Waveform

Y축은 Amplitude(진폭), X축은 Time(sec) 이다.

특정 지점에서 다음 등장하는 그 값까지를 period(주기)라고 정의한다. 이는 frequency(주파수) 개념으로 확장된다. Frequency는 Hz 단위를 사용하며, 1초에 100번 period(주기)가 발생하는, 즉 100번 진동하는 소리를 100Hz로 정의한다. 그래서 f = 1/T 라는 수식이 성립한다. 사람의 가청 Frequency는 약 20Hz ~ 20KHz.


Pitch, Loudness

High frequency, 즉 초당 진동 수(주기)가 많은 소리의 경우 High pitch(높은 소리)를 가진다. Amplitude는 소리의 크기(Loudness)와 관련되어 있다. 선형적이진 않지만, 대체로 Amplitude가 크면 소리가 크다.

 


Analog Digital Conversion(ADC)

Sound 데이터는 연속형 데이터이다. 이를 딥러닝에 input으로 넣기 위해선 discrete한 벡터로 만들어야 한다. 이를 위해, Analog digital conversion 과정을 거쳐야하고, 이는 SamplingQuantization 두 step으로 이루어진다. Sample rate는 초당 sample 갯수를 의미한다. 예를 들어, Sample rate = 44100Hz인 소리의 경우 1초에 44100개의 sample을 뽑았다는 말이다. Quantization은 위에 그림과 같이 continuous 한 sample 값들을 discrete value로 근사시키는 과정이다. 이와 관련된 개념으로 Bit depth가 있다. Bit depth는 quantization을 얼마나 세밀하게 할지에 대한 정도로, 예를 들어 오디오 파일의 Bit depth = 16bits 이면, 16 비트(약 65536 levels)의 값으로 dicrete하게 양자화 된 소리임을 의미한다.

 


Fourier Transform

위에서 살펴본 소리의 waveform은 ADC 과정을 거쳐도 차원이 너무 크고 여러 Frequency들이 결합되어 있어 feature를 뽑아내기가 어렵다. 푸리에 변환은 sound를 서로 각 frequency들의 합으로 표현해, waveform을 time domain에서 frequency domain으로 변환시킴으로써 이 문제를 해결한다. 밑에 그래프를 보며 이해해 보자.

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

다음의 그래프는 피아노로 C코드를 한번 친 소리의 waveform을 푸리에 변환을 통해 각 Frequency들로 분해한 모습을 보여준다. 이렇게 푸리에 변환을 통과해, time domain에서 frequency domain으로 바뀐 그래프를 Spectrum 이라고 정의한다. Spectrum은 time > frequency로 바뀔뿐만 아니라, amplitude > magnitude로 바뀐다. 이는 푸리에 변환에 의해 일어나는 복소공간 값들을 절댓값을 취해서 얻어진다. magnitude는 분리된 각 Frequency가 전체 소리에 얼마나 영향을 주는지 정도를 나타낸다.

하지만 이렇게 변환된 Spectrum은 시간 정보가 없어지는데, 우리가 다루는 sound 데이터는 다분히 time dependent 하다. 따라서 시간 정보를 보존해주기 위해 Short Time Fourier Transfrom(STFT) 라는 푸리에 변환 방법을 사용한다. STFT는 waveform을 일정한 frame으로 잘라서 각 frame마다 푸리에 변환을 취하고, 이 spectrum을 시간순으로 이어 붙여 시간 정보를 보존한다. 이를 Spectrogram 으로 정의한다.

Spectogram은 X축에 Frequency, Y축에 Time이 형성된다. 음의 세기인, magnitude를 dB로 변환해 색으로 표현해준다. 달리 말하면, Z축(dB)이 하나 더 있어서 3차원으로 형성된 그래프라고 생각해도 좋다. 이 Spectrogram을 딥러닝 모델 input값으로 써도 된다.


Mel Frequency Cepstral Coefficients(MFCC)

앞서 구한 Spectrogram이 아닌 spectrum에 Mel-filter bank를 통과시키고, log scaling 과 역푸리에 변환(IFFT)를 취해 Cepstrum Coefficient 중 낮은 12개만 선택한다. 여기에 Energy값을 더해 총 13개의 feature를 MFCC로 정의한다. 이를 1차 차분, 2차 차분한 값을 추가해 총 39차원 벡터로 MFCC를 가장 많이 사용한다.

Y축은 Cepstral Coefficients 값 12개와 맨 위는 Energy 값, X축은 time. 색은 소리의 세기를 나타내는 dB값을 나타낸다. MFCC는 음성인식, 음악 장르 분류, 악기 분류 등 다양한 sound 데이터를 활용한 인공지능 분야에서 뛰어난 성능을 보이는 feature로 활용되고 있다.