<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE document PUBLIC "-//CNX//DTD CNXML 0.5 plus MathML//EN" "http://cnx.rice.edu/cnxml/0.5/DTD/cnxml_mathml.dtd">
<document xmlns="http://cnx.rice.edu/cnxml" xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="new18">
  <name>Filter Structures</name>
  <metadata>
  <md:version>1.2</md:version>
  <md:created>2003/07/11 16:03:05 GMT-5</md:created>
  <md:revised>2004/10/10 17:38:20.767 GMT-5</md:revised>
  <md:authorlist>
      <md:author id="dljones">
      <md:firstname>Douglas</md:firstname>
      <md:othername>L.</md:othername>
      <md:surname>Jones</md:surname>
      <md:email>dl-jones@uiuc.edu</md:email>
    </md:author>
  </md:authorlist>

  <md:maintainerlist>
    <md:maintainer id="dljones">
      <md:firstname>Douglas</md:firstname>
      <md:othername>L.</md:othername>
      <md:surname>Jones</md:surname>
      <md:email>dl-jones@uiuc.edu</md:email>
    </md:maintainer>
    <md:maintainer id="kclarks">
      <md:firstname>Kyle</md:firstname>
      
      <md:surname>Clarkson</md:surname>
      <md:email>kclarks@rice.edu</md:email>
    </md:maintainer>
  </md:maintainerlist>
  
  <md:keywordlist>
    <md:keyword>filter structures</md:keyword>
    <md:keyword>transfer function</md:keyword>
  </md:keywordlist>

  <md:abstract>Filter structures describe the computational sequence and data flow of a digital filter implementation.</md:abstract>
</metadata>

  <content>
    <para id="para1">
      A realizable filter must require only a finite number of
    computations per output sample. For linear, causal, time-Invariant filters,
    this restricts one to rational transfer functions of the form
      <m:math display="block">
	<m:apply>
	  <m:eq/>
	  <m:apply>
	    <m:ci type="fn">H</m:ci>
	    <m:ci>z</m:ci>
	  </m:apply>
	  <m:apply>
	    <m:divide/>
	    <m:apply>
	      <m:plus/>
	      <m:ci>
		<m:msub>
		  <m:mi>b</m:mi>
		  <m:mn>0</m:mn>
		</m:msub>
	      </m:ci>
	      <m:apply>
		<m:times/>
		<m:ci>
		  <m:msub>
		    <m:mi>b</m:mi>
		    <m:mn>1</m:mn>
		  </m:msub>
		</m:ci>
		<m:apply>
		  <m:inverse/>
		  <m:ci>z</m:ci>
		</m:apply>
	      </m:apply>
	      <m:ci>…</m:ci>
	      <m:apply>
		<m:times/>
		<m:ci>
		  <m:msub>
		    <m:mi>b</m:mi>
		    <m:mi>m</m:mi>
		  </m:msub>
		</m:ci>
		<m:apply>
		  <m:power/>
		  <m:ci>z</m:ci>
		  <m:apply>
		    <m:minus/>
		    <m:ci>m</m:ci>
		  </m:apply>
		</m:apply>
	      </m:apply>
	    </m:apply>
	    <m:apply>
	      <m:plus/>
	      <m:cn>1</m:cn>
	      <m:apply>
		<m:times/>
		<m:ci>
		  <m:msub>
		    <m:mi>a</m:mi>
		    <m:mn>1</m:mn>
		  </m:msub>
		</m:ci>
		<m:apply>
		  <m:inverse/>
		  <m:ci>z</m:ci>
		</m:apply>
	      </m:apply>
	      <m:apply>
		<m:times/>
		<m:ci>
		  <m:msub>
		    <m:mi>a</m:mi>
		    <m:mn>2</m:mn>
		  </m:msub>
		</m:ci>
		<m:apply>
		  <m:power/>
		  <m:ci>z</m:ci>
		  <m:cn>-2</m:cn>
		</m:apply>
	      </m:apply> 
	      <m:ci>…</m:ci>
	      <m:apply>
		<m:times/>
		<m:ci>
		  <m:msub>
		    <m:mi>a</m:mi>
		    <m:mi>n</m:mi>
		  </m:msub>
		</m:ci>
		<m:apply>
		  <m:power/>
		  <m:ci>z</m:ci>
		  <m:apply>
		    <m:minus/>
		    <m:ci>n</m:ci>
		  </m:apply>
		</m:apply>
	      </m:apply>
	    </m:apply>
	  </m:apply>
	</m:apply>
      </m:math>
      Assuming no pole-zero cancellations, 
      <m:math>
	<m:apply>
	  <m:ci type="fn">H</m:ci>
	  <m:ci>z</m:ci>
	</m:apply>
      </m:math> is FIR if
      <m:math>
	<m:apply>
	  <m:forall/>
	  <m:bvar>
	    <m:ci>i</m:ci>
	  </m:bvar>
	  <m:condition>
	    <m:apply>
	      <m:gt/>
	      <m:ci>i</m:ci>
	      <m:cn>0</m:cn>
	    </m:apply>
	  </m:condition>
	  <m:apply>
	    <m:eq/>
	    <m:ci>
	      <m:msub>
		<m:mi>a</m:mi>
		<m:mi>i</m:mi>
	      </m:msub>
	    </m:ci>
	    <m:cn>0</m:cn>
	  </m:apply>
	</m:apply>
      </m:math>, and IIR otherwise. Filter structures usually implement
      rational transfer functions as difference equations.
    </para>
    <para id="para2">
      Whether FIR or IIR, a given transfer function can be implemented with
    many different filter structures.  With infinite-precision data,  
    coefficients, and arithmetic, all filter structures implementing the
    same transfer function produce the same output.  However, different
    filter strucures may produce very different errors with quantized
    data and finite-precision or fixed-point arithmetic.  The computational
    expense and memory usage may also differ greatly.  Knowledge of different
    filter structures allows DSP engineers to trade off these factors to create
    the best implementation.
    </para>
  </content>
  
</document>
