⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fine_tune.m

📁 这是一个用于语音信号处理的工具箱
💻 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 + -