dsp-0.1: DSP/Filter/IIR/Matchedz.hs
-----------------------------------------------------------------------------
-- |
-- Module : DSP.Filter.IIR.Matchedz
-- Copyright : (c) Matthew Donadio 2003
-- License : GPL
--
-- Maintainer : m.p.donadio@ieee.org
-- Stability : experimental
-- Portability : portable
--
-- Matched-z transform
--
-- References: Proakis and Manolakis, Rabiner and Gold
--
-----------------------------------------------------------------------------
module DSP.Filter.IIR.Matchedz (matchedz) where
import Polynomial.Basic
import Polynomial.Roots
import Data.Complex
-- | Performs the matched-z transform
matchedz :: Double -- ^ T_s
-> ([Double],[Double]) -- ^ (b,a)
-> ([Double],[Double]) -- ^ (b',a')
matchedz ts (num,den) = (num',den')
where zeros = roots 1.0e-12 1000 $ map (:+ 0) $ num
poles = roots 1.0e-12 1000 $ map (:+ 0) $ den
zeros' = map exp $ map (* (ts :+ 0)) $ zeros
poles' = map exp $ map (* (ts :+ 0)) $ poles
num' = map realPart $ roots2poly zeros'
den' = map realPart $ roots2poly poles'