Mercurial > hg > jslab
view src/scheme/functions.scm @ 8:5e3cbbf173aa tip
Reorganise some more
author | samer |
---|---|
date | Fri, 05 Apr 2019 22:41:58 +0100 |
parents | bf79fb79ee13 |
children |
line wrap: on
line source
(define (matmult A x nm) (define y (VVector. nm (.getRowDimension A))) (addtask (seq (Ops.times y A x) (Ops.update y))) y ) ;;; apply function to vector (define (fn-vec fn in outname) (let ((out (VVector. outname (.size in)))) (addtasks (Ops.apply out fn in) (Ops.update out)) out)) ; set up signal containing of sum_i fn(x_i) (define (sum-fn fn x nm) (define sig (node (.getNode x) (VDouble. nm))) (addtask (SumFnVec. fn x sig)) sig ) ;;; power spectrum (define (ft-vec in) (define ftv (FFTVector. in)) (addtask (.calcTask ftv)) (put "FFTVector" ftv) ftv ) (define (ft-power ftv) (define y (VVector. "ft.power" (+ 1 (/ (.size ftv) 2)))) (addtask (.getPower ftv y)) y ) ;;; magnitude spectrum, ie sqrt(power) (define (ft-mag ftv) (define y (VVector. "ft.mag" (+ 0 (/ (.size ftv) 2)))) (addtasks (.getFnPower ftv (Sqrt.) y)) y ) ;; log spectrum, ie log(power) (define (ft-log ftv) (define y (VVector. "ft.log" (+ 1 (/ (.size ftv) 2)))) (addtasks (.getFnPower ftv (Log.) y)) y ) ;;; linear FT, real valued version with sin and cosine parts (define (ft-linear ftv) (define y (VVector. "ft" (.size ftv))) (addtask (.getLinearFT ftv y)) y ) ;;; creates parameter viewables for a VFunction ;;; vfn: the VFunction (we need the node and the observable parts) ;;; models: list of (String,DoubleModel) pairs: we create a ;;; VParameter with the given name for each DoubleModel (define (vfn-params vfn models) (define obs (observer (.changed vfn))) (node (.getNode vfn) (for-each (lambda (model) ;; these VParameters will INITIALISE the DoubleModel with a value ;; read from the environment (define param (VParameter. (first model) (second model))) (.addObserver param obs) ) models))) (define (id x) x) (define (vscale k) (define f (Scale. k)) (VParameter. "scale" f) f) (define (vpower k) (define f (Power. k)) (VParameter. "power" f) f) (define (vgenexp) (define genexp (samer.functions.LogGenExp.)) (define vfn (VFunction. "logprior" genexp)) (vfn-params vfn `( ( "quad" ,genexp ,(.getEpsModel genexp)))) vfn ) (define-method (logcosh) (define fn (LogGenCosh.)) (define vfn (VFunction. "logcosh" fn)) (vfn-params vfn `(("alpha" ,fn))) fn) (define-method (genexp alpha lin quad) (define fn (LogGenExp2.)) (.set (.getAlphaModel fn) alpha) (.set (.getLinearScale fn) lin) (.set (.getQuadraticScale fn) quad) fn ) (define-method (genexp) (define fn (LogGenExp2.)) (define vfn (VFunction. "genexp" fn)) (vfn-params vfn `( ("alpha" ,fn) ("lin" ,(.getLinearScale fn)) ("quad" ,(.getQuadraticScale fn)) )) fn ) (define (nonneg logpr str) (define sq (ScaledFunction. (Square.) str)) (define vfn (VFunction. "hybrid" (HybridFunction. sq logpr))) ; (vfn-params vfn `(("strictness" ,sq))) (.getFunction vfn) ) ; returns list of integers from start to end (define (range start end) (define (rr l j) (if (< j start) l (rr (cons j l) (- j 1)))) (rr () (- end 1)) )