Algorithm.dot (1378B)
1 digraph G{ 2 node[shape="rectangle"] 3 //splines=ortho; 4 rankdir=LR; 5 Init [label=<<B>Init</B><BR/>X<SUB>on</SUB> ~ N(0,0)<BR/>X<SUB>off</SUB> ~ N(0,0)<BR/>X<SUB>c</SUB>=X<SUB>off</SUB><BR/>on=false <BR/>λ<SUB>on</SUB>=0.75<BR/>λ<SUB>off</SUB>=0.75>]; 6 {rank=same; 7 Measure [label="Measure Δt"]; 8 OutlierZero [label="outliercnt=0"]; 9 Update [label=<<B>Update Gaussian</B><BR/> X<SUB>c</SUB> ~ λ<SUB>c</SUB>*X<SUB>c</SUB>+(1-λ<SUB>c</SUB>)*N(Δt,Δt²)<BR/> λ<SUB>c</SUB>=min(λ<SUB>c</SUB>+1/1000,0.999999)>]; 10 } 11 Min_Measures [label=<X<SUB>c</SUB> has more than 50 measurements?>]; 12 subgraph cluster0{ 13 rank=same; 14 Comp1 [label=<|Δt-µ<SUB>off</SUB>| > 5*σ<SUB>off</SUB>>]; 15 Comp2 [label=<|Δt-µ<SUB>off</SUB>| ≷ |Δt-µ<SUB>on</SUB>|>]; 16 } 17 Outlier [label="outliercnt++ > 100"]; 18 Switch [label=<<B>Toggle State</B><BR/>on=!on<BR/>X<SUB>c</SUB>=X<SUB>on/off</SUB>>]; 19 20 Init -> Measure; 21 Measure -> Min_Measures; 22 Update -> Measure[constraint=false]; 23 OutlierZero -> Update[constraint=false]; 24 Switch -> Measure[constraint=false]; 25 26 27 edge[color="green"]; 28 Min_Measures -> Comp1[label=<X<SUB>on</SUB> has no measurements>]; 29 Min_Measures -> Comp2[label=<X<SUB>on</SUB> has measurements>]; 30 Comp1 -> Outlier; 31 Comp2 -> Outlier; 32 Outlier -> Switch; 33 34 edge[color="red",constraint=false] 35 Min_Measures -> Update; 36 Comp1 -> OutlierZero; 37 Comp2 -> OutlierZero; 38 }