본문 바로가기

연구실 공부

spectrum, spectrogram, Mel-spectrogram, MFCC

728x90

음성에 들어있는 정보(발음의 종류, 성별, 음색, 높이 등)는 음성 신호 자체에서 쉽사리 얻어낼 수 없고, 수학적인 신호 처리를 거쳐야만 추출할 수 있습니다.  그중 대표적인 한 가지로, 음성을 주파수(frequency, Hz)라는 또 다른 축으로 관측하는 방법이 있습니다.

frequency란, 신호가 1초에 몇 번 진동했는지를 나타내는 수치이며, 소리는 빠르게 진동할수록, 즉 주파수가 높을수록 음이 높게 들립니다. 주파수가 낮다면 저음이 들리게 됩니다. 자연에서 들을 수 있는 모든 소리는 다양한 주파수 성분들의 합으로 이루어져 있습니다.

그래서 Fourier transform을 이용해 소리를 다양한 주파수 성분들로 분해합니다. Fourier transform이라는 함수를 사용하면 특정 시간 길이의 음성 조각(frame)이 각각의 주파수 성분들을 얼마나 갖고 있는지를 의미하는 spectrum을 얻을 수 있습니다. 즉 frame마다 어떤 주파수 성분들의 amplitude를 얻을 수 있습니다.

이렇게 음성 전체로부터 얻은 여러 개의 spectrum을 time-axis에 나열하면 시간 변화에 따른 spectrum의 변화인 spectrogram을 얻을 수 있게 됩니다.

 

위 왼쪽 그래프는 spectrum이며 오른쪽 아래 그림은 spectrogram입니다. spectrum을 보면 frame에서 측정된 signal의 다양한 frequency의 amplitude를 그려주고 있습니다. spectrogram을 보면, time-axis에 따라 각 frequency에 맞는 amplitude(색을 통해)를 표현해주고 있습니다. 이렇게 음성을 표현할 수 있습니다. 이렇게 frame 별로 나눠서 fast Fourier transform을 하는 것을 Short time Fourier transform이라고 합니다. 이 short time fourier transform을 할 떄, 얼만큼의 window 크기를 가지고 얼만큼 shift할 지 정해 spectrogram을 얻어낼 수 있습니다.

 

음성이 만들어지는 과정

발음을 결정하는 소리의 최소 단위인 음소(phoneme)는 크게 2가지로 구분할 수 있습니다.

발성할 때 성대(vocal cord)의 진동을 동반하는 유성음(voiced)과 진동 없이 성대를 통과하는 무성음(unvoiced)이 있습니다.

사람의 발성 구조를 공학적으로 해석할 때, 성대를 막 통과한 소리를 excitation signal(여기 신호)이라고 부릅니다. 이때 유성음 여기 신호의 파형은 준주기성(quasi-periodic, 완전히 주기적이지 않으면서도 일정한 패턴을 반복하는 성질)을 띄게 되며, 성대의 진동 속도에 따라 고유의 기본 주파수(fundamental frequency)와 기본 주파수의 배수에 해당하는 여러 배음(harmonics)들로 전체 spectrum이 구성됩니다. 배음 구조는 악기나 성대의 구조에 따라 달라지며, 배음 구조의 차이가 음색의 차이를 만듭니다.

 

spectrum에서 배음 구조를 유추해낼 수 있다면, 소리의 고유한 feature를 찾아낼 수 있습니다. 이를 cepstral 분석이라고 합니다.

반면, 무성음 여기 신호의 파형은 성대가 진동하지 않아 다양한 주파수 성분이 고르게 포함된 백색소음(white noise)과 같은 spectrum을 갖습니다.

 

위 표와 같이 분류할 수 있습니다. 

 

위 그림은 사람이 음성을 만들 때 사용하는 기관들의 동작과 이들을 각각 공학적으로 모델링한 특징 정보들의 관계를 나타냅니다. 처음 폐에서 만드는 압축된 공기는 백색소음에 가까운 비주기성(aperiodicity) 신호로, 정규분포와 같이 쉽게 사용할 수 있는 확률분포로 모델링할 수 있습니다. 성대를 통과한 직후의 여기 신호는 유성음/무성음 여부에 따라 구분되며, 유성음의 경우 기본 주파수 등의 특징을 담고 있습니다.

 

위 그림은 일반적인 spectrum입니다. 화살표로 지목된 peak들은 신호에서 지배적인 주파수 영역을 가리킵니다. 이 peak들이 formant라고 합니다.

이후 목, 코, 입, 혀 등의 성도(vocal tract)를 통과하며 발음이 결정되는데, 발음마다 성도의 구조가 달려져 증폭되는 주파수 대역과 감쇠되는 대역 역시 달라지게 됩니다. 이를 스펙트럼 포락선(spectrum envelope)이라고 하며, 발음의 종류를 결정하는 주요한 특징 중 하나입니다.

다시 말하자면, formant는 소리가 공명되는 특정 주파수를 의미합니다. 사람의 음성은 성대에서 형성되어 성도를 거치며 변형되며, 소리는 성도를 지나면서 formant를 만나 증폭되거나 감쇠됩니다. formant는 배음과 만나 소리를 풍성하게 혹은 선명하게 만드는 필터 역할을 합니다. 그러한 formant를 연결한 선을 spectrum envelope이라고 합니다.

spectrum과 spectrum envelope을 분리하는 것을 cepstral이라고 합니다.

이렇게 각 발성 기관의 동작을 공학적으로 모델링하고, 각 feature들을 추출, 변환, 예측하는 기술이 음성 압축, 음성 변환, 음성 합성 등의 영역에 적용되어 연구 개발됩니다.

 

음성을 듣는 과정

소리를 듣는 기관인 귀는 귓바퀴에서 소리를 모으고, 고막과 이소골이 진동하여 달팽이관의 청각 세포를 자극하면 전기 신호가 발생해 이를 뇌에 전달하는 방식으로 동작합니다. 달팽이관은 길게 늘어진 관을 돌돌 말은 모양과 같으며, 액체로 가득 차 있는 이 관에는 청각 세포들이 일렬로 나열해 있는 기관이 존재합니다. 밖에서 진동이 전달되면 기관의 특정 청각 세포가 자극되어 전기 신호를 발생시키는데, 청각 세포마다 인지할 수 있는 주파수 대역이 다릅니다.

 

위 그림과 같이 달팽이관의 가장 안쪽 청각 세포는 저주파 대역을 인지하며, 바깥쪽 청각 세포는 고주파 대역을 인지합니다. 중요한 점은 모든 주파수 대역을 같은 비중으로 인지하지 않고, 고주파에서 저주파로 내려갈수록 담당하는 주파수 대역이 점점 더 조밀해집니다. 실제로 sound signal은 저주파 대역에 의미 있는 정보가 집중되어 있음을 생각해 보면, 인간의 청각 구조는 보다 중요한 음성 정보에 더 집중해서 들을 수 있는 상태임을 알 수 있습니다.

 

위 그래프는 Mel-scale 그래프입니다. 이는 실제 주파수 정보를 인간의 청각 구조를 반영하여 수학적으로 변환하는 대표적 방법입니다. Mel-scale은 주파수 성분을 중요도에 따라 차등적으로 사용하기 위한 좋은 지표로써 다양한 음성처리 분야에서 사용되고 있습니다.

 

 

 

Mel-scaled spectrogram에서 더 나아가 Mel-Frequency Cepstral Coefficient(MFCC)도 음성 feature vector로 자주 사용됩니다. MFCC를 구하기 위해선 다음과 같은 단계가 필요합니다.

  1. 전체 audio signal을 일정 간격으로 나누고 fourier transform을 거쳐 spectrogram을 구합니다.
  2. 각 spectrum의 제곱인 power spectrogram에 Mel scale filter bank를 사용해 차원 수를 줄입니다.
  3. cepstral 분석을 적용해 MFCC를 구합니다.

위 그림이 Mel scale filter bank입니다.

Cepstral 분석은 Fourier transform을 거쳤을 때 시간 축에서 천천히 변하는 정보가 낮은 frequency 성분에 위치하고, 빨리 변하는 정보가 높은 frequency에 위치한다는 점에 착안한 방법입니다. 주파수 축에서 다시 한번 Fourier transform을 사용하면 천천히 변하는 spectrum envelope 정보는 낮은 성분에 위치하고, 빨리 변하는 여기 신호 정보는 높은 성분에 위치하게 되어, 적절한 선택을 통해 원하는 정보가 내재된 feature vector를 만들 수 있습니다.

MFCC를 계산하는 과정은 다소 복잡하지만, 그만큼 효과적인 음성 정보를 추출해 낼 수 있습니다. 인간의 청각 구조를 반영한 Mel scale filter bank를 사용하여 효율적으로 특징을 압축할 수 있고, cepstral 분석을 통해 음성 인식에 필요한 발음 특성을 spectrum envelope 정보로 구할 수 있습니다.

Mel scaled spectrum에서 spectral envelope을 분리하여 분석하는데 이때 MFCC를 얻게 됩니다. Mel spectrum에 log를 적용한 후 inverse Fourier transform을 적용하여 log MFCC를 얻을 수 있습니다. log를 적용하는 이유로, log 없이 cepstral analysis를 진행해 MFCC를 얻어내면 버리는 정보가 너무 많아지기 때문입니다. 그래서 log를 씌워 data 스케일을 축소시키고 변동성을 감소시킨 후 MFCC를 구합니다. 이 과정을 cepstral analysis라 합니다.

 

728x90