module DSP.Filter.Analog.Response where
import DSP.Basic ((^!))
import Polynomial.Basic
import Polynomial.Chebyshev
butterworth_H :: Int
-> Double
-> Double
-> Double
butterworth_H :: Int -> Double -> Double -> Double
butterworth_H Int
n Double
wc Double
w = Double
1 forall a. Fractional a => a -> a -> a
/ (Double
1 forall a. Num a => a -> a -> a
+ (Double
wforall a. Fractional a => a -> a -> a
/Double
wc)forall a b. (Num a, Integral b) => a -> b -> a
^(Int
2forall a. Num a => a -> a -> a
*Int
n))
chebyshev1_H :: Int
-> Double
-> Double
-> Double
-> Double
chebyshev1_H :: Int -> Double -> Double -> Double -> Double
chebyshev1_H Int
n Double
eps Double
wc Double
w = Double
1 forall a. Fractional a => a -> a -> a
/ (Double
1 forall a. Num a => a -> a -> a
+ Double
epsforall a. Num a => a -> Int -> a
^!Int
2 forall a. Num a => a -> a -> a
* Double -> Double
vn(Double
wforall a. Fractional a => a -> a -> a
/Double
wc)forall a. Num a => a -> Int -> a
^!Int
2)
where vn :: Double -> Double
vn = forall a. Num a => [a] -> a -> a
polyeval (forall a b. (Integral a, Num b) => a -> [b]
cheby Int
n)
chebyshev2_H :: Int
-> Double
-> Double
-> Double
-> Double
chebyshev2_H :: Int -> Double -> Double -> Double -> Double
chebyshev2_H Int
n Double
eps Double
wc Double
w = Double
1 forall a. Fractional a => a -> a -> a
/ (Double
1 forall a. Num a => a -> a -> a
+ (Double
epsforall a. Num a => a -> Int -> a
^!Int
2 forall a. Num a => a -> a -> a
* Double -> Double
vn(Double
wcforall a. Fractional a => a -> a -> a
/Double
w)forall a. Num a => a -> Int -> a
^!Int
2)forall a. Floating a => a -> a -> a
**(-Double
1))
where vn :: Double -> Double
vn = forall a. Num a => [a] -> a -> a
polyeval (forall a b. (Integral a, Num b) => a -> [b]
cheby Int
n)