5.6 连续多形状发现

 

我们已经实现发现单形状曲线段的方法,有时我们还需要发现两种形状甚至更多形状连续出现的复合形状,比如先下降再平稳、先上升再平稳再下降等等。

还以之前的时间序列为例,找出先下降再平稳的曲线段。下图蓝色曲线标出的部分是先下降再平稳段的大概位置。

..

下面介绍如何发现连续多形状曲线段。

1. 用发现单形状曲线段的方法找出各形状的曲线段索引。

Id(1)=H(arg1)=[Id(1)(1), Id(1) (2),…, Id(1) (p1)]

Id(2)=H(arg2)=[Id(2)(1), Id(2) (2),…, Id(2) (p2)]

Id(k) =H(argk)=[Id(k)(1), Id(k) (2),…, Id(k) (pk)]

Ids=[ Id(1)(1), Id(1) (2),…, Id(1) (p1), Id(2) (1),…, Id(2) (p2),…, Id(k)(1),…, Id(k) (pk)]

其中Id(i)是第i种形状的索引集合,Id(i) (j)Id(i) 的第j段曲线, H(…)是发现单形状曲线段的函数,argi是第i种形状的参数。

2. Ids按索引顺序排序Idst

Idst=Ids.sort(~(1))

Idst是按每个Id(i) (j)中第一个元素排序的索引集合。

3. 找出Idst中与所需形状顺序相同且间隔不远的连续形状索引Idst’

Idst’1=[Id(1)(s1), Id(2)(t1),…, Id(k)(u1)]

Idst’2=[Id(1)(s2), Id(2)(t2),…, Id(k)(u2)]

Idst’v=[Id(1)(s2), Id(2)(t2),…, Id(k)(u2)]

其中Idst’i是第i段连续形状曲线段的索引集合,每一段都是k个形状的索引集合且相邻两个形状的索引间隔不远,即后一段形状的第一个索引和前一段形状的最后一个索引相隔不远,以第一段连续形状的索引集合为例:

Id(2)(t1)(1)-Id(1)(s1)(-1)<ε

Id(2)(t1)(1)是第2种形状t1段的第一个索引,Id(1)(s1).m(-1)是第1种形状s1段的最后一个索引,ε是一个比较小的值,可以作为参数,保证两个形状在时间序列X上是相邻的。

4. 按连续形状的索引取时间序列的数据

连续形状的索引应该是连续的,所以把第一种形状的第一个索引到第k种形状的最后一个索引作为连续形状曲线段的索引。

spi=X(to(Id(1)(si)(1), Id(k)(ui).m(-1)))

spi是第i段连续形状,Id(1)(si)(1)是第一种形状第i段的第1个索引,Id(k)(ui).m(-1)是第k种形状第i段的最后一个索引。

SPL例程

时间序列数据不变,发现先下降再平稳的曲线段。

需要拟合主线M并计算升降指数L

参数设置:

观察级别K’

K’=600

两种形状需要两套参数

下降段特征指数名组合Nm1

Nm1=[“L”]

平稳端特征指数名组合Nm2

Nm2=[“L”]

下降段取值范围Ag1

Ag1=[[-1,-0.1]]

平稳段取值范围Ag2

Ag2=[[-0.1,0.1]]

下降段形状长度范围dut1

dut1=[100,10000]

平稳段形状长度范围dut2

dut2=[100,10000]

两段形状间隔ε

ε=180

SPL例程


A

B

1

=file(“1Ddata.csv”).import@tc()

/包含时间序列X的序表

2

600

/K'

3

[L]

/Nm1

4

[[-1,-0.1]]

/Ag1

5

[100,10000]

/dut1

6

[L]

/Nm2

7

[[-0.1,0.1]]

/Ag2

8

[100,10000]

/dut2

9

180

/ε

10

=A1.(Value)

/时间序列X

11

=2*power(4,lg(A2/15,2)-1)

/平衡系数K

12

=fit_main(A10,A11)

/主线M

13

=A2/40

/指数区间k

14

=Lift(A12,A13)

/升降指数L

15

=[A14.min(),A14.max()]

/升降指数最大最小值

16

=[A15]

/特征指数最大最小值

17

=A1.derive(A14(#):L)

/序表T

18

=A4.((idx=#,~.(arg_throw(~,A16(idx)(2),A16(idx)(1)))))

/下降段参数投射

19

=A3.(~/">="/"number("/$[A18(]/#/$[)(1)]/")"/"&&"/~/"<="/"number("/$[A18(]/#/$[)(2)]/")").concat("&&")

/下降段筛选条件

20

=A17.pselect@a(eval(A19))


21

=A20.group@u(~-#)


22

=A21.select(~.len()>=A5(1)&&~.len()<=A5(2))

/下降段索引结合Id(1)

23

=A7.((idx=#,~.(arg_throw(~,A16(idx)(2),A16(idx)(1)))))

/平稳段参数投射

24

=A6.(~/">="/"number("/$[A23(]/#/$[)(1)]/")"/"&&"/~/"<="/"number("/$[A23(]/#/$[)(2)]/")").concat("&&")

/平稳段筛选条件

25

=A17.pselect@a(eval(A24))


26

=A25.group@u(~-#)


27

=A26.select(~.len()>=A8(1)&&~.len()<=A8(2))

/平稳段索引结合Id(2)

28

=[A22,A27]

/Ids

29

=A28.conj((idx=#,~.new(~:seq,idx:seq_idx)))

/不同形状曲线段索引

30

=A29.sort(seq)

/排序Idst

31

=A30.group@u(seq_idx-#)

/相邻分组

32

=A31.select(~.len()==A28.len()&&(ss=~.(seq),ss(2)(1)-ss(1).m(-1)<=A9))

/筛选间隔足够小的分组Idst’

33

=A32.((sq=~.(seq).conj(),to(sq.~,sq.m(-1))))

/满足要求的曲线段

34

=A33.(A10(~))

/指定形状Sp

计算结果示例:

..

找出来的连续形状符合预期。