{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleContexts #-}
module Synthesizer.Generic.Analysis where
import qualified Synthesizer.Plain.Analysis as Ana
import qualified Synthesizer.State.Analysis as AnaS
import qualified Synthesizer.Generic.Signal as SigG
import qualified Algebra.Algebraic as Algebraic
import qualified Algebra.Field as Field
import qualified Algebra.RealRing as RealRing
import qualified Algebra.Ring as Ring
import qualified Algebra.NormedSpace.Maximum as NormedMax
import qualified Algebra.NormedSpace.Euclidean as NormedEuc
import qualified Algebra.NormedSpace.Sum as NormedSum
import NumericPrelude.Numeric
import NumericPrelude.Base
volumeMaximum :: (RealRing.C y, SigG.Read sig y) => sig y -> y
volumeMaximum :: forall y (sig :: * -> *). (C y, Read sig y) => sig y -> y
volumeMaximum =
forall y. C y => T y -> y
AnaS.volumeMaximum forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (sig :: * -> *) y.
(Read0 sig, Storage (sig y)) =>
sig y -> T y
SigG.toState
volumeEuclidean :: (Algebraic.C y, SigG.Read sig y) => sig y -> y
volumeEuclidean :: forall y (sig :: * -> *). (C y, Read sig y) => sig y -> y
volumeEuclidean =
forall y. C y => T y -> y
AnaS.volumeEuclidean forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (sig :: * -> *) y.
(Read0 sig, Storage (sig y)) =>
sig y -> T y
SigG.toState
volumeEuclideanSqr :: (Field.C y, SigG.Read sig y) => sig y -> y
volumeEuclideanSqr :: forall y (sig :: * -> *). (C y, Read sig y) => sig y -> y
volumeEuclideanSqr =
forall y. C y => T y -> y
AnaS.volumeEuclideanSqr forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (sig :: * -> *) y.
(Read0 sig, Storage (sig y)) =>
sig y -> T y
SigG.toState
volumeSum :: (Field.C y, RealRing.C y, SigG.Read sig y) => sig y -> y
volumeSum :: forall y (sig :: * -> *). (C y, C y, Read sig y) => sig y -> y
volumeSum =
forall y. (C y, C y) => T y -> y
AnaS.volumeSum forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (sig :: * -> *) y.
(Read0 sig, Storage (sig y)) =>
sig y -> T y
SigG.toState
volumeVectorMaximum ::
(NormedMax.C y yv, Ord y, SigG.Read sig yv) =>
sig yv -> y
volumeVectorMaximum :: forall y yv (sig :: * -> *).
(C y yv, Ord y, Read sig yv) =>
sig yv -> y
volumeVectorMaximum =
forall y yv. (C y yv, Ord y) => T yv -> y
AnaS.volumeVectorMaximum forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (sig :: * -> *) y.
(Read0 sig, Storage (sig y)) =>
sig y -> T y
SigG.toState
volumeVectorEuclidean ::
(Algebraic.C y, NormedEuc.C y yv, SigG.Read sig yv) =>
sig yv -> y
volumeVectorEuclidean :: forall y yv (sig :: * -> *).
(C y, C y yv, Read sig yv) =>
sig yv -> y
volumeVectorEuclidean =
forall y yv. (C y, C y yv) => T yv -> y
AnaS.volumeVectorEuclidean forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (sig :: * -> *) y.
(Read0 sig, Storage (sig y)) =>
sig y -> T y
SigG.toState
volumeVectorEuclideanSqr ::
(Field.C y, NormedEuc.Sqr y yv, SigG.Read sig yv) =>
sig yv -> y
volumeVectorEuclideanSqr :: forall y yv (sig :: * -> *).
(C y, Sqr y yv, Read sig yv) =>
sig yv -> y
volumeVectorEuclideanSqr =
forall y yv. (C y, Sqr y yv) => T yv -> y
AnaS.volumeVectorEuclideanSqr forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (sig :: * -> *) y.
(Read0 sig, Storage (sig y)) =>
sig y -> T y
SigG.toState
volumeVectorSum ::
(NormedSum.C y yv, Field.C y, SigG.Read sig yv) =>
sig yv -> y
volumeVectorSum :: forall y yv (sig :: * -> *).
(C y yv, C y, Read sig yv) =>
sig yv -> y
volumeVectorSum =
forall y yv. (C y yv, C y) => T yv -> y
AnaS.volumeVectorSum forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (sig :: * -> *) y.
(Read0 sig, Storage (sig y)) =>
sig y -> T y
SigG.toState
bounds :: (Ord y, SigG.Read sig y) => sig y -> (y,y)
bounds :: forall y (sig :: * -> *). (Ord y, Read sig y) => sig y -> (y, y)
bounds =
forall y. Ord y => T y -> (y, y)
AnaS.bounds forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (sig :: * -> *) y.
(Read0 sig, Storage (sig y)) =>
sig y -> T y
SigG.toState
directCurrentOffset ::
(Field.C y, SigG.Read sig y) => sig y -> y
directCurrentOffset :: forall y (sig :: * -> *). (C y, Read sig y) => sig y -> y
directCurrentOffset = forall y (sig :: * -> *). (C y, Read sig y) => sig y -> y
average
scalarProduct ::
(Ring.C y, SigG.Read sig y) => sig y -> sig y -> y
scalarProduct :: forall y (sig :: * -> *). (C y, Read sig y) => sig y -> sig y -> y
scalarProduct sig y
xs sig y
ys =
forall y. C y => T y -> T y -> y
AnaS.scalarProduct (forall (sig :: * -> *) y.
(Read0 sig, Storage (sig y)) =>
sig y -> T y
SigG.toState sig y
xs) (forall (sig :: * -> *) y.
(Read0 sig, Storage (sig y)) =>
sig y -> T y
SigG.toState sig y
ys)
centroid :: (Field.C y, SigG.Read sig y) => sig y -> y
centroid :: forall y (sig :: * -> *). (C y, Read sig y) => sig y -> y
centroid =
forall y. C y => T y -> y
AnaS.centroid forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (sig :: * -> *) y.
(Read0 sig, Storage (sig y)) =>
sig y -> T y
SigG.toState
average :: (Field.C y, SigG.Read sig y) => sig y -> y
average :: forall y (sig :: * -> *). (C y, Read sig y) => sig y -> y
average =
forall y. C y => T y -> y
AnaS.average forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (sig :: * -> *) y.
(Read0 sig, Storage (sig y)) =>
sig y -> T y
SigG.toState
rectify :: (RealRing.C y, SigG.Transform sig y) => sig y -> sig y
rectify :: forall y (sig :: * -> *). (C y, Transform sig y) => sig y -> sig y
rectify = forall (sig :: * -> *) y0 y1.
(Transform0 sig, Storage (sig y0), Storage (sig y1)) =>
(y0 -> y1) -> sig y0 -> sig y1
SigG.map forall a. C a => a -> a
abs
zeros :: (Ord y, Ring.C y, SigG.Transform sig y, SigG.Transform sig Bool) =>
sig y -> sig Bool
zeros :: forall y (sig :: * -> *).
(Ord y, C y, Transform sig y, Transform sig Bool) =>
sig y -> sig Bool
zeros =
forall (sig :: * -> *) a.
(Read sig a, Transform sig a) =>
(a -> a -> a) -> sig a -> sig a
SigG.mapAdjacent forall a. Eq a => a -> a -> Bool
(/=) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (sig :: * -> *) y0 y1.
(Transform0 sig, Storage (sig y0), Storage (sig y1)) =>
(y0 -> y1) -> sig y0 -> sig y1
SigG.map (forall a. Ord a => a -> a -> Bool
>=forall a. C a => a
zero)
flipFlopHysteresis ::
(Ord y, SigG.Transform sig y, SigG.Transform sig Ana.BinaryLevel) =>
(y,y) -> Ana.BinaryLevel -> sig y -> sig Ana.BinaryLevel
flipFlopHysteresis :: forall y (sig :: * -> *).
(Ord y, Transform sig y, Transform sig BinaryLevel) =>
(y, y) -> BinaryLevel -> sig y -> sig BinaryLevel
flipFlopHysteresis (y, y)
bnds = forall (sig :: * -> *) y0 y1.
(Transform0 sig, Storage (sig y0), Storage (sig y1)) =>
(y1 -> y0 -> y1) -> y1 -> sig y0 -> sig y1
SigG.scanL (forall a. Ord a => (a, a) -> BinaryLevel -> a -> BinaryLevel
Ana.flipFlopHysteresisStep (y, y)
bnds)
chirpTransform ::
(SigG.Write sig y, Ring.C y) =>
SigG.LazySize -> y -> sig y -> sig y
chirpTransform :: forall (sig :: * -> *) y.
(Write sig y, C y) =>
LazySize -> y -> sig y -> sig y
chirpTransform LazySize
size y
z =
forall (sig :: * -> *) y. Write sig y => LazySize -> T y -> sig y
SigG.fromState LazySize
size forall b c a. (b -> c) -> (a -> b) -> a -> c
.
forall y. C y => y -> T y -> T y
AnaS.chirpTransform y
z forall b c a. (b -> c) -> (a -> b) -> a -> c
.
forall (sig :: * -> *) y.
(Read0 sig, Storage (sig y)) =>
sig y -> T y
SigG.toState