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

📄 r1_ratio.m

📁 这是一个用于语音信号处理的工具箱
💻 M
字号:
disp(' ');
disp('SCRIPT:   r1_ratio3st.m ***********************************************');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 	jmw 	1/12/94
%		12/21/93
%		12/07/93
%		11/18/93
% 	playing with Weinstein, et al., algorithm for parsing based
% 	upon RMS values of BP filters
%
% 	gain calculated from sqrt of res NRG (this feature removed)
%
% 	this script calcultaes r1 ratio
% 	and COMPARES TO A PRESET THRESHOLD TO DETERMINE SONORANT OR NOT...
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
		PLT = 1;	% flag to plot results
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

file_string = sprintf('temp/%s.mat', name);
s=sprintf('loading ./%s from hard disk ...',file_string);
disp(s);
s=sprintf('load %s', file_string);
eval(s);
signal = eval(name);

file_string = sprintf('temp/%s_Data.mat', name);
s=sprintf('loading ./%s from hard disk ...',file_string);
disp(s);
s=sprintf('load %s', file_string);
eval(s);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% compute freq response
disp('computing r1 ratio from bandpass frequency responses ...');

N=256;
start1 = 6;
stop1 = 47;
start2 = 190;
stop2=N;

[m,n]=size(cofa);
r1 = zeros(m,1);
gain = zeros(m,1);
e1 = zeros(m,1);
e2 = zeros(m,1);

for i=1:m-1,
	a = range(i,1);
	b = range(i,2);
	
	%res_nrg = residue(a:b) * residue(a:b)' ;
	%gain(i) =	sqrt(res_nrg); 

	gain(i) = 1;	% changed 9/30/94 jmw
	
	[h,w]=freqz(gain(i),cofa(i,:),N);
	mag=abs(h);
	
	e1(i)=sqrt(mag(start1:stop1)' * mag(start1:stop1));
	e2(i) = sqrt(mag(start2:stop2)' * mag(start2:stop2));
	r1(i) = e1(i) /e2(i);
end;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% smooth r1 ratio
MFO = 5; % changed 2/21/94 from 7;	% median filter order
s=sprintf('smoothing r1 ratio with median filter of order %d ...', MFO);
disp(s);

r1=median1(r1,MFO);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% check if sonorant ...

T = 10;			% sonorant threshold - empirically determined
sonorant = zeros(1,m);

for i=1:m,
	if (r1(i) > T)
		sonorant(i) = 1;
	end;
end;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

if (PLT)

	titles = 1;	% turn off for no titles (for dissertation figs)

	disp('plotting results ...');

	h=gcf;
	figure(h);
	clf;
	
	subplot(311);
	plot(signal);
	grid;
	axis_1=axis;
	axis(axis_1);
	s=sprintf('%s', name);
	if (titles)
		title(s);
	end;

	subplot(312);
	stairs(range(:,1),r1);
	axis([axis_1(1) axis_1(2) 0 400]);
	grid;
	hold on;
	%plot(range(:,1),T*ones(1,length(r1)),'--');
	plot(T*ones(1,axis_1(2)),'--');
	hold off;
	s=sprintf('smoothed r1 ratio - order %d median filter', MFO);
	if (titles)
		title(s);
	end;

	subplot(313);
	stairs(range(:,1),sonorant);
	grid on;
	axis([axis_1(1) axis_1(2) -1 2]);
	if (titles)
		title('sonorant decision (binary)');
	end;

	drawnow;
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% save to hard disk

son_score = sonorant;
s=sprintf('saving ./%s_SONscore to disk ...', name);
disp(s);
s=sprintf('save temp/%s_SONscore son_score', name);
eval(s);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% clean up time

clear MFO                 file_string         residue             
clear N                   gain                s                   
clear PLT                 h                   signal              
clear T                   i                   son_score           
clear VUS_voicetype       m                   sonorant            
clear a                   mag                 start1              
clear axis_1              n                   start2              
clear b                                       stop1               
clear                     power               stop2               
clear cofa                r1                  voicetype           
clear e1                  range               w                   
clear e2                  res_nrg	titles

s=sprintf('clear %s',name);
eval(s);
clear s

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -