seg3_3st.m

来自「这是一个用于语音信号处理的工具箱」· M 代码 · 共 142 行

M
142
字号
disp(' ');
disp('SCRIPT:   seg3_3st.m ***********************************************');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% 	SEG3_3ST.M	
%
%	script to assemble segments from VUS data only
%
%	This program is the same as seg3_3.m except that here the
%	results ARE saved as well as possibly displayed
%
% 	jmw
%	
%	2/14/94
% 	
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

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);

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);

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

% segmenting routine ...
seg_cnt = 1;	% segment counter
seg_type(seg_cnt) = VUS_voicetype(1);
seg_range(1,1)=range(1,1);	% startpoint of first segment = 1
seg_frame(1,1) = 1;

for i = 2:length(VUS_voicetype),
	if VUS_voicetype(i) == VUS_voicetype(i-1)
		% still in same segment
		seg_range(seg_cnt,2) = range(i,2);
		seg_frame(seg_cnt,2) = i;
	else
		% beginning of new segment
		seg_range(seg_cnt,2) = range(i-1,2);  % save end pt of prev seg.
		seg_frame(seg_cnt,2) = i-1;
		seg_cnt = seg_cnt + 1;
		seg_type(seg_cnt) = VUS_voicetype(i);
		seg_range(seg_cnt,1) = range(i,1);
		seg_frame(seg_cnt,1) = i;
	end
end;
		
% create vector to store segment lengths

seg_len=seg_range(:,2) - seg_range(:,1) + 1;

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

% plot results
disp('plotting results ...');

h=gcf;
figure(h);
clf;

subplot(211);
plot(signal);
grid;
axis_1=axis;
axis(axis_1);
s=sprintf('%s', name);
title(s);

% next graph ...

VOICED   = 2.0;
UNVOICED = 1.0;
SILENT   = 0.0;

subplot(212);

for i=1:length(voicetype),
	if VUS_voicetype(i) == 'v'
		vt(i) = VOICED;
	elseif VUS_voicetype(i) == 'u'
		vt(i) = UNVOICED;
	elseif VUS_voicetype(i) == 's'
		vt(i) = SILENT;
	end;
end;

stairs(range(:,1), vt);
axis([axis_1(1) axis_1(2) -1 3]);
grid;
s=sprintf('V/U/S voicetype');
title(s);

% add segment lengths to graph
for i=1:seg_cnt,
	s=sprintf('%d',seg_len(i));
	if seg_type(i) == 's'
		y = -0.5;
	elseif seg_type(i) == 'u'
		y = 1.25;
	else
		y=2.6;
	end;
	text(round(seg_range(i,1) + 0.4*seg_len(i)),y,s);

end;

drawnow;

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

% save data
file_string=sprintf('%s_Segdata', name);
s=sprintf('saving ./%s.mat to hard disk ...',file_string);
disp(s);
s=sprintf('save temp/%s seg_cnt seg_frame seg_len seg_range seg_type', file_string);
eval(s);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% clean up time

clear                     h                   seg_len             
clear SILENT              i                   seg_range           
clear UNVOICED                                seg_type            
clear VOICED              power               signal              
clear VUS_voicetype       range               voicetype           
clear axis_1              residue             vt                  
clear bond_CH             s                   y                   
clear cofa                seg_cnt             
clear file_string         seg_frame

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

⌨️ 快捷键说明

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