{-# LANGUAGE NoImplicitPrelude #-}
module Synthesizer.Basic.Filter.NonRecursive where
import qualified Data.List.Match as Match
import Data.Tuple.HT (sortPair, )
import qualified Algebra.Transcendental as Trans
import qualified Algebra.Additive as Additive
import NumericPrelude.Numeric
import NumericPrelude.Base
unitSizesFromPyramid :: [signal] -> [Int]
unitSizesFromPyramid :: forall signal. [signal] -> [Int]
unitSizesFromPyramid [signal]
pyr =
[Int] -> [Int]
forall a. [a] -> [a]
reverse ([Int] -> [Int]) -> [Int] -> [Int]
forall a b. (a -> b) -> a -> b
$ [signal] -> [Int] -> [Int]
forall b a. [b] -> [a] -> [a]
Match.take [signal]
pyr ([Int] -> [Int]) -> [Int] -> [Int]
forall a b. (a -> b) -> a -> b
$ (Int -> Int) -> Int -> [Int]
forall a. (a -> a) -> a -> [a]
iterate (Int
2Int -> Int -> Int
forall a. C a => a -> a -> a
*) Int
1
sumRangePrepare :: (Additive.C v) =>
((Int,Int) -> source -> v) ->
(source -> (Int,Int) -> v)
sumRangePrepare :: forall v source.
C v =>
((Int, Int) -> source -> v) -> source -> (Int, Int) -> v
sumRangePrepare (Int, Int) -> source -> v
f source
pyr (Int
l,Int
r) =
case Int -> Int -> Ordering
forall a. Ord a => a -> a -> Ordering
compare Int
l Int
r of
Ordering
LT -> (Int, Int) -> source -> v
f (Int
l,Int
r) source
pyr
Ordering
GT -> v -> v
forall a. C a => a -> a
negate (v -> v) -> v -> v
forall a b. (a -> b) -> a -> b
$ (Int, Int) -> source -> v
f (Int
r,Int
l) source
pyr
Ordering
EQ -> v
forall a. C a => a
zero
symmetricRangePrepare ::
((Int,Int) -> source -> v) ->
(source -> (Int,Int) -> v)
symmetricRangePrepare :: forall source v.
((Int, Int) -> source -> v) -> source -> (Int, Int) -> v
symmetricRangePrepare (Int, Int) -> source -> v
f source
pyr (Int, Int)
lr = (Int, Int) -> source -> v
f ((Int, Int) -> (Int, Int)
forall a. Ord a => (a, a) -> (a, a)
sortPair (Int, Int)
lr) source
pyr
ratioFreqToVariance :: (Trans.C a) => a -> a -> a
ratioFreqToVariance :: forall a. C a => a -> a -> a
ratioFreqToVariance a
ratio a
freq =
a -> a
forall a. C a => a -> a
sqrt (-a
2 a -> a -> a
forall a. C a => a -> a -> a
* a -> a
forall a. C a => a -> a
log a
ratio) a -> a -> a
forall a. C a => a -> a -> a
/ (a
2a -> a -> a
forall a. C a => a -> a -> a
*a
forall a. C a => a
pia -> a -> a
forall a. C a => a -> a -> a
*a
freq)