LPC 계수를 사용하여 형성음(formant) 추정하기
이 예제에서는 LPC(선형 예측 코딩)를 사용하여 모음 형성음(formant) 주파수를 추정하는 방법을 보여줍니다. 형성음 주파수는 예측 다항식의 근을 구하여 얻을 수 있습니다.
이 예제에서는 Signal Processing Toolbox™에 포함된 음성 샘플 mtlb.mat
를 사용합니다. 음성에는 저역통과 필터가 적용되었습니다. 이 음성 샘플은 샘플링 주파수가 낮기 때문에 이 예제에 이상적이지는 않습니다. 낮은 샘플링 주파수는 데이터에 피팅할 수 있는 자기회귀 모델의 차수를 제한하기 때문입니다. 이런 제약이 있음에도 이 예제에서는 LPC 계수를 사용하여 모음 형성음을 확인하는 기법을 잘 보여줍니다.
음성 신호를 불러옵니다. 이 음성 신호는 한 여성이 "MATLAB®"이라고 말한 것을 녹음한 것입니다. 샘플링 주파수는 7418Hz입니다.
load mtlb
MAT 파일에는 음성 파형 mtlb
와 샘플링 주파수 Fs
가 들어 있습니다.
spectrogram
함수를 사용하여, 분석할 음성 세그먼트를 식별합니다.
segmentlen = 100; noverlap = 90; NFFT = 128; spectrogram(mtlb,segmentlen,noverlap,NFFT,Fs,'yaxis') title('Signal Spectrogram')
0.1초~0.25초의 세그먼트를 분석용으로 추출합니다. 추출되는 세그먼트는 대략 "MATLAB"의 첫 번째 모음 /ae/에 해당합니다.
dt = 1/Fs; I0 = round(0.1/dt); Iend = round(0.25/dt); x = mtlb(I0:Iend);
선형 예측 코딩 전에 음성 파형에 일반적으로 적용되는 두 가지 전처리 단계는 윈도우 적용과 프리엠퍼시스(고역통과) 필터링입니다.
해밍 윈도우를 사용하여 음성 세그먼트에 윈도우를 적용합니다.
x1 = x.*hamming(length(x));
프리엠퍼시스 필터를 적용합니다. 프리엠퍼시스 필터는 고역통과 전극점(AR(1)) 필터입니다.
preemph = [1 0.63]; x1 = filter(1,preemph,x1);
선형 예측 계수를 구합니다. 모델 차수를 지정하려면, 일반적으로 적용되는 규칙으로서 예상 형성음 개수의 두 배에 2를 더한 값을 사용하십시오. 주파수 범위 [0,|Fs|/2]에서 예상되는 형성음 개수는 3개입니다. 따라서 모델 차수를 8로 설정합니다. lpc
에서 반환되는 예측 다항식의 근을 구합니다.
A = lpc(x1,8); rts = roots(A);
LPC 계수가 실수 값이기 때문에 근이 켤레 복소수 쌍이 됩니다. 허수부에 대해 한 가지 부호의 근만 유지하고 그 근에 해당하는 각을 구합니다.
rts = rts(imag(rts)>=0); angz = atan2(imag(rts),real(rts));
각도로 표현된 각주파수(단위: rad/sample)를 헤르츠로 변환하고 형성음의 대역폭을 계산합니다.
형성음 대역폭은 단위원에서 예측 다항식 영점까지의 거리와 같습니다.
[frqs,indices] = sort(angz.*(Fs/(2*pi))); bw = -1/2*(Fs/(2*pi))*log(abs(rts(indices)));
형성음 주파수는 90Hz보다 커야 하고 대역폭은 400Hz 미만이어야 한다는 기준을 사용하여 형성음을 결정합니다.
nn = 1; for kk = 1:length(frqs) if (frqs(kk) > 90 && bw(kk) <400) formants(nn) = frqs(kk); nn = nn+1; end end formants
formants = 1×3
103 ×
0.8697 2.0265 2.7380
처음 세 개의 형성음은 869.70Hz, 2026.49Hz, 2737.95Hz입니다.
참고 문헌
[1] Snell, Roy C., and Fausto Milinazzo. "Formant location from LPC analysis data." IEEE® Transactions on Speech and Audio Processing. Vol. 1, Number 2, 1993, pp. 129-134.
[2] Loizou, Philipos C. "COLEA: A MATLAB Software Tool for Speech Analysis."