----------------------------------------------------------------------------- -- | -- Module : DSP.Filter.Analog.Response -- Copyright : (c) Matthew Donadio 2003 -- License : GPL -- -- Maintainer : m.p.donadio@ieee.org -- Stability : experimental -- Portability : portable -- -- Module for generating analog filter responses -- -- Formulas are from Oppenheim and Schafer, Appendix B -- ----------------------------------------------------------------------------- module DSP.Filter.Analog.Response where import DSP.Basic ((^!)) import Polynomial.Basic import Polynomial.Chebyshev -- | Butterworth filter response function butterworth_H :: Int -- ^ N -> Double -- ^ w_c -> Double -- ^ w -> Double -- ^ |H_c(w)|^2 butterworth_H n wc w = 1 / (1 + (w/wc)^(2*n)) -- | Chebyshev filter response function chebyshev1_H :: Int -- ^ N -> Double -- ^ epsilon -> Double -- ^ w_c -> Double -- ^ w -> Double -- ^ |H_c(w)|^2 chebyshev1_H n eps wc w = 1 / (1 + eps^!2 * vn(w/wc)^!2) where vn = polyeval (cheby n) -- | Inverse Chebyshev filter response function -- -- Note that @w_c@ is a property of the stopband for this filter chebyshev2_H :: Int -- ^ N -> Double -- ^ epsilon -> Double -- ^ w_c -> Double -- ^ w -> Double -- ^ |H_c(w)|^2 chebyshev2_H n eps wc w = 1 / (1 + (eps^!2 * vn(wc/w)^!2)**(-1)) where vn = polyeval (cheby n)