📄 segment.m
字号:
% Function: preform Segmentation based on a spectral stability criterium.
function seg=segment(signal,basic,threshold);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%% %%
%%%%%%% Segmentation baased on a spectral stability criterium %%
%%%%%%% %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% The first step produces the following variables:
% nframe = number of frames.
% ntotal = number of samples.
%retrieve the basic specification
F_len=basic(5);
O_lap=basic(6);
M_len=F_len-O_lap;
ntotal=length(signal);
nframe=floor(ntotal/M_len);
signal=signal(1: (nframe*M_len) );
% first frame analysis
sso=signal(1:F_len);
spec1=abs(fft(sso,128));
seg=[];
counter=1;
for k=2:nframe-1
sso=signal((k-1)*M_len+1:k*M_len+O_lap);
spec2=abs(fft(sso,128));
distance(k)=sum((spec1-spec2).^2)/sum(spec1.^2);
if distance(k)>=threshold
seg(counter)=k-1;
counter=counter+1;
end
spec1=spec2;
end
%we don't want one period segments
seg1=diff(seg);
seg2(1)=seg(1);
counteraux=2;
for auxidx=1:length(seg1)
if(seg1(auxidx)>2)
seg2(counteraux)=seg(auxidx);
seg2(counteraux+1)=seg(auxidx+1);
counteraux=counteraux+2;
end
end
seg=[seg2 seg(length(seg))];
seg=[seg(abs(diff(seg))>1) seg(length(seg))];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -