agif_it.m
来自「这是一个用于语音信号处理的工具箱」· M 代码 · 共 157 行
M
157 行
%
% iterative GIF analysis
%
PV=[270 44 515 268];
s2 = 'Iterative GIF - Output';
% Open analysis window
while exist('agif_iter_win_h')==1
try1 = 'get(agif_iter_win_h,''position'');';
eval(try1,catch2);
if check ==0
clear agif_iter_win_h;
check = 1;
break;
end
s1 = get(agif_iter_win_h,'Name');
if ~strcmp(s1,s2)
clear agif_iter_win_h;
break;
end
figure(agif_iter_win_h);
break;
end;
if exist('agif_iter_win_h')~=1;
agif_iter_win_h=figure('Position',PV,...
'Resize','on',...
'Numbertitle','off',...
'Name',s2);
end
GVV=zeros(size(SPEECH));
DGVV=zeros(size(SPEECH));
RESIDUE=zeros(size(SPEECH));
analy_1c;
pkpk_1c;
num_gci=length(gci);
clear gci_a;
gci_a = gci;
num_gci=length(gci_a);
dg_final=[];
g_final=[];
ext_left=0;
ext_right=0;
LPF3=fir1(3,0.5);
ff=zeros(num_gci,5);
fb=zeros(num_gci,5);
for cur_gci=1:num_gci-1
ydata_a=SPEECH(gci_a(cur_gci):gci_a(cur_gci+1));
ydata_b=SPEECH(gci_a(cur_gci)-ext_left:...
gci_a(cur_gci+1)+ext_right);
ydata_p=diff(ydata_a);
ydata_lp=filter(LPF3,1,ydata_b);
% Estimate glottal effect to speech
ydata_w=hamming(length(ydata_a)).*ydata_a;
%Hg1=lpc_cov(ydata_a,1);
Hg1=lpc(ydata_w,1);
% Eliminate the estimated glottal contribution
tmp=filter(Hg1, 1, ydata_lp);
tmp_w=hamming(length(tmp)).*tmp;
% The first estimate for the vocal tract
Hvt1=lpc(tmp_w,num_poles);
% Eliminate the effect of vocal tract
tmp=filter(Hvt1,1,ydata_lp);
% The first estimate for the glottal excitation
g1=integ_1a(tmp);
g1_w=hamming(length(g1)).*g1;
% Second iteration begins here
Hg2=lpc(g1_w,4);
% Eliminate the estimated glottal contribution
tmp=filter(Hg2,1,ydata_lp);
tmp_w=hamming(length(tmp)).*tmp;
% The final model for the vocal tract
Hvt2=lpc(tmp_w,num_poles);
[Fs Ws]=freqz(1,Hvt2,2048);
[ff(cur_gci,:) fb(cur_gci,:)]=frm_trk2(Hvt2, Ts);
% Eliminate the effect of vocal tract
dg2=filter(Hvt2,1,ydata_lp);
dg2=filter([1 -1],[1 -.99],dg2);
% The final estimate for the glottal excitation
g2=integ_1a(dg2);
g2=filter([1 -1],[1 -.99],g2);
% Connect each analysis frame
dg_final=[dg_final ; dg2(ext_left+1:length(dg2)-ext_right)];
g_final=[g_final ; g2(ext_left+1:length(g2)-ext_right)];
end
dg_final = filter([1 -1],[1 -.99],dg_final);
subplot(211);
plot(dg_final);
title('Differentialted GVV');
subplot(212);
plot(g_final);
title('GVV by Iterative Analysis');
PV = [2 255 185 118];
s2 = 'Iterative Analysis';
% Open analysis window
while exist('agif_it_ana_win_h')==1
try1 = 'get(agif_it_ana_win_h,''position'');';
eval(try1,catch2);
if check ==0
clear agif_it_ana_win_h;
check = 1;
break;
end
s1 = get(agif_it_ana_win_h,'Name');
if ~strcmp(s1,s2)
clear agif_it_ana_win_h;
break;
end
figure(agif_it_ana_win_h);
break;
end;
if exist('agif_it_ana_win_h')~=1;
agif_it_ana_win_h=figure('Position',PV,...
'Resize','on',...
'Numbertitle','off',...
'Name',s2);
agif_it_sa = uicontrol('Style','Pushbutton',...
'Position',[10 70 130 30],...
'String','Save(dgvv)',...
'Callback','agif_auto_save');
agif_it_cancel = uicontrol('Style','Pushbutton',...
'Position',[10 20 130 30],...
'String','Cancel',...
'Callback','agif_it_ca');
end
if gif_mark_flag == 1;
SPEECH = SPEECH_OLD_A;
gif_mark_flag = 0;
NEW_LEFT = 1;
NEW_RIGHT = length(SPEECH);
NEW_LEN = length(SPEECH);
end
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?