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
Posted by 십자성군