컴퓨터로 sound data를 표현하는 방법들에 대하여(Fourier transform, spectrogram, melspectrogram, MFCC)
1. sound representation
기본적으로 sound data는 1d signal waveform으로 주어짐
waveform에서 점을 임의로 뽑아 다음과 같이 1d tensor로 만듦
시간축에 따른 waveform을 그대로 사용하기는 어려워서 주파수 축에 옮기기 위해 Fourier transform을 이용
근데 그냥 전부 옮기는 것이 아니고 시간에 따른 변화를 파악하기 위해 굉장히 짧은 구간에서 변형시키는 short time Fourier transform을 사용
시간에 따른 변화를 구할려면 sliding window방식으로 구간을 옮겨가면서 변화시켜야함
짧은 구간인 A(20~25로 hyperparameter)에서 가운데 부분을 강조시키면서 boundary는 약하게 만들어서 spectrum으로 만든다
hamming window에 나타난 분포와 waveform의 element wise product로 spectrum을 만든다고 한다
window는 B(hop size=offset)만큼 overlap시키면서 sliding시켜서 약해진 boundary를 보충하는 느낌으로 변환
2. Fourier transform
여러가지가 섞인 시간축의 waveform 각각에 주파수가 어느정도 있는지 wave 하나하나 분해하는 것이 Fourier transform
fourier transform으로 변환한 wave들을 모두 합쳐 frequency-magnitude 공간에 나타내면 spectrum
주파수 축으로 나타내면 머신러닝이 acoustic feature를 뽑아내기 편함
wave 하나하나 분해해서 주파수로 만들어서 하나하나 합쳐 spectrum으로 나타냄
주파수축으로 나타내면 남자는 저주파수, 여자는 고주파수 등 acoustic feature를 뽑아내기 편함
시간축의 wave를 주파수 축으로 바꾸겠다는거네
3. spectrogram
frequency-magnitude spectrum을 시간에 따른 변화를 파악하고자 시간축에 따라 spectrum을 쌓아 만든 것
단순히 spectrum을 쌓기보다는 frequency와 magnitude에 log scale을 사용한다.
왜냐하면 사람이 소리를 듣는 것은 log scale에 가까워서 그렇다.
시간에 따라 주파수를 파악할 수 있음
소리를 눈으로 볼 수 있는 이미지로 바꾼 형태
4. melspectrogram
4-1) mel scale
사람의 귀는 저주파, 고주파를 인식하는 곳이 다름
사람은 동일한 주파수 차이더라도 고주파수 10100hz와 10500hz는 차이를 못느끼지만 저주파수 100hz와 500hz의 차이는 잘 느낌
이러한 차이를 반영한 scale변환 함수를 mel scale이라고 부름
4-2) mell filter bank
mel scale을 linear하게 N개의 구간으로 나눠서 얻은 triangular filter
spectrum에 mel filter bank를 적용하여 얻은 spectrum이 mel spectrum으로
주파수 영역대에 따라 filter를 적용하여 다르게 관찰한 것이다.
mel spectrum에 log scale을 적용한 log mel spectrum을 시간축으로 쌓아올리면 melspectrogram이 된다.
5. MFCC(Mel Frequency Cepstral Coefficient)
사람이 말하는 방식에 따라 특징이 있어서 이러한 점을 반영하고 싶은 것이 MFCC
log spectrum에서 높은 부분(=formant)을 뽑아 파형을 그대로 만들면 cepstrum이라고 부름
cepstrum에서 원하는 부분의 값을(12개정도?) 뽑아 시간축으로 쌓아 만든 것이 MFCC라고 한다.
melspectrogram이나 MFCC나 성능은 비슷하다고 한다...
'딥러닝 > 딥러닝 기초' 카테고리의 다른 글
구현하면서 배우는 weight initialization(가중치 초기화) 중요성 (0) | 2023.09.13 |
---|---|
구현하면서 배우는 batch normalization에 대한 몇가지 핵심사항 (0) | 2023.09.13 |
Nearest neighbor search vs. t-sne를 이용한 차원 축소 기법 (0) | 2023.06.18 |
자연어 처리 기술의 또 다른 혁명 - ChatGPT 시대 우리는 무엇을 해야하는가 - (0) | 2023.06.02 |
validation set의 필요성 이해하기 재활 (0) | 2023.05.05 |