Sophie

Sophie

distrib > Fedora > 14 > x86_64 > media > updates > by-pkgid > a47f0719970f9f829128f311a437816d > files > 195

ghc-ForSyDe-devel-3.1.1-4.fc14.i686.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--Rendered using the Haskell Html Library v0.2-->
<HTML
><HEAD
><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
><TITLE
>ForSyDe.Shallow.FilterLib</TITLE
><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
></SCRIPT
><SCRIPT TYPE="text/javascript"
>window.onload = function () {setSynopsis("mini_ForSyDe-Shallow-FilterLib.html")};</SCRIPT
></HEAD
><BODY
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="topbar"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD
><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
></TD
><TD CLASS="title"
>ForSyDe-3.1.1: ForSyDe's Haskell-embedded Domain Specific Language.</TD
><TD CLASS="topbut"
><A HREF="src/ForSyDe-Shallow-FilterLib.html"
>Source code</A
></TD
><TD CLASS="topbut"
><A HREF="index.html"
>Contents</A
></TD
><TD CLASS="topbut"
><A HREF="doc-index.html"
>Index</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="modulebar"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD
><FONT SIZE="6"
>ForSyDe.Shallow.FilterLib</FONT
></TD
><TD ALIGN="right"
><TABLE CLASS="narrow" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="infohead"
>Portability</TD
><TD CLASS="infoval"
>portable</TD
></TR
><TR
><TD CLASS="infohead"
>Stability</TD
><TD CLASS="infoval"
>experimental</TD
></TR
><TR
><TD CLASS="infohead"
>Maintainer</TD
><TD CLASS="infoval"
>forsyde-dev@ict.kth.se</TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="section4"
><B
>Contents</B
></TD
></TR
><TR
><TD
><DL
><DT
><A HREF="#1"
>FIR filter
</A
></DT
><DT
><A HREF="#2"
>AR and ARMA filter trim
</A
></DT
><DT
><A HREF="#3"
>The solver mode
</A
></DT
><DT
><A HREF="#4"
>The general linear filter in S-domain
</A
></DT
><DT
><A HREF="#5"
>The general linear filter in Z-domain
</A
></DT
><DT
><A HREF="#6"
>s2z domain coefficient tranformation
</A
></DT
><DT
><A HREF="#7"
>The Z-domain to ARMA coefficient tranformation
</A
></DT
></DL
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
>Description</TD
></TR
><TR
><TD CLASS="doc"
><P
>This is the filter library for ForSyDe heterogeneous MoCs - CT-MoC, SR-MoC,
 and Untimed-MoC.
</P
><P
>The filters at CT-MoC are based on the filters implemented at SR-MoC and Untimed-MoC, 
 which means a signal in CT-MoC is always digitalized by a A/D converter, processed by 
 digital filters at SR or Untimed domain, and converted back into a CT domain signal by 
 a D/A converter. A CT-filter is composed of one A/D converter, one digital filter, and 
 one D/A converter.
</P
><P
>The implementation of the filters at untimed and synchronous domains follows the
 way in a paper /An introduction to Haskell with applications to digital signal processing, 
 David M. Goblirsch, in Proceedings of the 1994 ACM symposium on Applied computing./,
 where the details of the FIR/IIR, AR, and ARMA filters are introduced. The ARMA filter
 is the kernel part of our general linear filter <TT
><A HREF="ForSyDe-Shallow-FilterLib.html#v%3AzLinearFilter"
>zLinearFilter</A
></TT
> in Z-domain at SR/Untimed
 MoC, and is also the kernel digital filter for the linear filter <TT
><A HREF="ForSyDe-Shallow-FilterLib.html#v%3AsLinearFilter"
>sLinearFilter</A
></TT
> in 
 S-domain at CT-MoC.
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
>Synopsis</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
><A HREF="#v%3AfirFilter"
>firFilter</A
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3ANum"
>Num</A
> a =&gt; [a] -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AarFilterTrim"
>arFilterTrim</A
> :: (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3ANum"
>Num</A
> a, <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3AFractional"
>Fractional</A
> a) =&gt; [a] -&gt; a -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AarmaFilterTrim"
>armaFilterTrim</A
> :: (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3ANum"
>Num</A
> a, <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3AFractional"
>Fractional</A
> a) =&gt; [a] -&gt; [a] -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
>  <A HREF="#t%3ASolverMode"
>SolverMode</A
>  </TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
>= <A HREF="#v%3AS2Z"
>S2Z</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3ARK4"
>RK4</A
></TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AsLinearFilter"
>sLinearFilter</A
> :: (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3ANum"
>Num</A
> a, <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3AFractional"
>Fractional</A
> a) =&gt; <A HREF="ForSyDe-Shallow-FilterLib.html#t%3ASolverMode"
>SolverMode</A
> -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3ARational"
>Rational</A
> -&gt; [a] -&gt; [a] -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> (<A HREF="ForSyDe-Shallow-CTLib.html#t%3ASubsigCT"
>SubsigCT</A
> a) -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> (<A HREF="ForSyDe-Shallow-CTLib.html#t%3ASubsigCT"
>SubsigCT</A
> a)</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AzLinearFilter"
>zLinearFilter</A
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3AFractional"
>Fractional</A
> a =&gt; [a] -&gt; [a] -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3As2zCoef"
>s2zCoef</A
> :: (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3ANum"
>Num</A
> a, <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3AFractional"
>Fractional</A
> a) =&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3ARational"
>Rational</A
> -&gt; [a] -&gt; [a] -&gt; ([a], [a])</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Ah2ARMACoef"
>h2ARMACoef</A
> :: (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3ANum"
>Num</A
> a, <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3AFractional"
>Fractional</A
> a) =&gt; ([a], [a]) -&gt; ([a], [a])</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
><A NAME="1"
><A NAME="1"
>FIR filter
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:firFilter"
><A NAME="v%3AfirFilter"
></A
></A
><B
>firFilter</B
></TD
><TD CLASS="declbut"
><A HREF="src/ForSyDe-Shallow-FilterLib.html#firFilter"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="arg"
>:: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3ANum"
>Num</A
> a</TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
>=&gt; [a]</TD
><TD CLASS="rdoc"
>Coefficients of the FIR filter
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a</TD
><TD CLASS="rdoc"
>Input signal
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a</TD
><TD CLASS="rdoc"
>Output signal
</TD
></TR
><TR
><TD CLASS="ndoc" COLSPAN="2"
>The FIR filter. Let '[x_n]' denote the input signal, '[y_n]' denote the ouput
 signal, and '[h_n]' the impulse response of the filter. Suppose the length of
 the impulse responses is M samples. The formula for '[y_n]' is 
 $sum_{k=0}^{M-1} h_k*x_{n-k}$.
</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
><A NAME="2"
><A NAME="2"
>AR and ARMA filter trim
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:arFilterTrim"
><A NAME="v%3AarFilterTrim"
></A
></A
><B
>arFilterTrim</B
></TD
><TD CLASS="declbut"
><A HREF="src/ForSyDe-Shallow-FilterLib.html#arFilterTrim"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="arg"
>:: (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3ANum"
>Num</A
> a, <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3AFractional"
>Fractional</A
> a)</TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
>=&gt; [a]</TD
><TD CLASS="rdoc"
>Coefficients of the AR filter.
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; a</TD
><TD CLASS="rdoc"
>The gain
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a</TD
><TD CLASS="rdoc"
>Input signal
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a</TD
><TD CLASS="rdoc"
>Output signal
</TD
></TR
><TR
><TD CLASS="ndoc" COLSPAN="2"
>The autoregressive filter is the simplest IIR filter. It is characterized 
 by a list of numbers '[a_1,a_2,...,a_M]' called the autoregression 
 coefficients and a single number b called the gain. M is the order of 
 the filter. Let '[x_n]' denote the input signal, '[y_n]' denote the ouput
 signal. The formula for '[y_n]' is  $sum_{k=1}^M {a_k*y_{n-k}+b*x_n}$. 
 Although it is an IIR filter, here we only get the same length of ouput 
 signal as the input signal.
</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:armaFilterTrim"
><A NAME="v%3AarmaFilterTrim"
></A
></A
><B
>armaFilterTrim</B
></TD
><TD CLASS="declbut"
><A HREF="src/ForSyDe-Shallow-FilterLib.html#armaFilterTrim"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="arg"
>:: (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3ANum"
>Num</A
> a, <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3AFractional"
>Fractional</A
> a)</TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
>=&gt; [a]</TD
><TD CLASS="rdoc"
>Coefficients of the FIR filter
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; [a]</TD
><TD CLASS="rdoc"
>Coefficients of the AR filter.
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a</TD
><TD CLASS="rdoc"
>Input signal
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a</TD
><TD CLASS="rdoc"
>Output signal
</TD
></TR
><TR
><TD CLASS="ndoc" COLSPAN="2"
>The ARMA filter combines the FIR and AR filters. Let '[x_n]' denote the 
 input signal, '[y_n]' denote the ouput signal. The formula for '[y_n]' is
  $sum_{k=1}^M {a_k*y_{n-k}+b*x_n} + sum_{i=0}^{N-1} b_i*x_{n-i}$. The ARMA
 filter can be defined as the composition of an FIR filter having the impulse
 reponse '[b_0,b_1,...,b_N-1]' and an AR filter having the regression 
 coefficients '[a_1,a_2,...,a_M]' and a gain of '1'. Although it is an IIR 
 filter, here we only get the same length of ouput signal as the input signal.
</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
><A NAME="3"
><A NAME="3"
>The solver mode
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><SPAN CLASS="keyword"
>data</SPAN
>  <A NAME="t:SolverMode"
><A NAME="t%3ASolverMode"
></A
></A
><B
>SolverMode</B
>  </TD
><TD CLASS="declbut"
><A HREF="src/ForSyDe-Shallow-FilterLib.html#SolverMode"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="ndoc"
>The solver mode.
</TD
></TR
><TR
><TD CLASS="section4"
>Constructors</TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="arg"
><A NAME="v:S2Z"
><A NAME="v%3AS2Z"
></A
></A
><B
>S2Z</B
></TD
><TD CLASS="rdoc"
>Tustin tranfer from s-domain to z-domain
</TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v:RK4"
><A NAME="v%3ARK4"
></A
></A
><B
>RK4</B
></TD
><TD CLASS="rdoc"
>Runge Kutta 4 with fixed simulation steps
</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="section4"
><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:SolverMode')" ALT="show/hide"
> Instances</TD
></TR
><TR
><TD CLASS="body"
><DIV ID="i:SolverMode" STYLE="display:block;"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="decl"
><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> <A HREF="ForSyDe-Shallow-FilterLib.html#t%3ASolverMode"
>SolverMode</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Text-Show.html#t%3AShow"
>Show</A
> <A HREF="ForSyDe-Shallow-FilterLib.html#t%3ASolverMode"
>SolverMode</A
></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
><A NAME="4"
><A NAME="4"
>The general linear filter in S-domain
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:sLinearFilter"
><A NAME="v%3AsLinearFilter"
></A
></A
><B
>sLinearFilter</B
></TD
><TD CLASS="declbut"
><A HREF="src/ForSyDe-Shallow-FilterLib.html#sLinearFilter"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="arg"
>:: (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3ANum"
>Num</A
> a, <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3AFractional"
>Fractional</A
> a)</TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
>=&gt; <A HREF="ForSyDe-Shallow-FilterLib.html#t%3ASolverMode"
>SolverMode</A
></TD
><TD CLASS="rdoc"
>Specify the solver mode
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3ARational"
>Rational</A
></TD
><TD CLASS="rdoc"
>Fixed simulation interval
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; [a]</TD
><TD CLASS="rdoc"
>Coefficients of the polynomial numerator in s-domain
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; [a]</TD
><TD CLASS="rdoc"
>Coefficients of the polynomial denominator in s-domain
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> (<A HREF="ForSyDe-Shallow-CTLib.html#t%3ASubsigCT"
>SubsigCT</A
> a)</TD
><TD CLASS="rdoc"
>Input CT-signal
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> (<A HREF="ForSyDe-Shallow-CTLib.html#t%3ASubsigCT"
>SubsigCT</A
> a)</TD
><TD CLASS="rdoc"
>Output CT-signal
</TD
></TR
><TR
><TD CLASS="ndoc" COLSPAN="2"
><P
>The general linear filter in S-domain at CT-MoC. As the kernel
 implementation is in Z-domain, the smapling rate should be specified. 
 It is used on the S-transformation with the following forms, with 
 coefficients for the descending powers of s and m &lt; n.
</P
><PRE
>        b_0*s^m + b_1*s^m-1 + ... + b_m-1*s^1 + b_m*s^0
H(s) = ------------------------------------------------         (Eq 1)
        a_0*s^n + a_1*s^n-1 + ... + a_n-1*s^1 + a_n*s^0
</PRE
><P
>If we multiply both the numerator and the denominator with s^-n, we get 
 another equivelent canonical form
</P
><PRE
>        b_0*s^m-n + b_1*s^m-n-1 + ... + b_m-1*s^1-n + b_m*s^-n
H(s) = -----------------------------------------------------    (Eq 2)
        a_0*s^0 + a_1*s^-1 + ... + a_n-1*s^1-n + a_n*s^-n
</PRE
><P
>To instantiate a filter, with sampling interval 'T ', we use
</P
><PRE
> filter1 = sLinearFilter T [1] [2,1]
</PRE
><P
>to get a filter  with the transfer function
</P
><PRE
>          1
H(s) = --------
       2*s + 1
</PRE
><P
>and
</P
><PRE
> filter2 = sLinearFilter T [2,1] [1,2,2]
</PRE
><P
>to get another filter with the transfer function
</P
><PRE
>           2*s +1
H(s) = ----------------
        s^2 + 2*s + 2
</PRE
><P
>There are two solver modes, <TT
><A HREF="ForSyDe-Shallow-FilterLib.html#v%3AS2Z"
>S2Z</A
></TT
> and <TT
><A HREF="ForSyDe-Shallow-FilterLib.html#v%3ARK4"
>RK4</A
></TT
>.
 Caused by the precision problem, the time interval in CT uses Rational data
 type and the digital data types in all the domains are Double.
</P
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
><A NAME="5"
><A NAME="5"
>The general linear filter in Z-domain
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:zLinearFilter"
><A NAME="v%3AzLinearFilter"
></A
></A
><B
>zLinearFilter</B
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3AFractional"
>Fractional</A
> a =&gt; [a] -&gt; [a] -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a</TD
><TD CLASS="declbut"
><A HREF="src/ForSyDe-Shallow-FilterLib.html#zLinearFilter"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>The general linear filter in Z-domain.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
><A NAME="6"
><A NAME="6"
>s2z domain coefficient tranformation
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:s2zCoef"
><A NAME="v%3As2zCoef"
></A
></A
><B
>s2zCoef</B
></TD
><TD CLASS="declbut"
><A HREF="src/ForSyDe-Shallow-FilterLib.html#s2zCoef"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="arg"
>:: (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3ANum"
>Num</A
> a, <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3AFractional"
>Fractional</A
> a)</TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
>=&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3ARational"
>Rational</A
></TD
><TD CLASS="rdoc"
>Sampling rate in Z-domain
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; [a]</TD
><TD CLASS="rdoc"
>Coefficients of the polynomial numerator in s-domain
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; [a]</TD
><TD CLASS="rdoc"
>Coefficients of the polynomial denominator in s-domain
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; ([a], [a])</TD
><TD CLASS="rdoc"
>Tuple of the numerator and denominator 
  coefficients in Z-domain
</TD
></TR
><TR
><TD CLASS="ndoc" COLSPAN="2"
><P
>s2z domain coefficient tranformation with a specified sampling rate.
 The Tustin transformation is used for the transfer, with
</P
><PRE
>      2(z - 1)  
 s = ----------                                                 (Eq 3)
      T(z + 1)
</PRE
><P
>in which, T is the sampling interval.
</P
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
><A NAME="7"
><A NAME="7"
>The Z-domain to ARMA coefficient tranformation
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:h2ARMACoef"
><A NAME="v%3Ah2ARMACoef"
></A
></A
><B
>h2ARMACoef</B
></TD
><TD CLASS="declbut"
><A HREF="src/ForSyDe-Shallow-FilterLib.html#h2ARMACoef"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="arg"
>:: (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3ANum"
>Num</A
> a, <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3AFractional"
>Fractional</A
> a)</TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
>=&gt; ([a], [a])</TD
><TD CLASS="rdoc"
>Coefficients in Z-domain
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; ([a], [a])</TD
><TD CLASS="rdoc"
>Coefficients of the ARMA filter
</TD
></TR
><TR
><TD CLASS="ndoc" COLSPAN="2"
><P
>The Z-domain to ARMA coefficient tranformation. It is used on the 
 Z-transfer function
</P
><PRE
>        b_0*z^m-n + b_1*z^m-n-1 + ... + b_m-1*z^1-n + b_m*z^-n
H(z) = -----------------------------------------------------    (Eq 4)
        a_0*z^0 + a_1*z^-1 + ... + a_n-1*z^1-n + a_n*z^-n
</PRE
><P
>which is normalized as
</P
><PRE
>        b_0/a_0*z^m-n + b_1/a_0*z^m-n-1 + ... + b_m/a_0*z^-n
H(z) = -------------------------------------------------------  (Eq 5)
        1 + a_1/a_0*z^-1 + ... + a_n-1/a_0*z^1-n + a_n/a_0*z^-n
</PRE
><P
>The implementation coudl be
</P
><PRE
>y(k) = b_0/a_0*x_k+m-n + b_1/a_0*x_k+m-n-1 + ... + b_m/a_0*x_k-n
                                                                (Eq 6)
                       - a_1/a_0*y_k-1 - ... - a_n/a_0*y_k-n
</PRE
><P
>Then, we could get the coefficients of the ARMA filter.
</P
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="botbar"
>Produced by <A HREF="http://www.haskell.org/haddock/"
>Haddock</A
> version 2.6.1</TD
></TR
></TABLE
></BODY
></HTML
>