📄 agif_asy.m
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Automatic GIF program
% Asynchronous analysis
% Author : Minkyu Lee
% Date : 12-Oct-1994
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Modified by Karthik May 31 1997
% Constants for general use
% Some extra points before and after the analysis frame seleted
ext_points=20;
LPF3=fir1(3,0.3);
HPF4=fir1(8,0.2,'high');
% Get the analysis data
xdata=SPEECH;
ydata=filter(LPF3,1,xdata);
% For Asynchronous analysis, find out the analysis frame
tlen=length(SPEECH)-1;
if tlen < gif_frame_len
disp('The analysis frame is too short for pitch asynchronous analysis');
return;
end
num_frame=round(tlen/(gif_frame_len-gif_overlap));
% initialize plotting windows
PV=[270 44 515 268];
s2 = 'Asynchronous GIF - Output';
% Open analysis window
while exist('agif_as_win_h')==1
try1 = 'get(agif_as_win_h,''position'');';
eval(try1,catch2);
if check ==0
clear agif_as_win_h;
check = 1;
break;
end
s1 = get(agif_as_win_h,'Name');
if ~strcmp(s1,s2)
clear agif_as_win_h;
break;
end
figure(agif_as_win_h);
break;
end;
if exist('agif_as_win_h')~=1;
agif_as_win_h=figure('Position',PV,...
'Resize','on',...
'Numbertitle','off',...
'Name',s2);
end
pma=ones(1,num_zeros+1);
par=ones(1,num_poles);
disp(' ');
disp('Now, doing glottal inverse filtering asynchronous method(s) ');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
wait_window_asy = figure('Numbertitle','off',...
'Color',BACK_COLOR,...
'Name','Please wait',...
'Position',[117 248 560 150]);
pause(0.01)
wait_window__asy_display = uicontrol('Style','Text',...
'Position',[50 50 410 30],...
'Backgroundcolor','white',...
'Foregroundcolor','blue',...
'String','Please wait. This will not take long.');
pause(0.01);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Pitch asynchronous analysis
%
clear dg_final g_final;
for iter=1:num_frame,
bp=(iter-1)*(gif_frame_len-gif_overlap)+1;
ep=bp+gif_frame_len-1;
if ep > tlen
ep=tlen;
end
s=ydata(bp:ep);
% do a fixed pre-emphasis
ds=filter([1 -0.9], 1, s);
% apply a hamming window
ds_w=hamming(length(ds)).*ds;
% do LP analysis on the frame
A=lpc(ds_w,num_poles);
[H,W]=freqz( 1, A, 512);
% get a differentiated glottal wave estimate
dg=filter(A, 1, s);
% get a glottal wave estimate
isum=0;
for i=1:length(dg),
isum=isum+dg(i);
g(i)=isum;
end
dg_out1=filter([1 -1],[1 -0.99],dg);
dg_final(bp+gif_overlap:ep)=dg_out1(gif_overlap+1:length(dg_out1));
end
% Remove components around d.c.
dg_final=filter([1 -1],[1 -.99],dg_final);
figure(agif_as_win_h);
subplot(211);
plot(dg_final);
title('dgvv by pitch asynchronous analysis (AR model)') ;
%Integrate differentiated VV to get glottal VV
g_final=integ_1a(dg_final);
g_final=filter(HPF4,1,g_final);
g_final=filter([1 -1],[1 -0.99],g_final);
subplot(212);
plot(g_final)
title('gvv by pitch asynchronous analysis (AR model)');
PV = [2 255 185 118];
s2 = ' Asynchronous Analysis';
% Open analysis window
while exist('agif_asy_ana_win_h')==1
try1 = 'get(agif_asy_ana_win_h,''position'');';
eval(try1,catch2);
if check ==0
clear agif_asy_ana_win_h;
check = 1;
break;
end
s1 = get(agif_asy_ana_win_h,'Name');
if ~strcmp(s1,s2)
clear agif_asy_ana_win_h;
break;
end
figure(agif_asy_ana_win_h);
break;
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
if exist('agif_asy_ana_win_h')~=1;
agif_asy_ana_win_h=figure('Position',PV,...
'Resize','on',...
'Numbertitle','off',...
'Name',s2);
agif_asy_sa = uicontrol('Style','Pushbutton',...
'Position',[10 70 130 30],...
'String','Save(dgvv)',...
'Callback','agif_auto_save');
agif_asy_cancel = uicontrol('Style','Pushbutton',...
'Position',[10 20 130 30],...
'String','Cancel',...
'Callback','agif_asy_ca');
end
if exist('wait_window_asy') == 1
eval('close(wait_window_asy);',catch1);
clear wait_window_asy;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -