{-# OPTIONS -fno-implicit-prelude #-} module Synthesizer.Plain.Filter.Recursive.Test where import qualified Synthesizer.Plain.Oscillator as Osci import qualified Synthesizer.Plain.Filter.Recursive.SecondOrder as Filt2 import qualified Synthesizer.Plain.Filter.Recursive.Butterworth as Butter import qualified Synthesizer.Plain.Filter.Recursive.Chebyshev as Cheby import Number.Complex((+:)) import qualified Algebra.Ring as Ring import PreludeBase import NumericPrelude sampleRate :: Ring.C a => a --sampleRate = 44100 sampleRate = 22050 --sampleRate = 11025 chirp :: Double -> [Double] chirp len = Osci.freqModSine 0 (iterate (+0.5/len) 0) filter2ndOrderTest :: [Double] filter2ndOrderTest = take 10 (Filt2.run (repeat (Filt2.Parameter 1 0 0 0 (1::Double))) (1 : repeat 0)) butterworthLowpassTest0 :: [Double] butterworthLowpassTest0 = take 30 (Butter.lowpass 2 0.2 (repeat (0.1::Double)) (repeat 1)) butterworthLowpassTest1 :: Double butterworthLowpassTest1 = maximum (take 300 (drop 500 (Butter.lowpass 6 0.1 (repeat (0.05::Double)) (map sin (iterate (+2*pi*0.05) 0))))) butterworthLowpassTest2 :: [Double] butterworthLowpassTest2 = let len = 1*sampleRate in take (round len) (Butter.lowpass 20 0.1 (repeat (0.1::Double)) (chirp len)) chebyshevALowpassTest0 :: Filt2.Parameter Double chebyshevALowpassTest0 = let beta = (asinh 1) / 4 in Cheby.parameterA 1 (12/13 * cosh beta +: (-5/13 * sinh beta)) 0.1 chebyshevBLowpassTest0 :: Filt2.Parameter Double chebyshevBLowpassTest0 = let beta = (asinh 1) / 4 in Cheby.parameterB (12/13) (12/13 * cosh beta +: (-5/13 * sinh beta)) 0.1 chebyshevLowpassTest1 :: [Double] chebyshevLowpassTest1 = let len = 1*sampleRate in take (round len) (Filt2.run (repeat chebyshevALowpassTest0) (chirp len)) chebyshevLowpassTest2 :: [Double] chebyshevLowpassTest2 = let len = 1*sampleRate in take (round len) (Cheby.lowpassA 10 0.25 (repeat (0.1::Double)) (chirp len))