ms_s4st.m
来自「这是一个用于语音信号处理的工具箱」· M 代码 · 共 352 行
M
352 行
disp(' ');
disp('SCRIPT: mstr_seg4st.m ***********************************************');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% mstr_seg4st.m
%
% jmw
% 10/09/94 add titles, tags, two plots with pause between
% 2/9/94
%
% loads results of seg3_3st and fdiff3st and displays master (mstr)
% segmentation plan...
%
% BASED UPON 1986 Tokyo ICASSP Paper by Glass and Zue (p2767)
% INCLUDES post processing to remove false hits in the middle of silent
% intervals
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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);
file_string = sprintf('temp/%s_Segdata.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_BNDdata.mat', name);
s=sprintf('loading ./%s from hard disk ...',file_string);
disp(s);
s=sprintf('load %s', file_string);
eval(s);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
PLT = 1; % flag to determine plotting
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% display seg data
[m,n]=size(cofa);
VOICED = 2.0;
UNVOICED = 1.0;
SILENT = 0.0;
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;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% find boundaries in VUS data
if (seg_cnt > 1)
num_bnd = seg_cnt -1;
vus_bnd = zeros(1,num_bnd);
for i=1:num_bnd,
vus_bnd(i) = seg_frame(i+1,1);
end;
end;
disp_vus = zeros(1,m);
for i=1:m,
x=find(i==vus_bnd);
nohit = isempty(x);
if (nohit)
;
else
disp_vus(i) = 1;
end;
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% find subsegments (spectral boundaries within vbus boundaries)
disp('No unvoiced sub-segmentation allowed !');
mbf=length(boundary_frames);
cnt = 0;
[msf,nsf]=size(seg_frame);
CLOSENESS_threshold = 2; % changed 2/22/94/ from 3;
new_b_frms = [];
for i=1:mbf,
fa=[]; fb=[];
error_matrix = abs((boundary_frames(i) * ones(msf,nsf)) - seg_frame);
[fa,fb] = find(error_matrix <= CLOSENESS_threshold);
if( isempty(fa) & isempty(fb))
% now check if in unvoiced segment
% (no subsegments allowed)
if(VUS_voicetype(boundary_frames(i)) == 'v')
cnt = cnt + 1;
new_b_frms(cnt) = boundary_frames(i);
end;
end;
end;
%end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% find new subsegmnt spectral boundaries
spect_boundary = zeros(1,m);
for i=1:m,
if (find(i==new_b_frms))
spect_boundary(i) = 1;
end;
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if (PLT)
titles = 1;
tags = 1;
disp('plotting results ...');
h=gcf;
figure(h);
clf;
subplot(311);
plot(signal);
grid;
a=axis;
axis(a);
s=sprintf('%s', name);
if (titles)
title(s);
end;
subplot(312);
stairs(range(:,1), vt);
axis([a(1) a(2) -1 3]);
grid;
s=sprintf('V/U/S voicetype');
if (titles)
title(s);
end;
% add segment lengths to graph
if (tags)
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;
elseif seg_type(i) == 'b'
y=2.25;
else
y=2.6;
end;
text(round(seg_range(i,1) + 0.4*seg_len(i)),y,s);
end;
end;
subplot(313);
stairs(range(:,1),disp_vus);
axis([a(1) a(2) -1 2]);
grid on;
if (titles)
title('V/U/S segment boundaries');
end;
if (tags)
for i=1:num_bnd,
s=sprintf('%d', range(vus_bnd(i),1));
if ( rem(i,2)==1)
ht = 1.7;
else
ht = 1.3;
end;
text(range(vus_bnd(i),1)-200,ht,s);
end;
end;
drawnow;
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
pause(2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if (PLT)
titles = 1;
tags = 1;
disp('plotting results ...');
h=gcf;
figure(h);
clf;
subplot(311);
plot(signal);
grid;
a=axis;
axis(a);
s=sprintf('%s', name);
if (titles)
title(s);
end;
subplot(312);
stairs(range(:,1),disp_vus);
axis([a(1) a(2) -1 2]);
grid on;
if (titles)
title('V/U/S segment boundaries');
end;
if (tags)
for i=1:num_bnd,
s=sprintf('%d', range(vus_bnd(i),1));
if ( rem(i,2)==1)
ht = 1.7;
else
ht = 1.3;
end;
text(range(vus_bnd(i),1)-200,ht,s);
end;
end;
subplot(313);
stairs(range(:,1),(spect_boundary));
axis([a(1) a(2) -1 2]);
grid on;
if (titles)
title('spectral subsegment boundaries');
end;
if (tags)
for i=1:length(new_b_frms),
s=sprintf('%d', range(new_b_frms(i),1));
if ( rem(i,2)==1)
ht = 1.7;
else
ht = 1.3;
end;
text(range(new_b_frms(i),1)-200,ht,s);
end;
end;
end;
drawnow;
%end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% segment
seg_points = spect_boundary + disp_vus;
seg_frame(1,1)=1;
seg_cnt = 1;
for i = 2:m,
if ( seg_points(i) == 1)
% start new segment
seg_cnt = seg_cnt + 1;
seg_frame(seg_cnt,1) = i;
seg_type(seg_cnt) = VUS_voicetype(i);
seg_frame(seg_cnt-1,2) = i-1;
else
% still in same old segment
seg_frame(seg_cnt,2) = i;
seg_type(seg_cnt) = VUS_voicetype(i);
end;
end;
for i=1:seg_cnt,
seg_range(i,1) = range(seg_frame(i,1),1);
seg_range(i,2) = range(seg_frame(i,2),2);
end;
new_seg_cnt = seg_cnt;
new_seg_range = seg_range;
new_seg_frame = seg_frame;
new_seg_type = seg_type;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% save results
s=sprintf('saving ./%s_NewSegdata to disk ...',name);
disp(s);
s=sprintf('save temp/%s_NewSegdata new_seg_cnt new_seg_range new_seg_frame',name);
s2 = sprintf(' new_seg_type');
s=[s s2];
eval(s);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% clean up time
clear CLOSENESS_threshold new_seg_cnt
clear PLT new_seg_frame
clear SILENT new_seg_range
clear UNVOICED new_seg_type
clear VOICED nohit
clear VUS_voicetype nsf
clear a num_bnd
clear boundary power
clear boundary_frames range
clear cnt residue
clear cofa s2
clear disp_vus seg_cnt
clear error_matrix seg_frame
clear fa seg_len
clear fb seg_points
clear file_string seg_range
clear h seg_type
clear ht signal
clear i spect_boundary
clear m voicetype
clear mbf vt
clear msf vus_bnd
clear n x
clear new_b_frms y tags titles
s=sprintf('clear %s', name);
eval(s);
clear s
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?