-
[ASR Study] 2. Acoustic Feature Extraction - Fourier Transform과 MFCCAI/Speech 2024. 1. 13. 23:10728x90
[ASR Study] 2. Acoustic Feature Extraction - Fourier Transform과 MFCC
- MFCC
- 기존 시스템은 물론 최근 엔드투엔드(end-to-end) 기반 모델에 이르기까지 음성 인식 시스템에 널리 쓰이는 피처
- 음성 인식과 관련해 불필요한 정보는 버리고 중요한 특질만 남긴 것
- 뉴럴네트워크 기반 피처 추출 방식과는 달리 음성 도메인의 지식과 공식에 기반한 추출 방법
- 음성 입력이 주어지면 피처가 고정된(deterministic) 형태
- 푸리에 변환(Fourier Transform)을 기반으로 함
- 시간과 주파수 도메인 관련 함수를 이어주는 수학적인 연산
- 음성 신호의 스펙트럼 분석 등에 필수적
푸리에 변환(Fourier Transform)
- Fourier Transform
- 시간(time)에 대한 함수(혹은 신호)와 주파수(frequency)에 대한 함수(혹은 신호)를 잇는 수학적인 연산
- 예시
- 두 개의 단순파(simple wave)가 시간 도메인에서 복합파(complex wave)로 표현
- 푸리에 변환을 실시하면 주파수 도메인에서 두 개의 주파수 성분으로 분해
- 반대로, 주파수 도메인에 푸리에 변환을 실시하면 시간 도메인에서 복합파를 만들어낼 수 있음
- Discrete Fourier Transform
- 음성 인식에서는 일반적으로 이산 푸리에 변환(Discrete Fourier Transform)이 쓰임
- 컴퓨터는 이산 신호를 처리하는 데 적합하기 때문
- 이산이란 연속(continuous)과 반대되는 말로써 신호의 값이 연속적이지 않고 띄엄띄엄 있어서 이것들을 제외한 시간이나 주파수에서는 값이 0인 것을 뜻함
- 수식
- 이산 푸리에 변환을 실시한 뒤 이를 다시 원래 도메인으로 변환하는 과정을 역푸리에 변환(Inverse Fourier Transform)
- 이를 이산 신호에 대해 실시한 것이 이산 역푸리에 변환(Inverse Discrete Fourier Transform)
- 음성 인식에서는 일반적으로 이산 푸리에 변환(Discrete Fourier Transform)이 쓰임
- Fourier Transform의 원리
- 오일러 공식에 기반
- 삼각함수와 지수함수에 대한 관계를 나타냄
- 오일러 공식에 기반
- exp(iθ) : 복소 평면상 반지름이 1인 단위원에 대응
- 오일러 공식에 의해 실수 파트(real unit, 코사인에 대응)와 허수 파트(imaginary unit, 사인에 대응)의 합으로 표현 가능
- 복소 지수 함수(cis)는 오일러 공식으로부터 바로 유도 가능
- 이 복소 지수 함수는 푸리에 변환의 시작점 - 노란색 파란색 주기함수에 대응
- 수식 설명
- xn은 시간 도메인의 n번째 샘플
- Xk는 주파수 도메인의 k번째 푸리에 변환 결과물
- k/N은 복소평면상 단위원에서 얼마나 빠른 속도로 회전하는지 나타내는 각 속도(angular velocity)를 가리킴
- n는 시간 인덱스(time index)
- 시간 인덱스가 1 증가한다고 할 때 각 속도 값이 클 수록 그림2의 녹색 실선에 해당하는 움직임이 커지게 됨
- 두번째 줄을 보면 푸리에 변환 결과는 복소수(complex number)
- 코사인 함수와 관계 있는 실수부(real part)와 사인 함수와 관계 있는 허수부(imeginary part)로 구성
- 첫번째 줄
- exp 앞에 시간 도메인의 원래 시그널 xn이 곱해짐
- 지수를 포함한 exp항은 복소평면 단위원 위에서 이뤄지는 운동을 의미
- 단위원의 반지름은 1이므로 수식1의 시그마 안에 있는 점들의 복소평면상 좌표값은 xn에 의존적
- 복소평면상 이들 점들을 모두 더하는 것이 이산 푸리에 변환을 적용한 Xk
- 주파수(frequency)가 k/N 일 때 시간 도메인의 원래 신호의 무게 중심
- 시간 도메인 원래 신호에서 k/N에 해당하는 주파수 성분
- DFT Matrix
- 이산 푸리에 변환을 matrix form으로 표현하면 ...
- 벡터 x는 시간 도메인의 원래 신호, 행렬 W는 수식1 exp항에 대응
- 따라서 W의 각 행은 복소평면상 단위원에서 도는 각기 다른 각 속도를 나타냄
- 예시
- 시간 도메인의 원래 음성 신호가 8개일 때 이산 푸리에 변환을 수행하기 위한 DFT 행렬
- 고속 푸리에 변환(Fast Fourier Transform)
- 기존 푸리에 변환에서 중복된 계산량을 줄이는 기법
- 이산 코사인 변환(Discrete Cosine Transform)
- 이산 푸리에 변환과 유사하나 복소수 파트를 날리고 실수 파트만을 사용해 효율성을 높임
MFCC (Mel-Frequency Cepstral Coefficients)
- Mel-Frequency Cepstral Coefficients(MFCC)를 만드는 전체 과정
- 입력 음성을 짧은 구간(대개 25ms 내외) 나눔 -> 잘게 쪼개진 음성을 프레임(frame)
- 프레임 각각에 푸리에 변환(Fourier Transform)을 실시해 해당 구간 음성(frame)에 담긴 주파수(frequency) 정보를 추출
- 모든 프레임 각각에 푸리에 변환을 실시한 결과를 스펙트럼(spectrum)
- 스펙트럼에 사람의 말소리 인식에 민감한 주파수 영역대는 세밀하게 보고 나머지 영역대는 상대적으로 덜 촘촘히 분석하는 필터(Mel Filter Bank)를 적용
- 이게 멜 스펙트럼(Mel Spectrum) / 여기에 로그를 취한 것이 바로 로그 멜 스펙트럼(log-Mel Spectrum)
- 로그 멜 스펙트럼에 역푸리에변환(Inverse Fourier Transform)을 적용해 주파수 도메인의 정보를 새로운 시간(time) 도메인으로 바꾼 것
Step 1. Raw Wave Signal -> Preemphasis
- Preemphasis
- 고주파 성분의 에너지를 올려주는 전처리 과정
- 사람 말소리를 스펙트럼(spectrum)으로 변환해서 관찰하면 일반적으로 저주파(low frequency) 성분의 에너지(energy)가 고주파(high frequency)보다 많은 경향 (모음에서 이런 경향 많이 보임)
- 고주파 성분의 에너지를 조금 올려주면 음성 인식 모델의 성능을 개선할 수 있다
- 효과
- 상대적으로 에너지가 적은 고주파 성분을 강화함으로써 원시 음성 신호가 전체 주파수 영역대에서 비교적 고른 에너지 분포를 갖도록 함.
- 푸리에 변환시 발생할 수 있는 numerical problem 예방.
- Signal-to-Noise Ratio(SNR) 개선.
- 수식
- preemphasis coefficient α는 보통 0.95나 0.97을 사용
Step 2. Framing
- 음성 신호가 stationary하다고 가정해도 좋을 만큼 원시 음성 신호를 아주 짧은 시간 단위(대개 25ms)로 잘게 쪼개기
- stationary란 ‘마치 지속적으로 울리는 사이렌 소리처럼 시점이 변하더라도 해당 신호가 변하지 않는다’는 걸 의미
- 적용 이유
- 원시 음성 신호는 아주 빠르게 변화(non-stationary)
- 분석 대상 시간 구간이 지나치게 길 경우 빠르게 변화하는 신호의 주파수 정보를 정확히 캐치하기 어려울 뿐더러 주파수 정보가 전체 시간 구간에 걸쳐 뭉뚱 그려져 음성 인식 모델의 피처로서 제대로 작동하기 어려움
- 원시 음성 신호는 아주 빠르게 변화(non-stationary)
Step 3. Windowing
- 각각의 프레임에 특정 함수를 적용해 경계를 스무딩하는 기법
- 대표적으로 해밍 윈도우(Hamming Window)라는 함수가 있음
- 수식 ( n은 해밍 윈도우 값 인덱스, N은 프레임 길이)
- 프레임 중간에 있는 값들은 1이 곱해져 그대로 살아남고 양 끝 부분은 0에 가까운 값이 곱해져 그 값이 작아짐
- 수식 ( n은 해밍 윈도우 값 인덱스, N은 프레임 길이)
- 해밍 윈도우(Hamming Window) 쓰는 이유
- Rectangular Window : 원시 음성 신호를 짧은 구간 단위로 잘게 쪼개는 framing을 수행
- Rectangular Window로 자른 프레임의 양끝에서는 신호가 살아 있다가 갑자기 죽는(=0) 상황이 발생
- 이같은 프레임에 이후 푸리에 변환을 실시하게 되면 불필요한 고주파(high frequency) 성분이 살아남게 됨
- 해밍 윈도우를 적용하게 되면 그림의 하단 우측처럼 양끝 부분이 스무딩되어 앞서 설명한 부작용을 완화할 수 있게 됨
- Rectangular Window : 원시 음성 신호를 짧은 구간 단위로 잘게 쪼개는 framing을 수행
Step 4. Fourier Transform
- 고속 푸리에 변환(Fast Fourier Transform) 적용
- 시간(time) 도메인의 음성 신호를 주파수(frequency) 도메인으로 바꾸는 과정
- 진폭은 이 주파수 성분의 크기를, 위상은 해당 주파수의 (복소평면상 단위원상)위치를 나타냄
- MFCC를 구할 때는 음성 인식에 불필요한 위상 정보는 없애고 진폭 정보만을 남김
Step 5. Log-Mel Spectrum
- 사람의 소리 인식은 로그(log) 스케일에 가깝다
- 사람이 두 배 큰 소리라고 인식하려면 실제로는 에너지가 100배 큰 소리여야 한다
- 멜 스펙트럼 혹은 로그 멜 스펙트럼은 태생적으로 피처(feature) 내 변수 간 상관관계(correlation)가 존재
References
https://ratsgo.github.io/speechbook/docs/fe
https://ratsgo.github.io/speechbook/docs/fe/ft
https://ratsgo.github.io/speechbook/docs/fe/mfcc
728x90'AI > Speech' 카테고리의 다른 글
- MFCC