동아리에서 논문세미나를 하다가 speech를 전공하지 않으시는 분들에게 왜 frame을 overlap하냐는 물음을 받았다. 음성신호를 연구하는 사람들이라면 overlap을 당연하게 받아들이겠지만, 어떻게 말로 표현해야할지 고민이 되어서 간단히 정리해두기로 한다. (사실 이 링크 한글번역임) 그리고 왜 frame 단위의 처리를 하는 지에 대해서 내가 쓴 포스팅을 이 링크에서 확인할 수 있다.
window 와 frame
음성신호는 stationary하지 않지만 생각보다 그렇게 빠르게 변하지도 않는다. 이때 신호를 stationary한 작은 청크로 잘라서 처리하면 되겠다는 생각을 할 수 있다. 윈도잉(windowing)은 신호를 어느부분을 볼 지 정하는 창이다. 이를 이용해 신호를 작은 청크로 자른다. 이 청크를 frame이라고 한다. 그래서 충분히 작은 frame으로 자른다면, stationary한 신호를 얻을 수 있다. 이제 이런 stationary한 신호에 Fourier변환과 같은 여러 기법을 적용할 수 있다.
Overlap을 왜 해야 하는가?
이렇게 frame단위로 잘라서 처리를 하게되는데, 인접한 두 프레임을 처리할 때 두 프레임간의 property의 변화로 인해 프레임간의 불연속, 혹은 jump가 일어날 수 있다. 쉽게 받아들이기 위해 이미지를 예로 설명하자면, 아래의 그림과 같다. 8X8 non-overlapping blocks을 이용해서 압축을 한 JPEG(압축된 image)이미지인데 tiling이나 blocking효과가 생겨서 화질이 안좋아진다. 심지어 듣는 것은 어떻겠는가...음질이 안좋아진다.
frame을 생각해보면 중간에는 당연히 안정적인 구조가 나올 것이고 왼쪽/오른쪽 양 끝에서 가장 많이 다를 것이다. 이것이 이해가 안된다면, window의 모양을 생각해보면 된다. 우리가 FFT를 할 때 사용하는 윈도우들은 대체로 테이퍼드의 형태를 사용하고 있다. 이를테면 hamming window는 아래와 같은 형태를 띈다.
Time domain의 window를 보면, 가장자리에서 0에 가까운 값을 가짐을 알 수 있다. 이런 window를 써서 FFT를 하게 되면 transient같은 중요한 정보를 손실할 수 있다. 따라서 window를 사용하므로써 발생하는 부정적인 영향을 줄이기 위해 fft에서 overlap을 사용한다. 그래서 frame간의 이런 급작스러운 변화를 막고 이를 보정하기 위해 overlap을 쓴다고 보면 되겠다. 결론적으로 overlapping window는 frame의 양 끝단에서 신호의 정보가 자연스럽게 연결되게 하기 위해 사용한다.
'Domain Knowledge > Speech' 카테고리의 다른 글
LPC(Linear Prediction Coding, 선형예측부호화)와 formant estimation (0) | 2020.07.31 |
---|---|
Pitch detction(ACF, AMDF, Cepstrum) (0) | 2020.07.31 |
Speech production and perception(음성의 생성과 인지) (0) | 2020.07.31 |
STFT(Short-Time Fourier Transform)와 Spectrogram의 python구현과 의미 (6) | 2020.07.30 |
DFT(Discrete Fourier Transform)와 Circular Convolution (2) | 2020.07.07 |