MFCC를 하고있는데 왜 LPC를 하냐?
Matlab에서 포만트 관련 예제를 lpc로 하고있어서 입니다...
포만트에 대해서 간단히 언급한 후에 LPC를 통한 포만트 분석 후 이를 MFCC로 하겠습니다.
우선 소스
load mtlb;
segmentlen = 100;
noverlap = 90;
NFFT = 128;
[y,f,t,p] = spectrogram(mtlb,segmentlen,noverlap,NFFT,Fs);
surf(t,f,10*log10(abs(p)),'EdgeColor','none');
axis xy; axis tight; colormap(jet); view(0,90);
xlabel('Time');
ylabel('Frequency (Hz)');
dt = 1/Fs;
I0 = round(0.1/dt);
Iend = round(0.25/dt);
x = mtlb(I0:Iend);
x1 = x.*hamming(length(x));
preemph = [1 0.63];
x1 = filter(1,preemph,x1);
A = lpc(x1,8);
rts = roots(A);
rts = rts(imag(rts)>=0);
angz = atan2(imag(rts),real(rts));
[frqs,indices] = sort(angz.*(Fs/(2*pi)));
bw = -1/2*(Fs/(2*pi))*log(abs(rts(indices)));
nn = 1;
for kk = 1:length(frqs)
if (frqs(kk) > 90 && bw(kk) <400)
formants(nn) = frqs(kk);
nn = nn+1;
end
end
formants
------------------------------------------------------------
짧습니다. 실제 함수 하나하나 구현하려면 어렵겠지만요.
mtlb : 음원
segmentation : 분할... 이라는데. 해밍윈도우와 관련.
noverlap : 앞서 MFCC에서의 overlap 부분.
NFFT : FFT resolution. 주파수 분해능,
dt : 주기
IO와 len : 0.1~0.25초 때의 번호를 뜻합니다
x : mtlb의 0.1~0.25초 사이의 신호정보 입니다.
round는 가장 가까운 정수쪽으로 반올림을 합니다.
x1 : 해밍윈도우를 통과한 신호정보 입니다.
preemph : 프리엠퍼시스 필터의 적용입니다. 프리엠퍼시스 필터는 highpass all-pole(AR(1))필터라는데 all-pole이 무슨 뜻인지 모르겠네요. 이를 x1에 적용하였습니다.
필터관련은 나중에 더 공부하기로 하죠
A=lpc(x1,8) 을 통해서 신호 x1에 대하여 8개의 lpc ㄱ
'Project > 음성평가시스템' 카테고리의 다른 글
피치분석 (0) | 2013.09.12 |
---|---|
Pratt 기능을 Matlab으로 구현 (0) | 2013.09.12 |
특징추출4. Mel_filterbank (0) | 2013.08.21 |
현재 진행상황 (0) | 2013.08.19 |
특징추출3. Mef filter bank 영문설명 (0) | 2013.08.14 |