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

📄 agif_asy.m

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