%时间序列分割算法FSW
load ysample
y=ysample(1:1000);
num=length(y); %读出长度
delta=2 %FSW中定义的最大误差阈值
i=1;
seg_no=1; %第几个分割片段的起点
csp_id=1; %FSW算法中定义的CSP点的位置
lowl=-inf;upl=inf;s(1)=1; %s(seg_no)记录分割点在原时间序列的横坐标的位置
while i<num %分割整个时间序列
i=i+1
ll(s(seg_no),y(s(seg_no)),i,y(i)) %新加入的点与片段起点之间连线的斜率
upl=min(upl,ll(s(seg_no),y(s(seg_no)),i,(y(i)+delta))) %上边界
lowl=max(lowl,ll(s(seg_no),y(s(seg_no)),i,(y(i)-delta))) %下边界
if upl<lowl %如果upl<lowl,则该片段终止,终止点前面的最近的CSP点为分割点
seg_no=seg_no+1 %进入下一个片段
s(seg_no)=csp_id+1 %下一个片段起点为CSP点的右侧点
i=csp_id+1 %从新的片段的起点开始向右计算
lowl=-inf;upl=inf; %初始化
elseif lowl<=ll(s(seg_no),y(s(seg_no)),i,y(i))&&ll(s(seg_no),y(s(seg_no)),i,y(i))<=upl %新加入的点满足该条件,判断为CSP点
csp_id=i; %记录CSP点位置
end
seg_no
s(seg_no)
csp_id
%pause
end
temp=length(s)
for i=1:temp-1
ss{i}=y(s(i):s(i+1)-1)
end
ss{temp}=y(s(temp):end)