module ForSyDe.Shallow.Utility.FilterLib (
firFilter,
arFilterTrim, armaFilterTrim,
SolverMode(..),
sLinearFilter,
zLinearFilter,
s2zCoef,
h2ARMACoef
)
where
import ForSyDe.Shallow.MoC
import ForSyDe.Shallow.Core
import ForSyDe.Shallow.Utility.PolyArith
import Data.List (zipWith5)
firFilter :: (Num a) => [a]
-> Signal a
-> Signal a
firFilter :: [a] -> Signal a -> Signal a
firFilter [a]
hs Signal a
xs = ([a] -> a -> [a]) -> ([a] -> a -> a) -> [a] -> Signal a -> Signal a
forall a b c.
(a -> b -> a) -> (a -> b -> c) -> a -> Signal b -> Signal c
mealySY [a] -> a -> [a]
forall a. [a] -> a -> [a]
stateF ([a] -> [a] -> a -> a
forall b. Num b => [b] -> [b] -> b -> b
outF [a]
hs) (Int -> a -> [a]
forall a. Int -> a -> [a]
repeatN ([a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [a]
hs) a
0) Signal a
xs
where
stateF :: [a] -> a -> [a]
stateF [a]
xs0 a
x = [a] -> a -> [a]
forall a. [a] -> a -> [a]
fixedList [a]
xs0 a
x
outF :: [b] -> [b] -> b -> b
outF [b]
hs [b]
xs0 b
x = [b] -> [b] -> b
forall b. Num b => [b] -> [b] -> b
iprod [b]
hs ([b] -> b) -> [b] -> b
forall a b. (a -> b) -> a -> b
$ [b] -> b -> [b]
forall a. [a] -> a -> [a]
fixedList [b]
xs0 b
x
arFilterTrim :: (Num a, Fractional a) =>
[a]
-> a
-> Signal a
-> Signal a
arFilterTrim :: [a] -> a -> Signal a -> Signal a
arFilterTrim [a]
as a
b Signal a
xs =
([a] -> a -> [a]) -> ([a] -> a -> a) -> [a] -> Signal a -> Signal a
forall a b c.
(a -> b -> a) -> (a -> b -> c) -> a -> Signal b -> Signal c
mealySY ([a] -> a -> [a] -> a -> [a]
forall a. Num a => [a] -> a -> [a] -> a -> [a]
stateF [a]
as a
b) ([a] -> a -> [a] -> a -> a
forall a. Num a => [a] -> a -> [a] -> a -> a
outF [a]
as a
b) (Int -> a -> [a]
forall a. Int -> a -> [a]
repeatN ([a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [a]
as) a
0) Signal a
xs
where
stateF :: [a] -> a -> [a] -> a -> [a]
stateF [a]
as a
b [a]
xs0 a
x = [a] -> a -> [a]
forall a. [a] -> a -> [a]
fixedList [a]
xs0 (a -> [a]) -> a -> [a]
forall a b. (a -> b) -> a -> b
$ [a] -> a -> [a] -> a -> a
forall a. Num a => [a] -> a -> [a] -> a -> a
outF [a]
as a
b [a]
xs0 a
x
outF :: [a] -> a -> [a] -> a -> a
outF [a]
as a
b [a]
xs0 a
x = a
ba -> a -> a
forall a. Num a => a -> a -> a
*a
x a -> a -> a
forall a. Num a => a -> a -> a
+ ([a] -> [a] -> a
forall b. Num b => [b] -> [b] -> b
iprod [a]
as [a]
xs0)
armaFilterTrim :: (Num a, Fractional a) =>
[a]
-> [a]
-> Signal a
-> Signal a
armaFilterTrim :: [a] -> [a] -> Signal a -> Signal a
armaFilterTrim [a]
bs [a]
as = [a] -> a -> Signal a -> Signal a
forall a. (Num a, Fractional a) => [a] -> a -> Signal a -> Signal a
arFilterTrim [a]
as a
1 (Signal a -> Signal a)
-> (Signal a -> Signal a) -> Signal a -> Signal a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [a] -> Signal a -> Signal a
forall a. Num a => [a] -> Signal a -> Signal a
firFilter [a]
bs
data SolverMode = S2Z
| RK4
deriving (Int -> SolverMode -> ShowS
[SolverMode] -> ShowS
SolverMode -> String
(Int -> SolverMode -> ShowS)
-> (SolverMode -> String)
-> ([SolverMode] -> ShowS)
-> Show SolverMode
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SolverMode] -> ShowS
$cshowList :: [SolverMode] -> ShowS
show :: SolverMode -> String
$cshow :: SolverMode -> String
showsPrec :: Int -> SolverMode -> ShowS
$cshowsPrec :: Int -> SolverMode -> ShowS
Show, SolverMode -> SolverMode -> Bool
(SolverMode -> SolverMode -> Bool)
-> (SolverMode -> SolverMode -> Bool) -> Eq SolverMode
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SolverMode -> SolverMode -> Bool
$c/= :: SolverMode -> SolverMode -> Bool
== :: SolverMode -> SolverMode -> Bool
$c== :: SolverMode -> SolverMode -> Bool
Eq)
sLinearFilter :: (Num a, Fractional a, Show a, Eq a) =>
SolverMode
-> Rational
-> [a]
-> [a]
-> Signal (SubsigCT a)
-> Signal (SubsigCT a)
sLinearFilter :: SolverMode
-> Rational
-> [a]
-> [a]
-> Signal (SubsigCT a)
-> Signal (SubsigCT a)
sLinearFilter SolverMode
filterMode Rational
step [a]
bs [a]
as Signal (SubsigCT a)
inS = Signal (SubsigCT a)
outS
where
inSDigital :: Signal a
inSDigital = Rational -> Signal (SubsigCT a) -> Signal a
forall a.
(Num a, Show a) =>
Rational -> Signal (SubsigCT a) -> Signal a
a2dConverter Rational
step Signal (SubsigCT a)
inS
outS :: Signal (SubsigCT a)
outS = DACMode -> Rational -> Signal a -> Signal (SubsigCT a)
forall a.
(Fractional a, Show a) =>
DACMode -> Rational -> Signal a -> Signal (SubsigCT a)
d2aConverter DACMode
DAhold Rational
step Signal a
outSDigital
outSDigital :: Signal a
outSDigital | SolverMode
filterMode SolverMode -> SolverMode -> Bool
forall a. Eq a => a -> a -> Bool
== SolverMode
S2Z = [a] -> [a] -> Signal a -> Signal a
forall a.
(Num a, Fractional a) =>
[a] -> [a] -> Signal a -> Signal a
armaFilterTrim [a]
bs' [a]
as' Signal a
inSDigital
| Bool
otherwise = Rational -> [a] -> [a] -> Signal a -> Signal a
forall a.
(Fractional a, Show a, Eq a) =>
Rational -> [a] -> [a] -> Signal a -> Signal a
rk4FilterDigital Rational
step [a]
as [a]
bs Signal a
inSDigital
where ([a]
bs',[a]
as') = ([a], [a]) -> ([a], [a])
forall a. (Num a, Fractional a) => ([a], [a]) -> ([a], [a])
h2ARMACoef (([a], [a]) -> ([a], [a])) -> ([a], [a]) -> ([a], [a])
forall a b. (a -> b) -> a -> b
$ Rational -> [a] -> [a] -> ([a], [a])
forall a.
(Num a, Fractional a, Eq a) =>
Rational -> [a] -> [a] -> ([a], [a])
s2zCoef Rational
step [a]
bs [a]
as
rk4FilterDigital :: (Fractional a, Show a, Eq a) =>
Rational -> [a] -> [a] -> Signal a -> Signal a
rk4FilterDigital :: Rational -> [a] -> [a] -> Signal a -> Signal a
rk4FilterDigital Rational
step [a]
as [a]
bs Signal a
inSDigital = Signal a
outSDigital
where
as'' :: [a]
as'' = (a -> Bool) -> [a] -> [a]
forall a. (a -> Bool) -> [a] -> [a]
dropWhile (\a
x -> a
xa -> a -> Bool
forall a. Eq a => a -> a -> Bool
==a
0.0) [a]
as
a0 :: a
a0 = [a] -> a
forall a. [a] -> a
head [a]
as''
as' :: [a]
as' = [a] -> [a]
forall a. [a] -> [a]
reverse ([a] -> [a]) -> [a] -> [a]
forall a b. (a -> b) -> a -> b
$ [a] -> [a]
forall a. [a] -> [a]
tail ([a] -> [a]) -> [a] -> [a]
forall a b. (a -> b) -> a -> b
$ (a -> a) -> [a] -> [a]
forall a b. (a -> b) -> [a] -> [b]
map (\a
x -> -a
xa -> a -> a
forall a. Fractional a => a -> a -> a
/a
a0) [a]
as''
bs' :: [a]
bs' = [a] -> [a]
forall a. [a] -> [a]
reverse ([a] -> [a]) -> [a] -> [a]
forall a b. (a -> b) -> a -> b
$ (a -> a) -> [a] -> [a]
forall a b. (a -> b) -> [a] -> [b]
map (\a
x -> a
xa -> a -> a
forall a. Fractional a => a -> a -> a
/a
a0) [a]
bs
orderFilter :: Int
orderFilter = [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [a]
as'
fXn :: [a] -> a
fXn = [a] -> [a] -> a
forall b. Num b => [b] -> [b] -> b
iprod (a
0a -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
as')
stateFunctions :: [[a] -> a]
stateFunctions = Int -> [[a] -> a]
forall t t1. (Num t, Num t1, Eq t) => t -> [[t1] -> t1]
ffn' Int
orderFilter [[a] -> a] -> [[a] -> a] -> [[a] -> a]
forall a. [a] -> [a] -> [a]
++ [[a] -> a
fXn]
initialStates :: [a]
initialStates = Int -> a -> [a]
forall a. Int -> a -> [a]
repeatN Int
orderFilter a
0.0
inputSteps :: Signal a
inputSteps = [a] -> Signal a
forall a. [a] -> Signal a
signal ([a] -> Signal a) -> [a] -> Signal a
forall a b. (a -> b) -> a -> b
$ a -> [a]
forall a. a -> [a]
repeat a
step'
statesSignal :: Signal [a]
statesSignal = a -> [a] -> [[a] -> a] -> Signal a -> Signal a -> Signal [a]
forall a.
(Num a, Fractional a) =>
a -> [a] -> [[a] -> a] -> Signal a -> Signal a -> Signal [a]
rks4InSY a
0.0 [a]
initialStates [[a] -> a]
stateFunctions
Signal a
inputSteps Signal a
inSDigital
outSDigital :: Signal a
outSDigital = ([a] -> a) -> Signal [a] -> Signal a
forall a b. (a -> b) -> Signal a -> Signal b
mapSY ([a] -> [a] -> a
forall b. Num b => [b] -> [b] -> b
iprod [a]
bs') Signal [a]
statesSignal
step' :: a
step' = Rational -> a
forall a. Fractional a => Rational -> a
fromRational Rational
step
ffn' :: (Num t, Num t1, Eq t) => t -> [[t1] -> t1]
ffn' :: t -> [[t1] -> t1]
ffn' t
n = Int -> t -> [[t1] -> t1]
forall t1 t. (Num t1, Num t, Eq t) => Int -> t -> [[t1] -> t1]
ffn Int
0 t
n
ffn :: (Num t1, Num t, Eq t) => Int -> t -> [[t1] -> t1]
ffn :: Int -> t -> [[t1] -> t1]
ffn Int
_ t
1 = []
ffn Int
m t
n = Int -> [t1] -> t1
forall t. Num t => Int -> [t] -> t
ff1 Int
m ([t1] -> t1) -> [[t1] -> t1] -> [[t1] -> t1]
forall a. a -> [a] -> [a]
: Int -> t -> [[t1] -> t1]
forall t1 t. (Num t1, Num t, Eq t) => Int -> t -> [[t1] -> t1]
ffn (Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1) (t
nt -> t -> t
forall a. Num a => a -> a -> a
-t
1)
ff1 :: Num t => Int -> [t] -> t
ff1 :: Int -> [t] -> t
ff1 Int
m = [t] -> [t] -> t
forall b. Num b => [b] -> [b] -> b
iprod ([t
0,t
0] [t] -> [t] -> [t]
forall a. [a] -> [a] -> [a]
++ (Int -> t -> [t]
forall a. Int -> a -> [a]
repeatN Int
m t
0) [t] -> [t] -> [t]
forall a. [a] -> [a] -> [a]
++ [t
1] [t] -> [t] -> [t]
forall a. [a] -> [a] -> [a]
++ (t -> [t]
forall a. a -> [a]
repeat t
0) )
rks4InSY :: (Num a, Fractional a) =>
a
-> [a]
-> [([a] -> a)]
-> Signal a
-> Signal a
-> Signal [a]
rks4InSY :: a -> [a] -> [[a] -> a] -> Signal a -> Signal a -> Signal [a]
rks4InSY a
x0 [a]
ys0 [[a] -> a]
fFs Signal a
hs Signal a
us = ([a] -> a -> a -> a -> [a])
-> [a] -> Signal a -> Signal a -> Signal a -> Signal [a]
forall a b c d.
(a -> b -> c -> d -> a)
-> a -> Signal b -> Signal c -> Signal d -> Signal a
scanl3SY [a] -> a -> a -> a -> [a]
stateF [a]
ys0 Signal a
xs Signal a
hs Signal a
us
where
stateF :: [a] -> a -> a -> a -> [a]
stateF [a]
ysn a
xn a
h a
ut = (a -> a -> a) -> [a] -> [a] -> [a]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith a -> a -> a
forall a. Num a => a -> a -> a
(+) (Int -> a -> [a]
forall a. Int -> a -> [a]
repeatN Int
orderODE' a
0.0 [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++ [a
uta -> a -> a
forall a. Num a => a -> a -> a
*a
h]) ([a] -> [a]) -> [a] -> [a]
forall a b. (a -> b) -> a -> b
$
a -> a -> [[a] -> a] -> [a] -> [a]
forall a.
(Num a, Fractional a) =>
a -> a -> [[a] -> a] -> [a] -> [a]
rks4 a
h a
xn [[a] -> a]
fFs [a]
ysn
xs :: Signal a
xs = (a -> a -> a) -> a -> Signal a -> Signal a
forall a b. (a -> b -> a) -> a -> Signal b -> Signal a
scanldSY a -> a -> a
forall a. Num a => a -> a -> a
(+) a
x0 Signal a
hs
orderODE' :: Int
orderODE' = [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [a]
ys0 Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1
rks4 :: (Num a, Fractional a) =>
a
-> a
-> [[a] -> a]
-> [a]
-> [a]
rks4 :: a -> a -> [[a] -> a] -> [a] -> [a]
rks4 a
h a
x0 [[a] -> a]
fFs [a]
ys0 = [a]
ys1
where
h_2 :: a
h_2 = a
ha -> a -> a
forall a. Fractional a => a -> a -> a
/a
2.0
ks1 :: [a]
ks1 = (a -> a) -> [a] -> [a]
forall a b. (a -> b) -> [a] -> [b]
map (a
ha -> a -> a
forall a. Num a => a -> a -> a
*) ([a] -> [a]) -> [a] -> [a]
forall a b. (a -> b) -> a -> b
$ [a] -> [[a] -> a] -> [a]
forall a b. a -> [a -> b] -> [b]
map' (a
x0a -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
ys0) [[a] -> a]
fFs
ks2 :: [a]
ks2 = (a -> a) -> [a] -> [a]
forall a b. (a -> b) -> [a] -> [b]
map (a
ha -> a -> a
forall a. Num a => a -> a -> a
*) ([a] -> [a]) -> [a] -> [a]
forall a b. (a -> b) -> a -> b
$ [a] -> [[a] -> a] -> [a]
forall a b. a -> [a -> b] -> [b]
map' (a
x0a -> a -> a
forall a. Num a => a -> a -> a
+a
h_2a -> [a] -> [a]
forall a. a -> [a] -> [a]
:(a -> a -> a) -> [a] -> [a] -> [a]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith (\a
y a
k-> a
ya -> a -> a
forall a. Num a => a -> a -> a
+a
ka -> a -> a
forall a. Fractional a => a -> a -> a
/a
2.0) [a]
ys0 [a]
ks1) [[a] -> a]
fFs
ks3 :: [a]
ks3 = (a -> a) -> [a] -> [a]
forall a b. (a -> b) -> [a] -> [b]
map (a
ha -> a -> a
forall a. Num a => a -> a -> a
*) ([a] -> [a]) -> [a] -> [a]
forall a b. (a -> b) -> a -> b
$ [a] -> [[a] -> a] -> [a]
forall a b. a -> [a -> b] -> [b]
map' (a
x0a -> a -> a
forall a. Num a => a -> a -> a
+a
h_2a -> [a] -> [a]
forall a. a -> [a] -> [a]
:(a -> a -> a) -> [a] -> [a] -> [a]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith (\a
y a
k-> a
ya -> a -> a
forall a. Num a => a -> a -> a
+a
ka -> a -> a
forall a. Fractional a => a -> a -> a
/a
2.0) [a]
ys0 [a]
ks2) [[a] -> a]
fFs
ks4 :: [a]
ks4 = (a -> a) -> [a] -> [a]
forall a b. (a -> b) -> [a] -> [b]
map (a
ha -> a -> a
forall a. Num a => a -> a -> a
*) ([a] -> [a]) -> [a] -> [a]
forall a b. (a -> b) -> a -> b
$ [a] -> [[a] -> a] -> [a]
forall a b. a -> [a -> b] -> [b]
map' (a
x0a -> a -> a
forall a. Num a => a -> a -> a
+a
ha -> [a] -> [a]
forall a. a -> [a] -> [a]
:(a -> a -> a) -> [a] -> [a] -> [a]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith (\a
y a
k-> a
ya -> a -> a
forall a. Num a => a -> a -> a
+a
k) [a]
ys0 [a]
ks3) [[a] -> a]
fFs
ys1 :: [a]
ys1 = (a -> a -> a -> a -> a -> a)
-> [a] -> [a] -> [a] -> [a] -> [a] -> [a]
forall a b c d e f.
(a -> b -> c -> d -> e -> f)
-> [a] -> [b] -> [c] -> [d] -> [e] -> [f]
zipWith5 (\a
y0 a
k1 a
k2 a
k3 a
k4 -> a
y0 a -> a -> a
forall a. Num a => a -> a -> a
+ a
k1a -> a -> a
forall a. Fractional a => a -> a -> a
/a
6 a -> a -> a
forall a. Num a => a -> a -> a
+ a
k2a -> a -> a
forall a. Fractional a => a -> a -> a
/a
3 a -> a -> a
forall a. Num a => a -> a -> a
+ a
k3a -> a -> a
forall a. Fractional a => a -> a -> a
/a
3 a -> a -> a
forall a. Num a => a -> a -> a
+ a
k4a -> a -> a
forall a. Fractional a => a -> a -> a
/a
6)
[a]
ys0 [a]
ks1 [a]
ks2 [a]
ks3 [a]
ks4
zLinearFilter :: Fractional a => [a] -> [a] -> Signal a -> Signal a
zLinearFilter :: [a] -> [a] -> Signal a -> Signal a
zLinearFilter [a]
bs [a]
as = [a] -> [a] -> Signal a -> Signal a
forall a.
(Num a, Fractional a) =>
[a] -> [a] -> Signal a -> Signal a
armaFilterTrim [a]
bs' [a]
as'
where
bs' :: [a]
bs' = (a -> a) -> [a] -> [a]
forall a b. (a -> b) -> [a] -> [b]
map ((\a
x a
y-> a
ya -> a -> a
forall a. Fractional a => a -> a -> a
/a
x ) ([a] -> a
forall a. [a] -> a
head [a]
as)) [a]
bs
as' :: [a]
as' = (a -> a) -> [a] -> [a]
forall a b. (a -> b) -> [a] -> [b]
map ((\a
x a
y-> -a
ya -> a -> a
forall a. Fractional a => a -> a -> a
/a
x ) ([a] -> a
forall a. [a] -> a
head [a]
as)) ([a] -> [a]) -> [a] -> [a]
forall a b. (a -> b) -> a -> b
$ [a] -> [a]
forall a. [a] -> [a]
tail [a]
as
s2zCoef :: (Num a, Fractional a, Eq a) =>
Rational
-> [a]
-> [a]
-> ([a], [a])
s2zCoef :: Rational -> [a] -> [a] -> ([a], [a])
s2zCoef Rational
sampleT [a]
bs [a]
as = ([a] -> [a]
forall a. [a] -> [a]
reverse [a]
bs', [a] -> [a]
forall a. [a] -> [a]
reverse [a]
as')
where
([a]
bs',[a]
as') = Poly a -> ([a], [a])
forall a. Num a => Poly a -> ([a], [a])
getCoef Poly a
hZ
bsInv :: [a]
bsInv = [a] -> [a]
forall a. [a] -> [a]
reverse [a]
bs
asInv :: [a]
asInv = [a] -> [a]
forall a. [a] -> [a]
reverse [a]
as
numerator' :: Poly a
numerator' = (Poly a -> (a, Poly a) -> Poly a)
-> Poly a -> [(a, Poly a)] -> Poly a
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl (\Poly a
x (a, Poly a)
y -> Poly a -> Poly a -> Poly a
forall a. (Num a, Eq a) => Poly a -> Poly a -> Poly a
addPoly Poly a
x (Poly a -> Poly a) -> Poly a -> Poly a
forall a b. (a -> b) -> a -> b
$ a -> Poly a -> Poly a
forall a. Num a => a -> Poly a -> Poly a
scalePoly ((a, Poly a) -> a
forall a b. (a, b) -> a
fst (a, Poly a)
y) ((a, Poly a) -> Poly a
forall a b. (a, b) -> b
snd (a, Poly a)
y))
([a] -> Poly a
forall a. [a] -> Poly a
Poly [a
0]) ([(a, Poly a)] -> Poly a) -> [(a, Poly a)] -> Poly a
forall a b. (a -> b) -> a -> b
$ [a] -> [Poly a] -> [(a, Poly a)]
forall a b. [a] -> [b] -> [(a, b)]
zip [a]
bsInv [Poly a]
sList
denominator' :: Poly a
denominator' = (Poly a -> (a, Poly a) -> Poly a)
-> Poly a -> [(a, Poly a)] -> Poly a
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl (\Poly a
x (a, Poly a)
y -> Poly a -> Poly a -> Poly a
forall a. (Num a, Eq a) => Poly a -> Poly a -> Poly a
addPoly Poly a
x (Poly a -> Poly a) -> Poly a -> Poly a
forall a b. (a -> b) -> a -> b
$ a -> Poly a -> Poly a
forall a. Num a => a -> Poly a -> Poly a
scalePoly ((a, Poly a) -> a
forall a b. (a, b) -> a
fst (a, Poly a)
y) ((a, Poly a) -> Poly a
forall a b. (a, b) -> b
snd (a, Poly a)
y))
([a] -> Poly a
forall a. [a] -> Poly a
Poly [a
0]) ([(a, Poly a)] -> Poly a) -> [(a, Poly a)] -> Poly a
forall a b. (a -> b) -> a -> b
$ [a] -> [Poly a] -> [(a, Poly a)]
forall a b. [a] -> [b] -> [(a, b)]
zip [a]
asInv [Poly a]
sList
hZ :: Poly a
hZ = Poly a -> Poly a -> Poly a
forall a. Num a => Poly a -> Poly a -> Poly a
divPoly Poly a
numerator' Poly a
denominator'
s :: Poly a
s = (Poly a, Poly a) -> Poly a
forall a. (Poly a, Poly a) -> Poly a
PolyPair ([a] -> Poly a
forall a. [a] -> Poly a
Poly [-a
2,a
2],[a] -> Poly a
forall a. [a] -> Poly a
Poly [Rational -> a
forall a. Fractional a => Rational -> a
fromRational Rational
sampleT,Rational -> a
forall a. Fractional a => Rational -> a
fromRational Rational
sampleT])
sList :: [Poly a]
sList = (Int -> Poly a) -> [Int] -> [Poly a]
forall a b. (a -> b) -> [a] -> [b]
map (Poly a -> Int -> Poly a
forall a. Num a => Poly a -> Int -> Poly a
powerPoly Poly a
s) [Int
0..]
h2ARMACoef :: (Num a, Fractional a) =>
([a], [a])
-> ([a], [a])
h2ARMACoef :: ([a], [a]) -> ([a], [a])
h2ARMACoef ([a]
bs,[a]
as) = (a -> [a] -> [a]
forall a. Num a => a -> [a] -> [a]
scalePolyCoef a
a0_1 [a]
bs,
a -> [a] -> [a]
forall a. Num a => a -> [a] -> [a]
scalePolyCoef (a
0a -> a -> a
forall a. Num a => a -> a -> a
-a
a0_1) ([a] -> [a]) -> [a] -> [a]
forall a b. (a -> b) -> a -> b
$ [a] -> [a]
forall a. [a] -> [a]
tail [a]
as)
where
a0_1 :: a
a0_1 = a
1.0a -> a -> a
forall a. Fractional a => a -> a -> a
/ [a] -> a
forall a. [a] -> a
head [a]
as
map' :: a -> [a->b] -> [b]
map' :: a -> [a -> b] -> [b]
map' = ([a -> b] -> a -> [b]) -> a -> [a -> b] -> [b]
forall a b c. (a -> b -> c) -> b -> a -> c
flip (([a -> b] -> a -> [b]) -> a -> [a -> b] -> [b])
-> ([a -> b] -> a -> [b]) -> a -> [a -> b] -> [b]
forall a b. (a -> b) -> a -> b
$ [a -> b] -> a -> [b]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence
iprod :: Num b => [b] -> [b] -> b
iprod :: [b] -> [b] -> b
iprod [b]
xs [b]
ys = [b] -> b
forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum [b
xb -> b -> b
forall a. Num a => a -> a -> a
*b
y | (b
x, b
y) <- [b] -> [b] -> [(b, b)]
forall a b. [a] -> [b] -> [(a, b)]
zip [b]
xs [b]
ys]
repeatN :: Int -> a -> [a]
repeatN :: Int -> a -> [a]
repeatN Int
n = Int -> [a] -> [a]
forall a. Int -> [a] -> [a]
take Int
n ([a] -> [a]) -> (a -> [a]) -> a -> [a]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> [a]
forall a. a -> [a]
repeat
fixedList :: [a] -> a -> [a]
fixedList :: [a] -> a -> [a]
fixedList [a]
xs a
y = Int -> [a] -> [a]
forall a. Int -> [a] -> [a]
take ([a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [a]
xs) ([a] -> [a]) -> [a] -> [a]
forall a b. (a -> b) -> a -> b
$ a
ya -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
xs