Beamformer를 알기위해 시작한 공부가 multi-channel speech processing의 전반적 내용에 대한 궁금증으로 이어졌다. 지금까지는 single channel에서의 processing에 대해서만 다뤄왔는데, 2개 이상의 마이크를 이용한 speech signal을 어떻게 처리하는 지에 대해, 내가 공부해보려고 정리하는 포스팅이 될 것이다. multi-channel speech recognition(다채널 음성인식)은 어떤 흐름으로 진행되는지 살펴보고, 다채널음성인식을 위한 전처리의 내용을 집중해서 살펴볼 것이다. 본 포스팅은 이 논문을 정리하였다.
Multi-channel speech processing 어디에 쓰는가?
채널=마이크갯수 라고 생각하면 된다. 내가 받는 signal이 몇개인지를 채널이라고 생각할 수 있다. 마이크갯수를 늘리고 있는 좋은 예시로 AI스피커가 있다.
AI스피커는 자고로 말을 잘알아듣는게 중요하다. spatial information(공간정보)를 추가적으로 활용하면 원거리 음성인식에 도움이 되기 때문에, 음성인식기술이 발전하면서 더 좋은 인식률을 위해 마이크개수가 늘어나는 추세이다. (마이크의 배치를 함으로서 어디서 오는지에 대한 공간정보를 얻을 수 있다.)
아마존 에코닷은 7개의 마이크, 샤오미의 Mi AI스피커는 6개의 마이크를 장착하고있다. 한국의 AI스피커들은 2~4개의 마이크를 내장하고있다고 알고있고.. 삼성은 2개의 마이크의 갤럭시 홈 미니만 출시, 갤럭시홈은 마이크를 8개 내장할 것이라고 했으나 아직 출시는 안되고 있다. (구글홈은 마이크 2개인데 기술력이 갓인가...)
처음 설명했던 '채널'에 대해 다시 설명하자면, 마이크(microphone)의 수가 1개보다 많아지게 되면 1채널(single-channel)이 아니라 다채널(multi-channel)이 된다. 마이크의 개수만큼의 채널로 음성신호를 받기 때문. 그렇기 때문에 multi-channel의 신호를 처리할 수 있는 기술들이 필요하게 된다. 그럼 multi-channel일때의 음성인식과정을 통해 multi-channel speech processing을 알아보자.
Multi-channel speech recognition(다채널 음성인식)은 어떻게 이루어지는가?
하나의 마이크가 아닌 여러 마이크를 이용한 multi-channel speech recognition은 어떻게 할까? AI스피커에 말을 하는 상황을 생각해보자. clean한 음성만 들어가면 참 좋겠다만, 우리는 원거리에서 인식해야하는 상황도 있을 것이고(신호약함) 생활소음(noise,잡음)이나 방에 부딪혀 울리는 소리(reverberation,반향),여러명이 동시에 말하는 상황도 있을 것이다. 이런 어려운 상황에서 처리를 해야하기 때문에, 어떻게 음성신호를 전처리하는지가 중요하게 된다.
multi-channel speech recognition을 두 가지 카테고리로 나눠볼 수 있다.
1) 공간정보를 활용한 전처리를 통해 single channel신호를 뽑아서 음성인식
이 방법은 전처리연구를 따로/ single channel speech recognition따로 한다고 생각하면 되겠다. 음성인식 모듈로 들어가기 직전까지 전처리과정을 통해 single channel signal을 만드는데, 여기서 target을 tracking하고(target의 위치) 그 위치에 가중치를 둬 beamforming을 한다. 그리고 이때 output으로 나온 single channel signal에 대해서 잔여 noise를 postfilter를 통해 제거한다. (beamformer에 대해서는 아래에서 더 자세히 다루기로 하겠다.)
2)Multi-channel enhancement(음성향상)과 음성인식을 joint하게 동시에 학습(end-to-end)
1)또는 2)의 과정을 거친 결과(text)는 자연어처리파트로 들어가서 해석되게 된다.(이는 논의할 내용밖이므로 생략) general하게 음성인식의 과정을 정리해보았다.
전체 process를 정리해보면, 처음 들어오는 input은 마이크의 개수만큼의 signal이 들어올 것이다. 마이크가 6개면 signal이 6개가 들어오는 것이다. 그럼 이 signal에 대해 각각 음성인식을 하는 것일까? 그렇지 않다. 6개의 신호를 받으면, 전처리를 통해서 내가 듣고자 하는 신호만을 강조한 single channel signal을 뽑아낸다. 그렇게 나온 single channel signal을 AM(Acoustic Model,음향모델)에 통과시켜 입력신호와 정답값인 음소값과 얼마나 일치하는지로 판단. 그리고 LM(Language Model,언어모델)으로 AM에서 뽑아낸 sequence(단어열)를 정확한 어순으로 맞춰준다.
나는 다채널음성인식의 두 가지 연구방향 중 첫번째인, "1)여러 마이크를 가진다는 장점을 이용해서 공간정보를 활용한 전처리를 통해 single channel신호를 뽑아서 음성인식"에 초점을 맞추고 single channel signal을 뽑아내기 위한 multi-channel speech processing에 대해 알아보자.
Spatial features(공간정보,공간특징)은 무엇이 있는가?
만약 사람의 귀가 2개있는 것처럼 마이크가 2개있다고 하자. 이때, 두 귀로 들어오는 신호의 시간차이와 신호의 세기차이가 존재할 것이다. 이런 차이들을 공간정보로 이용할 수 있다.
- ITD(Interaural Time Difference): 두 신호가 들어오는 시간의 차이
- ILD(Interaural Level Difference): 두 신호가 들어오는 신호세기의 차이
- IPD(Interaural Phase Difference): 두 신호의 phase 차이(시간의 delay는 결국 phase성분이 되기 때문에, 주파수상에서의 차이를 phase차이로 볼 수 있다. (ITD와 다르게 주파수성분마다의 phase difference가 존재하게된다.))
TDOA(Time Delay of Arrival)란 무엇인가?
우리가 spatial information(공간정보)를 이용하기 위해서는, target(원하는 신호)와 interfering sources(방해하는 신호)가 어디서 부터 오는지를 알아야 한다. 마이크가 위치가 다 다르기때문에, 소리가 오는 시간도 차이가 생긴다. 이를 TDOA라고 한다. TDOA는 사실 reverberant audio에서는 정확히 알고있는 정보가 아니다. 그렇기 때문에 잘 추정하는 것이 beamformer성능에 영향을 미친다. 두가지 model을 가정하고 ideal한 상황에서 TDOA를 구해보자.
Near-field model
target source가 microphone array와 가까운 곳에 위치하고 있을 때를 말한다.(ex. 휴대전화통화) 이때는 wavefront가 spherical하다고 가정하고, m번째 microphone과 n번째 microphone사이의 거리차를 소리의 속도로 나눠주어 TDOA를 구할 수 있다.
Far-field model
target source가 먼 곳에 위치하고 있을 때를 말한다.(ex. 스피커폰, AI스피커) 이때는 wavefront가 planar하다고 가정하고 두 microphone사이의 거리차이에 cos을 취한 값으로 difference를 구한다. 여기도 역시 마찬가지로 소리의 속도 c로 나눠주면 TDOA를 구할 수 있다.
Beamformer란 무엇인가?
beamformer는 target에서 오는 신호만 증폭시켜 원치않는 신호의 효과를 줄이고 싶은 방법이다. 이를 어떻게 구현할 수 있을까? Filter-and-sum(FS) 이라는 방법을 이용할 수 있다. N개의 마이크에서 받은 신호에 각각 weight를 곱해서 그것들을 다 더해서 y(t)라는 신호를 만드는 방법이다. 이때 weight를 어떻게 결정할 것이냐에 따라 beamformer의 종류가 나눠지며, 잘 조절하여 y(t)=f(t)가 되길 바라는 것이다.
이제 수식으로 기본적인 구조를 살펴보자. f(t)라는 target신호가 있을 때, far-field를 가정하여 각각의 마이크에서 받은 신호를 모아 벡터를 만들었다. 그것을 f(t)라하자.
여기서 S는 마이크의 개수를 뜻한다. 이를 주파수상에서 표현해보면 아래와 같다.
time-delay는 주파수로 넘기면 phase가 되므로 그부분만 따로 v(k,w)로 정의하였다. 그러면 마이크에서 받은 신호벡터 F(w)는 target신호 F(w)에 v(k,w)를 곱한 것으로 쓸 수 있다.
여기서 이제 우리가 구하고 싶은, 각각 마이크에서 받은 신호에 대한 weight를 정의해볼 것이다. X(w)가 우리가 모든 센서에서 받은 신호로 만든 벡터형태라고 했을 때, 여기에 weight vector를 곱해서 output을 만들 수 있다.
그리고 더불어서 아까 구한 target signal과 연관지어 식을 다시 정리할 수 있다.
일반적으로 weight vector는 위의 식을 만족하게 된다.
이제 대표적인 beamformer 두 가지를 알아보도록 하겠다.
DS(Delay-and-Sum) beamformer
가장 간단한 beamforming algorithm이다. DS beamforming의 weight는 아래와 같이 설정할 수 있다.(S는 microphone개수)
만약 interference나 distortion이 없다면 beamforming의 output은 original signal과 같아진다.
MVDR(Maximum Variance Distortionless Response) beamformer
DS beamformer가 noise suppression성능이 좋지않기 때문에 공간적으로 correlated되어있는 noise와 interference N(w)를 adaptive하게 억제할 수있다. 그 방법은 beamformer의 weight를 noise와 interference의 variance를 minimize하도록하는 것이다! 이를 유도하기 위해 먼저 error signal을 정의한다.
error의 MSE를 구해보면,
MSE에서 interference부분(covariance matrix)을 minimize하면 된다.
여기서 왜곡이 생기지 않는 조건을 걸어줘야 하는데 그 조건은 아래와 같다.
정리해서 써보면 아래와 같다.
조건이 걸린 optimization은 라그랑주승수로 풀 수 있다.
두 가지 beamformer의 beam pattern비교
microphone이 linear array일때, DS와 MVDR의 beam pattern을 direction에 따라 나타냈다. 여기서 look direction이 우리가 target으로 하는 방향이다. DS를 보면, MVDR보다 sidelobe가 높은 것을 확인할 수 있다. 그러므로 noise에 더 취약할 수 있다. 반면 MVDR은 sidelobe가 더 낮은 것을 볼 수 있고 interference direction에서 gain이 낮은 것을 확인할 수 있다.
Generalized Sidelobe Canceller(GSC)
GSC는 MVDR beamformer에서 weight를 constraint part와 unconstraint part로 나누어 생각하 beamformer로 생각할 수 있다. (MVDR의 implementation을 위한 구조) 자세한 내용을 살펴보면 아래와 같은 구조를 띄고있다.
더 간단하게 block도를 그려보면 아래와 같다. fixed beamformer를 통해 나온 desired 신호가 증폭된 output에서 또다시 노이즈성분을 빼주는 형식이다.
간단한 예를 들어 look direction이 0도이고, 4개의 mic가 존재한다고 하자. 가장 쉽게 생각할 수 있는 fixed beamformer는 아래와 같다.
blocking matrix는 아래와 같이 생각할 수 있다. blocking matrix는 band rejection filter들의 bank라고 생각하면 된다. -1과 1이 target신호를 제거하여 noise부분만 남기게 된다.
w와 Ca의 각벡터가 orthogonal함을 알 수 있다.
또한 윗부분에서 wq와 v(k,w)를 같은벡터로 두면 MVDR beamformer의 constraint부분을 만족하게 되고,
아래부분에서는 noise power를 최소화하는 unconstraint minimization문제로 볼 수 있다.
Reference
[1] Li, Bo, et al. "Neural network adaptive beamforming for robust multichannel speech recognition." (2016).
[2] Chang, Xuankai, et al. "MIMO-Speech: End-to-End Multi-Channel Multi-Speaker Speech Recognition." arXiv preprint arXiv:1910.06522 (2019).
[3] Kumatani, Kenichi, John McDonough, and Bhiksha Raj. "Microphone array processing for distant speech recognition: From close-talking microphones to far-field sensors." IEEE Signal Processing Magazine 29.6 (2012): 127-140.
'Domain Knowledge > Speech' 카테고리의 다른 글
Normalized log mel-spectrogram의 python 구현 (0) | 2020.08.03 |
---|---|
MFCC(Mel Frequency Cepstrum Coefficient)의 python구현과 의미 (2) | 2020.08.03 |
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 |