📄 fine_tune.m
字号:
%
% Fine tune the first formant frequency and bandwidth
% to match the inverse filter transfer function to the spectrum
% of pre-emphasized speech.
% Author : Minkyu Lee
% Date : 2-Nov-1994
%
function [nom, den]=fine_tune(Hvt1, ds, T)
Fs=fft(ds,1024);
Fs1=abs(Fs(1:100));
[h_vt w_vt]=freqz(1,Hvt1,512);
Fh1=abs(h_vt(1:100));
error_before=norm(Fs1-Fh1)
rt=roots(Hvt1);
rt1=[];
for i=1:length(rt),
if angle(rt(i)) > 0
rt1=[ rt1 ; rt(i) ];
end
end
[frt fi]=sort(angle(rt1));
for i=1:length(frt)
ff(i)=( frt(i)/(2*pi*T) );
fb(i)=( -2*log(abs(rt1(fi(i))))/(T*2*pi) );
end
%ff(1)=round( frt(1)/(2*pi*T) );
%fb(1)=round( -2*log(abs(rt1(fi(1))))/(T*2*pi) );
% Minimize error while changing the value of formant frequency and bandwidth
center=ff(1);
for ii=center-10:2:center+10
ff(1)=ii;
% Calculate the transfer function using new
% Formants freq. and bandwidth )
for jj=1:length(frt)
C(jj)=-exp(-2*pi*fb(jj)*T);
B(jj)=2*exp(-pi*fb(jj)*T)*cos(2*pi*ff(jj)*T);
A(jj)=1-B(jj)-C(jj);
end
%nom=A(1)*A(2)*A(3)*A(4)*A(5)
nom=1;
for jj=1:length(frt)
nom=nom*A(jj);
end
den=[1 -B(1) -C(1)];
for jj=2:length(frt)
den=conv(den, [1 -B(i) -C(i)]);
end
%den=conv([1 -B(1) -C(1)], [1 -B(2) -C(2)]);
%den=conv(den, [1 -B(3) -C(3)]);
%den=conv(den, [1 -B(4) -C(4)]);
%den=conv(den, [1 -B(5) -C(5)]);
[h_vt w_vt]=freqz(nom, den, 512);
Fh1=abs(h_vt(1:100));
error(ii)=norm(Fs1-Fh1);
end
[error_after I]=min(error(center-10:2:center+10))
Hvt2=den;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -