<?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="new0">
  <name>Computational Savings of Polyphase Resampling</name>
  <metadata>
  <md:version>2.0</md:version>
  <md:created>2003/01/15</md:created>
  <md:revised>2003/01/15</md:revised>
  <md:authorlist>
      <md:author id="schniter">
      <md:firstname>Phil</md:firstname>
      
      <md:surname>Schniter</md:surname>
      <md:email>schniter@ee.eng.ohio-state.edu</md:email>
    </md:author>
  </md:authorlist>

  <md:maintainerlist>
    <md:maintainer id="jago">
      <md:firstname>Adan</md:firstname>
      
      <md:surname>Galvan</md:surname>
      <md:email>jago@rice.edu</md:email>
    </md:maintainer>
  </md:maintainerlist>
  
  <md:keywordlist>
    <md:keyword>polyphase resampling</md:keyword>
  </md:keywordlist>

  <md:abstract/>
</metadata>



  <content>
 
 <section id="sec2">
      <name>Computational Savings of Polyphase Resampling</name>

<para id="para2.1"> Recall the standard (non-polyphase) resampler in <cnxn target="fig4" strength="9"/>.</para>

      <figure id="fig4">
	<media type="image/png" src="m10443fig4.png"/>
      </figure>


      <para id="para2.2">
For simplicity, assume that <m:math><m:apply><m:gt/><m:ci>L</m:ci><m:ci>M</m:ci>
</m:apply></m:math>. Since the length of an FIR filter is inversely proportional 
to the transition bandwidth (recalling Kaiser's formula), and the transition 
bandwidth is directionally proportional to the cutoff frequency, we model the 
lowpass filter length as <m:math><m:apply><m:eq/><m:ci>N</m:ci><m:apply><m:times/>
<m:ci>α</m:ci><m:ci>L</m:ci></m:apply></m:apply></m:math>, where <m:math>
<m:ci>α</m:ci></m:math> is a constant that determines the filter's (and 
thus the resampler's) performance (independent of <m:math><m:ci>L</m:ci></m:math> 
and <m:math><m:ci>M</m:ci></m:math>). To compute one output point, we require 
<m:math><m:ci>M</m:ci></m:math> filter outputs, each requiring <m:math><m:apply>
<m:eq/><m:ci>N</m:ci><m:apply><m:times/><m:ci>α</m:ci><m:ci>L</m:ci>
</m:apply></m:apply></m:math> multiplies, giving a total of <m:math><m:apply>
<m:times/><m:ci>α</m:ci><m:ci>L</m:ci><m:ci>M</m:ci></m:apply></m:math> 
multiplies per output.
      </para>

      <para id="para2.3">
In the polyphase implementation, calculation of one output point requires the 
computation of only one polyphase filter output. With <m:math><m:apply><m:eq/>
<m:ci>N</m:ci><m:apply><m:times/><m:ci>α</m:ci><m:ci>L</m:ci></m:apply>
</m:apply></m:math> master filter taps and <m:math><m:ci>L</m:ci></m:math> 
branches, the polyphase filter length is <m:math><m:ci>α</m:ci></m:math>,
so that only <m:math><m:ci>α</m:ci></m:math> multiplies are required per 
output. Thus, the polyphase implementation saves a factor of <m:math><m:apply>
<m:times/><m:ci>L</m:ci><m:ci>M</m:ci></m:apply></m:math> multiplies over the 
standard implementation!
      </para>

    </section>
  </content>
  
</document>
