samer@0: (define (hp x) samer@0: ; Normaliser used as high pass filter to remove slow variations samer@0: (define n (node "phase1" (NormaliseVector. x))) samer@0: (addtasks n) samer@0: (.output n) samer@0: ) samer@0: samer@0: (define (lp x) samer@0: ; Normaliser used as low pass filter to remove fast variations samer@0: (define n (node "lp" (NormaliseVector. x))) samer@0: (addtasks n) samer@0: (.mean n) samer@0: ) samer@0: samer@0: (define (bp x) (lp (hp x))) samer@0: samer@0: samer@0: (define (smooth-signal sig) (addtask samer@0: (node (.getNode sig) samer@0: (GenerateDouble. (VDouble. "smoothed") samer@0: (FilteredGenerator. (DoubleGenerator. sig) samer@0: (IIRFilter. samer@0: ; two element double array controlled by VDouble samer@0: (let ((a (double[] #(1 0))) samer@0: (p (samer.core.types.VDouble. "smoothness" 1.0))) samer@0: (on-change p samer@0: (let ((r (Math.exp (- (.get p))))) samer@0: (double[] a 0 r) samer@0: (double[] a 1 (- 1 r)))) samer@0: (.changed p) samer@0: a ))))))) samer@0: