<?xml version="1.0" encoding="utf-8"?>
<!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:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" xmlns:md="http://cnx.rice.edu/mdml/0.4" id="id2255528">
  <name>Chebyshev or Equal Ripple Error Approximation Filters</name>
  <metadata>
  <md:version>1.1</md:version>
  <md:created>2008/06/09 13:27:26.300 GMT-5</md:created>
  <md:revised>2008/06/24 00:08:30.569 GMT-5</md:revised>
  <md:authorlist>
      <md:author id="cburrus">
      <md:firstname>C.</md:firstname>
      <md:othername>Sidney</md:othername>
      <md:surname>Burrus</md:surname>
      <md:email>csb@rice.edu</md:email>
    </md:author>
  </md:authorlist>

  <md:maintainerlist>
    <md:maintainer id="dcwill">
      <md:firstname>Daniel</md:firstname>
      <md:othername>Collins</md:othername>
      <md:surname>Williamson</md:surname>
      <md:email>dwilliamson1285@gmail.com</md:email>
    </md:maintainer>
    <md:maintainer id="cburrus">
      <md:firstname>C.</md:firstname>
      <md:othername>Sidney</md:othername>
      <md:surname>Burrus</md:surname>
      <md:email>csb@rice.edu</md:email>
    </md:maintainer>
  </md:maintainerlist>
  
  

  <md:abstract/>
</metadata>
  <content>
    <para id="id2255546">If one poses the FIR filter design problem by requiring the maximum error
over certain bands of frequencies be minimized, we call the resulting
filter a Chebyshev filter or an equal ripple filter. The fact that the
minimization of the Chebyshev or <m:math overflow="scroll"><m:msub><m:mi>L</m:mi><m:mi>∞</m:mi></m:msub></m:math> error results in an equal
ripple error comes from the alternation theorem. This very powerful
theorem allows one to minimize the Chebyshev error by directly
constructing an equal ripple approximation with the proper number of
ripples. That is the basis of several very effective algorithms, including the
Remez exchange algorithm.</para>
    <para id="id2255575">There are several ways one could pose the Chebyshev FIR filter design
problem. For a simple length-N linear phase, lowpass filter with a transition band, if
one considers the length N, the passband ripple <m:math overflow="scroll"><m:msub><m:mi>δ</m:mi><m:mi>p</m:mi></m:msub></m:math>, the stopband
ripple <m:math overflow="scroll"><m:msub><m:mi>δ</m:mi><m:mi>s</m:mi></m:msub></m:math>, and the transition bandwidth <m:math overflow="scroll"><m:mrow><m:mi>Δ</m:mi><m:mo>=</m:mo><m:msub><m:mi>ω</m:mi><m:mi>s</m:mi></m:msub><m:mo>-</m:mo><m:msub><m:mi>ω</m:mi><m:mi>p</m:mi></m:msub></m:mrow></m:math>, then one can fix or constrain any three of them and minimize
the fourth. Or, as Parks and McClellan do, fix the band edges, <m:math overflow="scroll"><m:msub><m:mi>ω</m:mi><m:mi>p</m:mi></m:msub></m:math> and
<m:math overflow="scroll"><m:msub><m:mi>ω</m:mi><m:mi>s</m:mi></m:msub></m:math>, and the ratio of <m:math overflow="scroll"><m:msub><m:mi>δ</m:mi><m:mi>p</m:mi></m:msub></m:math>
and <m:math overflow="scroll"><m:msub><m:mi>δ</m:mi><m:mi>s</m:mi></m:msub></m:math> and minimize one of them.</para>
    <para id="id2255700">The Chebyshev error measure is often used for approximation in digital
filter design. This is particularly true when the signals and/or noise
are narrow band or single frequency or when one wants to minimize worst
case possibilities. Theoretical justification for its use has been given
by Weisburn, Parks, and Shenoy <cnxn target="bid0"/>. For FIR filter design,
the Parks-McClellan formulation of the filter design problem and
application of the Remez exchange algorithm is most commonly used
<cnxn target="bid1"/>, <cnxn target="bid2"/>. It is a particularly interesting and powerful method that
should be studied and understood to be fully utilized.</para>
    <para id="id2255729">Linear programming was used earlier <cnxn target="bid3"/>, <cnxn target="bid4"/>, <cnxn target="bid5"/> but
dropped out of favor when the Parks-McClellan algorithm was introduced.
It is now becoming more popular again because of more powerful computers,
better algorithms <cnxn target="bid6"/>, <cnxn target="bid7"/>, and linear programming's ability to
allow a variety of constraints <cnxn target="bid8"/>.</para>
    <para id="id2255768">Still another approach to
achieving a Chebyshev approximation is to minimize the <m:math overflow="scroll"><m:msup><m:mi>p</m:mi><m:mrow><m:mi>t</m:mi><m:mi>h</m:mi></m:mrow></m:msup></m:math> power of
the error using a large value of <m:math overflow="scroll"><m:mi>p</m:mi></m:math> or to use an iterative scheme that
solves a weighted least squared error with the weights at each stage
determined by the error of the previous stage <cnxn target="bid9"/>. Still another
design method that produces an equal ripple error approximation uses a
constrained least squared error criterion <cnxn target="bid10"/>, <cnxn target="bid11"/> which results in a
Chebyshev solution if tight constraints are imposed.</para>
    <para id="id2255823">The early work by Herrmann and Schüssler <cnxn target="bid12"/>, <cnxn target="bid13"/> and the algorithm
by Hofstetter, Oppenheim, and Siegel <cnxn target="bid14"/>, <cnxn target="bid15"/> posed and solved a
similar problem but they had only approximate control of <m:math overflow="scroll"><m:msub><m:mi>ω</m:mi><m:mi>o</m:mi></m:msub></m:math> (or
<m:math overflow="scroll"><m:msub><m:mi>ω</m:mi><m:mi>p</m:mi></m:msub></m:math> or <m:math overflow="scroll"><m:msub><m:mi>ω</m:mi><m:mi>s</m:mi></m:msub></m:math>) and always achieved the “extra ripple" design.
Given the proper specifications, the Parks-McClellan algorithm could
design any filter that the Hofstetter-Oppenheim-Siegel algorithm could,
but the opposite is not true. This seems to be one of the reasons the
Hofstetter-Oppenheim-Siegel algorithm is not commonly used.</para>
    <section id="uid1">
      <name>The Linear Phase FIR Filter Chebyshev Approximation Problem</name>
      <para id="id2255912">The Chebyshev error is defined as the maximum difference between the
actual and desired response over a band or several bands of frequencies. This is</para>
      <equation id="uid2">
        <m:math mode="display" overflow="scroll">
          <m:mrow>
            <m:mi>ε</m:mi>
            <m:mspace width="0.166667em"/>
            <m:mo>=</m:mo>
            <m:mspace width="0.166667em"/>
            <m:munder>
              <m:mo movablelimits="true" form="prefix">max</m:mo>
              <m:mrow>
                <m:mi>ω</m:mi>
                <m:mo>∈</m:mo>
                <m:mi>Ω</m:mi>
              </m:mrow>
            </m:munder>
            <m:mrow>
              <m:mo>|</m:mo>
              <m:mi>A</m:mi>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:mi>ω</m:mi>
                <m:mo>)</m:mo>
              </m:mrow>
              <m:mo>-</m:mo>
              <m:msub>
                <m:mi>A</m:mi>
                <m:mi>d</m:mi>
              </m:msub>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:mi>ω</m:mi>
                <m:mo>)</m:mo>
              </m:mrow>
              <m:mo>|</m:mo>
            </m:mrow>
          </m:mrow>
        </m:math>
      </equation>
      <para id="id2254920">where <m:math overflow="scroll"><m:mi>Ω</m:mi></m:math> is the union of the bands of frequencies that the
approximation is over <cnxn target="bid16"/>, <cnxn target="bid17"/>. The approximation problem in
filter design is to choose the filter coefficients to minimize
<m:math overflow="scroll"><m:mi>ε</m:mi></m:math>.</para>
      <para id="id2256264">One way to minimize <m:math overflow="scroll"><m:mi>ε</m:mi></m:math> is to set up the frequency response in
four equations for the four types of linear phase FIR filters as done in
(<cnxn target=""/>), (<cnxn target=""/>), and the corresponding sine expressions. An
alternative approach <cnxn target="bid1"/> uses the fact that all four can be obtained
from the odd-length, even-symmetry type 1 and uses only (<cnxn target=""/>). From
one of these frequency response representations together with powerful
<emphasis>Alternation Theorem</emphasis> several optimization schemes can be developed.</para>
      <para id="id2256302">If the amplitude response for odd L is expressed as a sum of <m:math overflow="scroll"><m:mi>R</m:mi></m:math> cosine terms</para>
      <equation id="uid3">
        <m:math mode="display" overflow="scroll">
          <m:mrow>
            <m:mi>A</m:mi>
            <m:mrow>
              <m:mo>(</m:mo>
              <m:mi>ω</m:mi>
              <m:mo>)</m:mo>
            </m:mrow>
            <m:mspace width="0.166667em"/>
            <m:mo>=</m:mo>
            <m:mspace width="0.166667em"/>
            <m:munderover>
              <m:mo>∑</m:mo>
              <m:mrow>
                <m:mi>n</m:mi>
                <m:mo>=</m:mo>
                <m:mn>0</m:mn>
              </m:mrow>
              <m:mrow>
                <m:mi>R</m:mi>
                <m:mo>-</m:mo>
                <m:mn>1</m:mn>
              </m:mrow>
            </m:munderover>
            <m:mi>a</m:mi>
            <m:mrow>
              <m:mo>(</m:mo>
              <m:mi>n</m:mi>
              <m:mo>)</m:mo>
            </m:mrow>
            <m:mspace width="0.166667em"/>
            <m:mo form="prefix">cos</m:mo>
            <m:mrow>
              <m:mo>(</m:mo>
              <m:mi>ω</m:mi>
              <m:mi>n</m:mi>
              <m:mo>)</m:mo>
            </m:mrow>
          </m:mrow>
        </m:math>
      </equation>
      <para id="id2256392">or for even L</para>
      <equation id="uid4">
        <m:math mode="display" overflow="scroll">
          <m:mrow>
            <m:mi>A</m:mi>
            <m:mrow>
              <m:mo>(</m:mo>
              <m:mi>ω</m:mi>
              <m:mo>)</m:mo>
            </m:mrow>
            <m:mspace width="0.166667em"/>
            <m:mo>=</m:mo>
            <m:mspace width="0.166667em"/>
            <m:munderover>
              <m:mo>∑</m:mo>
              <m:mrow>
                <m:mi>n</m:mi>
                <m:mo>=</m:mo>
                <m:mn>1</m:mn>
              </m:mrow>
              <m:mi>R</m:mi>
            </m:munderover>
            <m:mi>a</m:mi>
            <m:mrow>
              <m:mo>(</m:mo>
              <m:mi>n</m:mi>
              <m:mo>)</m:mo>
            </m:mrow>
            <m:mspace width="0.166667em"/>
            <m:mo form="prefix">cos</m:mo>
            <m:mrow>
              <m:mo>(</m:mo>
              <m:mi>ω</m:mi>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:mi>n</m:mi>
                <m:mo>-</m:mo>
                <m:mn>1</m:mn>
                <m:mo>/</m:mo>
                <m:mn>2</m:mn>
                <m:mo>)</m:mo>
              </m:mrow>
              <m:mo>)</m:mo>
            </m:mrow>
          </m:mrow>
        </m:math>
      </equation>
      <para id="id2256483">with <m:math overflow="scroll"><m:mrow><m:mi>R</m:mi><m:mo>=</m:mo><m:mi>M</m:mi><m:mo>+</m:mo><m:mn>1</m:mn><m:mo>=</m:mo><m:mfrac><m:mrow><m:mi>L</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow><m:mn>2</m:mn></m:mfrac></m:mrow></m:math> for odd length-<m:math overflow="scroll"><m:mi>L</m:mi></m:math> and <m:math overflow="scroll"><m:mrow><m:mi>R</m:mi><m:mo>=</m:mo><m:mi>L</m:mi><m:mo>/</m:mo><m:mn>2</m:mn></m:mrow></m:math> for even length-<m:math overflow="scroll"><m:mi>L</m:mi></m:math>,
as derived in (<cnxn target=""/>) and (<cnxn target=""/>), then</para>
      <para id="id2256561">Theorem 1 
If <m:math overflow="scroll"><m:mrow><m:mi>A</m:mi><m:mo>(</m:mo><m:mi>ω</m:mi><m:mo>)</m:mo></m:mrow></m:math> is the linear combination of <m:math overflow="scroll"><m:mi>R</m:mi></m:math> cosine functions given
in (<cnxn target="uid3"/>) or (<cnxn target="uid4"/>), the necessary and sufficient conditions for
<m:math overflow="scroll"><m:mrow><m:mi>A</m:mi><m:mo>(</m:mo><m:mi>ω</m:mi><m:mo>)</m:mo></m:mrow></m:math> to be the least Chebyshev error approximation to <m:math overflow="scroll"><m:mrow><m:msub><m:mi>A</m:mi><m:mi>d</m:mi></m:msub><m:mrow><m:mo>(</m:mo><m:mi>ω</m:mi><m:mo>)</m:mo></m:mrow></m:mrow></m:math>
over <m:math overflow="scroll"><m:mrow><m:mi>ω</m:mi><m:mo>∈</m:mo><m:mi>Ω</m:mi></m:mrow></m:math> are: The error function, <m:math overflow="scroll"><m:mrow><m:mi>ϵ</m:mi><m:mrow><m:mo>(</m:mo><m:mi>ω</m:mi><m:mo>)</m:mo></m:mrow><m:mo>=</m:mo><m:mi>A</m:mi><m:mrow><m:mo>(</m:mo><m:mi>ω</m:mi><m:mo>)</m:mo></m:mrow><m:mo>-</m:mo><m:msub><m:mi>A</m:mi><m:mi>d</m:mi></m:msub><m:mrow><m:mo>(</m:mo><m:mi>ω</m:mi><m:mo>)</m:mo></m:mrow></m:mrow></m:math> have <emphasis>at least</emphasis><m:math overflow="scroll"><m:mrow><m:mi>R</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:math> extremal frequencies in <m:math overflow="scroll"><m:mi>Ω</m:mi></m:math>.
The extremal frequencies are ordered points <m:math overflow="scroll"><m:mrow><m:msub><m:mi>ω</m:mi><m:mn>1</m:mn></m:msub><m:mo>&lt;</m:mo><m:msub><m:mi>ω</m:mi><m:mn>2</m:mn></m:msub><m:mo>&lt;</m:mo><m:mo>⋯</m:mo><m:mo>&lt;</m:mo><m:msub><m:mi>ω</m:mi><m:mrow><m:mi>R</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:msub></m:mrow></m:math> such that <m:math overflow="scroll"><m:mrow><m:mi>ϵ</m:mi><m:mrow><m:mo>(</m:mo><m:msub><m:mi>ω</m:mi><m:mi>k</m:mi></m:msub><m:mo>)</m:mo></m:mrow><m:mo>=</m:mo><m:mo>-</m:mo><m:mi>ϵ</m:mi><m:mrow><m:mo>(</m:mo><m:msub><m:mi>ω</m:mi><m:mrow><m:mi>k</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:msub><m:mo>)</m:mo></m:mrow></m:mrow></m:math>
and <m:math overflow="scroll"><m:mrow><m:msub><m:mo movablelimits="true" form="prefix">max</m:mo><m:mrow><m:mi>ω</m:mi><m:mo>∈</m:mo><m:mi>Ω</m:mi></m:mrow></m:msub><m:mrow><m:mo>|</m:mo><m:mi>ϵ</m:mi><m:mrow><m:mo>(</m:mo><m:mi>ω</m:mi><m:mo>)</m:mo></m:mrow><m:mo>|</m:mo><m:mo>=</m:mo><m:mo>|</m:mo><m:mi>ϵ</m:mi></m:mrow><m:mrow><m:mo>(</m:mo><m:msub><m:mi>ω</m:mi><m:mi>k</m:mi></m:msub><m:mo>)</m:mo></m:mrow><m:mrow><m:mo>|</m:mo></m:mrow></m:mrow></m:math> for <m:math overflow="scroll"><m:mrow><m:mi>k</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>⋯</m:mo><m:mo>,</m:mo><m:mi>R</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:math>.</para>
      <para id="id2256917">The alternation theorem <cnxn target="bid1"/>, <cnxn target="bid18"/> states that the minimum Chebyshev
error has at least <m:math overflow="scroll"><m:mrow><m:mi>R</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:math> extremal frequencies. This is stated
mathematically by</para>
      <equation id="uid6">
        <m:math mode="display" overflow="scroll">
          <m:mrow>
            <m:mi>A</m:mi>
            <m:mrow>
              <m:mo>(</m:mo>
              <m:msub>
                <m:mi>ω</m:mi>
                <m:mi>k</m:mi>
              </m:msub>
              <m:mo>)</m:mo>
            </m:mrow>
            <m:mspace width="0.166667em"/>
            <m:mo>=</m:mo>
            <m:mspace width="0.166667em"/>
            <m:msub>
              <m:mi>A</m:mi>
              <m:mi>d</m:mi>
            </m:msub>
            <m:mrow>
              <m:mo>(</m:mo>
              <m:msub>
                <m:mi>ω</m:mi>
                <m:mi>k</m:mi>
              </m:msub>
              <m:mo>)</m:mo>
            </m:mrow>
            <m:mo>+</m:mo>
            <m:msup>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:mo>-</m:mo>
                <m:mn>1</m:mn>
                <m:mo>)</m:mo>
              </m:mrow>
              <m:mi>k</m:mi>
            </m:msup>
            <m:mi>δ</m:mi>
          </m:mrow>
        </m:math>
      </equation>
      <para id="id2257022">for <m:math overflow="scroll"><m:mrow><m:mi>k</m:mi><m:mo>=</m:mo><m:mn>0</m:mn><m:mo>,</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>⋯</m:mo><m:mo>,</m:mo><m:mi>R</m:mi></m:mrow></m:math>, where the <m:math overflow="scroll"><m:msub><m:mi>ω</m:mi><m:mi>k</m:mi></m:msub></m:math> are the ordered
extremal frequencies where the equal ripple error has maximum value. In
other words, the optimal solution to the linear phase FIR filter design
problem will have an equal ripple error function with a required number of
ripples. How all of these characteristics relate can be rather
complicated and good designs require experience <cnxn target="bid19"/>. When
applied to other approximation problems, care must be taken to ensure the
approximating functions satisfy the “Haar conditions" or other
restrictions <cnxn target="bid16"/>, <cnxn target="bid2"/>, <cnxn target="bid17"/>, <cnxn target="bid18"/>.</para>
    </section>
    <section id="uid7">
      <name>Chebyshev Approximation by Linear Programming</name>
      <para id="id2257124">It is possible to pose the Chebyshev approximation problem in filter
design as a linear programming optimization problem
<cnxn target="bid5"/>, <cnxn target="bid20"/>, <cnxn target="bid21"/>, <cnxn target="bid22"/>. The error definition in (<cnxn target="uid2"/>) can be
written as an inequality by</para>
      <equation id="uid9">
        <m:math mode="display" overflow="scroll">
          <m:mrow>
            <m:msub>
              <m:mi>A</m:mi>
              <m:mi>d</m:mi>
            </m:msub>
            <m:mrow>
              <m:mo>(</m:mo>
              <m:mi>ω</m:mi>
              <m:mo>)</m:mo>
            </m:mrow>
            <m:mo>-</m:mo>
            <m:mi>δ</m:mi>
            <m:mo>≤</m:mo>
            <m:mi>A</m:mi>
            <m:mrow>
              <m:mo>(</m:mo>
              <m:mi>ω</m:mi>
              <m:mo>)</m:mo>
            </m:mrow>
            <m:mo>≤</m:mo>
            <m:msub>
              <m:mi>A</m:mi>
              <m:mi>d</m:mi>
            </m:msub>
            <m:mrow>
              <m:mo>(</m:mo>
              <m:mi>ω</m:mi>
              <m:mo>)</m:mo>
            </m:mrow>
            <m:mo>+</m:mo>
            <m:mi>δ</m:mi>
          </m:mrow>
        </m:math>
      </equation>
      <para id="id2257222">where the scalar <m:math overflow="scroll"><m:mi>δ</m:mi></m:math> is minimized.</para>
      <para id="id2257237">The inequalities in (<cnxn target="uid9"/>) can be written as</para>
      <equation id="uid10">
        <m:math mode="display" overflow="scroll">
          <m:mrow>
            <m:mi>A</m:mi>
            <m:mo>≤</m:mo>
            <m:msub>
              <m:mi>A</m:mi>
              <m:mi>d</m:mi>
            </m:msub>
            <m:mo>+</m:mo>
            <m:mi>δ</m:mi>
          </m:mrow>
        </m:math>
      </equation>
      <equation id="uid11">
        <m:math mode="display" overflow="scroll">
          <m:mrow>
            <m:mo>-</m:mo>
            <m:mi>A</m:mi>
            <m:mo>≤</m:mo>
            <m:mo>-</m:mo>
            <m:msub>
              <m:mi>A</m:mi>
              <m:mi>d</m:mi>
            </m:msub>
            <m:mo>+</m:mo>
            <m:mi>δ</m:mi>
          </m:mrow>
        </m:math>
      </equation>
      <para id="id2257308">or</para>
      <equation id="uid12">
        <m:math mode="display" overflow="scroll">
          <m:mrow>
            <m:mi>A</m:mi>
            <m:mo>-</m:mo>
            <m:mi>δ</m:mi>
            <m:mo>≤</m:mo>
            <m:msub>
              <m:mi>A</m:mi>
              <m:mi>d</m:mi>
            </m:msub>
          </m:mrow>
        </m:math>
      </equation>
      <equation id="uid13">
        <m:math mode="display" overflow="scroll">
          <m:mrow>
            <m:mo>-</m:mo>
            <m:mi>A</m:mi>
            <m:mo>-</m:mo>
            <m:mi>δ</m:mi>
            <m:mo>≤</m:mo>
            <m:mo>-</m:mo>
            <m:msub>
              <m:mi>A</m:mi>
              <m:mi>d</m:mi>
            </m:msub>
          </m:mrow>
        </m:math>
      </equation>
      <para id="id2257375">which can be combined into one matrix inequality using (<cnxn target=""/>) by</para>
      <equation id="uid14">
        <m:math mode="display" overflow="scroll">
          <m:mrow>
            <m:mfenced separators="" open="[" close="]">
              <m:mtable>
                <m:mtr>
                  <m:mtd>
                    <m:mi>C</m:mi>
                  </m:mtd>
                  <m:mtd>
                    <m:mrow>
                      <m:mo>-</m:mo>
                      <m:mn>1</m:mn>
                    </m:mrow>
                  </m:mtd>
                </m:mtr>
                <m:mtr>
                  <m:mtd>
                    <m:mrow>
                      <m:mo>-</m:mo>
                      <m:mi>C</m:mi>
                    </m:mrow>
                  </m:mtd>
                  <m:mtd>
                    <m:mrow>
                      <m:mo>-</m:mo>
                      <m:mn>1</m:mn>
                    </m:mrow>
                  </m:mtd>
                </m:mtr>
              </m:mtable>
            </m:mfenced>
            <m:mfenced separators="" open="[" close="]">
              <m:mtable>
                <m:mtr>
                  <m:mtd>
                    <m:mi>a</m:mi>
                  </m:mtd>
                </m:mtr>
                <m:mtr>
                  <m:mtd>
                    <m:mi>δ</m:mi>
                  </m:mtd>
                </m:mtr>
              </m:mtable>
            </m:mfenced>
            <m:mo>≤</m:mo>
            <m:mfenced separators="" open="[" close="]">
              <m:mtable>
                <m:mtr>
                  <m:mtd>
                    <m:msub>
                      <m:mi>A</m:mi>
                      <m:mi>d</m:mi>
                    </m:msub>
                  </m:mtd>
                </m:mtr>
                <m:mtr>
                  <m:mtd>
                    <m:mrow>
                      <m:mo>-</m:mo>
                      <m:msub>
                        <m:mi>A</m:mi>
                        <m:mi>d</m:mi>
                      </m:msub>
                    </m:mrow>
                  </m:mtd>
                </m:mtr>
              </m:mtable>
            </m:mfenced>
            <m:mo>.</m:mo>
          </m:mrow>
        </m:math>
      </equation>
      <para id="id2257484">If <m:math overflow="scroll"><m:mi>δ</m:mi></m:math> is minimized, the optimal Chebyshev approximation is achieved.
This is done by minimizing</para>
      <equation id="uid15">
        <m:math mode="display" overflow="scroll">
          <m:mrow>
            <m:mi>ε</m:mi>
            <m:mspace width="0.166667em"/>
            <m:mo>=</m:mo>
            <m:mspace width="0.166667em"/>
            <m:mfenced open="[" close="]">
              <m:mtable>
                <m:mtr>
                  <m:mtd>
                    <m:mn>0</m:mn>
                  </m:mtd>
                  <m:mtd>
                    <m:mn>0</m:mn>
                  </m:mtd>
                  <m:mtd>
                    <m:mo>⋯</m:mo>
                  </m:mtd>
                  <m:mtd>
                    <m:mn>1</m:mn>
                  </m:mtd>
                </m:mtr>
              </m:mtable>
            </m:mfenced>
            <m:mfenced separators="" open="[" close="]">
              <m:mtable>
                <m:mtr>
                  <m:mtd>
                    <m:mi>a</m:mi>
                  </m:mtd>
                </m:mtr>
                <m:mtr>
                  <m:mtd>
                    <m:mi>δ</m:mi>
                  </m:mtd>
                </m:mtr>
              </m:mtable>
            </m:mfenced>
          </m:mrow>
        </m:math>
      </equation>
      <para id="id2257562">which, together with the inequality of (<cnxn target="uid14"/>), is in the form of the
dual problem in linear programming <cnxn target="bid23"/>, <cnxn target="bid24"/>, <cnxn target="bid25"/>.</para>
      <para id="id2257589">This can be solved using the lp()
 command from the Optimization
Toolbox with Matlab <cnxn target="bid26"/>, the Meteor software system <cnxn target="bid8"/>,
CPlex <cnxn target="bid27"/>, or Karmarkar's algorithm <cnxn target="bid7"/>, <cnxn target="bid28"/>. The
Matlab lp
 command is implemented in an m-file using a form of
quadratic programming algorithm that is not well suited to our filter
design problem. Meteor is a linear programming system using the simplex
algorithm written in Pascal by Ken Steiglitz especially for filter design.
It has been compiled on a variety of computers and efficiently designs
filters over 100 in length. The Karmarkar program written by Lang is a
relatively short m-file that is not particularly fast but is robust and
can design filters on the order of length-100. CPlex is a proprietary
program that can be used alone or called from Fortran programs and is
particularly robust and fast.</para>
      <para id="id2257644">A Matlab program that applies its linear programming function
lp.m
 to (<cnxn target="uid14"/>,<cnxn target="uid15"/>) for linear phase FIR filter design is
given by:</para>
      <code type="block">% lpdesign.m  Design an FIR filter from L, f1, f2, and LF using LP.
%  L is filter length, f1 and f2 are pass and stopband edges, LF is
%  the number of freq samples.  L is odd.  Uses lp.m
%         csb 5/22/91
L1 = fix(LF*f1/(.5-f2+f1));  L2 = LF - L1;     %No. freq samples in PB, SB
Ad = [ones(L1,1); zeros(L2,1)];                %Samples of ideal response
f  = [[0:L1-1]*f1/(L1-1), ([0:L2-1]*(.5-f2)/(L2-1) + f2)]';  %Freq samples
M  = (L-1)/2;
C  = cos(2*pi*(f*[0:M]));                      %Freq response matrix
CC = [C, -ones(LF,1); -C, -ones(LF,1)];        %LP matrix
AD = [Ad; -Ad];
c  = [zeros(M+1,1);1];                         %Cost function
x0 = [zeros(M+1,1);max(AD)+1];                 %Starting values
x  = lp(c,CC,AD,[],[],x0);                     %Call the LP
d  = x(M+2);                                   %delta or deviation
a  = x(1:M+1);                                 %Half impulse resp.
h  = [a(M+1:-1:2);2*a(1);a(2:M+1)]./2;         %Impulse response
</code>
      <para id="id2257884">This program has numerical problems for filters longer than 10 or 20 and
is fairly slow. The lp()
 function uses an algorithm that seems not
well suited to the equations required by filter design. It would be nice
to have Meteor written in Matlab, both to show how the Simplex algorithm
works, and to have an efficient LP filter design system in Matlab. The
above program has been tested using Karmarkar's algorithm
<cnxn target="bid7"/>, <cnxn target="bid29"/>, <cnxn target="bid6"/> as implemented in Matlab by Lang <cnxn target="bid28"/>.
It proved to be robust and reliable for lengths up to 100 or more. It was
faster than the Matlab function but slower than Meteor or CPlex. Its use
should be further investigated.</para>
      <para id="id2257926">Direct use of quadratic programming and other optimization algorithms seem
promising
<cnxn target="bid30"/>, <cnxn target="bid31"/>, <cnxn target="bid32"/>, <cnxn target="bid33"/>, <cnxn target="bid34"/>, <cnxn target="bid35"/>, <cnxn target="bid36"/>, <cnxn target="bid37"/>, <cnxn target="bid38"/>, <cnxn target="bid39"/></para>
    </section>
    <section id="uid16">
      <name>Chebyshev Approximations using the Exchange Algorithms</name>
      <para id="id2257996">A very efficient algorithm which uses the results of the alternation
theorem is called the <emphasis>Remez exchange algorithm</emphasis>. Remez
<cnxn target="bid40"/>, <cnxn target="bid16"/>, <cnxn target="bid18"/> showed that, under rather general conditions,
an algorithm that takes a starting estimate of the location of the
extremal frequencies and exchanges them with a new set calculated at each
iteration will converge to the optimal Chebyshev approximation. The
efficiency of this algorithm comes from finding the optimal solution by
directly constructing a function that satisfies the alternation theorem
rather than minimizing the Chebyshev error as done by the linear
programming technique. The Remez exchange algorithm has proven to be well
suited to the design of linear phase FIR filters <cnxn target="bid41"/>, <cnxn target="bid42"/>, <cnxn target="bid43"/>.</para>
      <para id="id2258050">A particularly useful FIR filter design implementation of the Remez exchange
is called the Parks-McClellan algorithm and is described in
<cnxn target="bid2"/>, <cnxn target="bid44"/>, <cnxn target="bid45"/>, <cnxn target="bid1"/>. It has been implemented in Fortran in
<cnxn target="bid46"/>, <cnxn target="bid45"/>, <cnxn target="bid47"/>, <cnxn target="bid1"/> and in Matlab in a program at the end of this
material. The Matlab program is particularly helpful in understanding how
the algorithm works, however, because it does not use any special tricks,
it is limited to lengths of 60 or so. Extensions and details can be found
in <cnxn target="bid48"/>, <cnxn target="bid49"/>, <cnxn target="bid50"/>, <cnxn target="bid51"/>, <cnxn target="bid52"/>, <cnxn target="bid53"/>, <cnxn target="bid54"/>, <cnxn target="bid55"/>, <cnxn target="bid56"/>, <cnxn target="bid57"/>, <cnxn target="bid58"/>.
This is a robust, efficient algorithm that significantly changed DSP when
Parks and McClellan first described it in 1972 and has undergone important
improvements. Examples are illustrated in <cnxn target="bid45"/>, <cnxn target="bid59"/>.</para>
      <section id="uid18">
        <name>The Basic Parks-McClellan Formulation and Algorithm</name>
        <para id="id2258192">Parks and McClellan formulated the basic Chebyshev FIR filter design
problem by specifying the desired amplitude response <m:math overflow="scroll"><m:mrow><m:mi>A</m:mi><m:mo>(</m:mo><m:mi>ω</m:mi><m:mo>)</m:mo></m:mrow></m:math> and the
transition band edges, then minimizing the weighted Chebyshev error over
the pass and stop bands. For the basic lowpass filter illustrated in
<cnxn target="uid20"/>, the pass band edge <m:math overflow="scroll"><m:msub><m:mi>ω</m:mi><m:mi>p</m:mi></m:msub></m:math> and the stop band edge <m:math overflow="scroll"><m:msub><m:mi>ω</m:mi><m:mi>s</m:mi></m:msub></m:math>
are specified, the maximum passband error is related to the maximum stop
band error by <m:math overflow="scroll"><m:mrow><m:msub><m:mi>δ</m:mi><m:mi>p</m:mi></m:msub><m:mo>=</m:mo><m:mi>K</m:mi><m:mspace width="0.166667em"/><m:msub><m:mi>δ</m:mi><m:mi>s</m:mi></m:msub></m:mrow></m:math> and they are minimized.</para>
        <figure id="uid20" orient="horizontal">
          <media type="application/postscript" src="figC0.eps">
            <media type="image/png" src="figC0.png"><!-- NOTE: width parameter changes size of image online (pixels). original width is 419. --><param name="width" value="419"/></media>
          </media>
          <caption>Amplitude Response of a Length-15 Optimal Chebyshev Filter</caption>
        </figure>
        <para id="id2258303">Notice that if there is no transition band, i.e. <m:math overflow="scroll"><m:mrow><m:msub><m:mi>ω</m:mi><m:mi>p</m:mi></m:msub><m:mo>=</m:mo><m:msub><m:mi>ω</m:mi><m:mi>s</m:mi></m:msub></m:mrow></m:math>,
that <m:math overflow="scroll"><m:mrow><m:msub><m:mi>δ</m:mi><m:mi>p</m:mi></m:msub><m:mo>+</m:mo><m:msub><m:mi>δ</m:mi><m:mi>s</m:mi></m:msub><m:mo>=</m:mo><m:mn>1</m:mn></m:mrow></m:math> and no minimization is possible. While not
the case for a least squares approximation, a transition band is necessary
for the Chebyshev approximation problem to be well-posed. The effects of
a small transition band are large pass and stopband ripple as illustrated
in <cnxn target="uid31"/>b.</para>
        <para id="id2258376">The alternation theorem states that the optimal approximation for this
problem will have an error function with <m:math overflow="scroll"><m:mrow><m:mi>R</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:math> extremal points with
alternating signs. The theorem also states that there exists <m:math overflow="scroll"><m:mrow><m:mi>R</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:math>
frequencies such that, if the Chebyshev error at those frequencies are
equal and alternate in sign, it will be minimized over the pass band and
stop band. Note that there are nine extremal points in the length-15 example
shown in <cnxn target="uid20"/>, counting those at the band edges in addition
to those that are interior to the pass and stopbands. For this case,
<m:math overflow="scroll"><m:mrow><m:mi>R</m:mi><m:mo>=</m:mo><m:mo>(</m:mo><m:mi>L</m:mi><m:mo>+</m:mo><m:mn>1</m:mn><m:mo>)</m:mo><m:mo>/</m:mo><m:mn>2</m:mn></m:mrow></m:math> which agree with the example.</para>
        <para id="id2258453">Parks and McClellan applied the Remez exchange algorithm <cnxn target="bid2"/> to this
filter design problem by writing <m:math overflow="scroll"><m:mrow><m:mi>R</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:math> equations using (<cnxn target=""/>) and
(<cnxn target="uid6"/>) evaluated at the <m:math overflow="scroll"><m:mrow><m:mi>R</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:math> extremal frequencies with <m:math overflow="scroll"><m:mi>R</m:mi></m:math> unknown
cosine parameters <m:math overflow="scroll"><m:mrow><m:mi>a</m:mi><m:mo>(</m:mo><m:mi>n</m:mi><m:mo>)</m:mo></m:mrow></m:math> and the unknown ripple value, <m:math overflow="scroll"><m:mi>δ</m:mi></m:math>. In
matrix form this becomes</para>
        <equation id="uid21">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mfenced separators="" open="[" close="]">
                <m:mtable>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:msub>
                          <m:mi>A</m:mi>
                          <m:mi>d</m:mi>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:msub>
                            <m:mi>ω</m:mi>
                            <m:mn>0</m:mn>
                          </m:msub>
                          <m:mo>)</m:mo>
                        </m:mrow>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:msub>
                          <m:mi>A</m:mi>
                          <m:mi>d</m:mi>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:msub>
                            <m:mi>ω</m:mi>
                            <m:mn>1</m:mn>
                          </m:msub>
                          <m:mo>)</m:mo>
                        </m:mrow>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:msub>
                          <m:mi>A</m:mi>
                          <m:mi>d</m:mi>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:msub>
                            <m:mi>ω</m:mi>
                            <m:mn>2</m:mn>
                          </m:msub>
                          <m:mo>)</m:mo>
                        </m:mrow>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:msub>
                          <m:mi>A</m:mi>
                          <m:mi>d</m:mi>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:msub>
                            <m:mi>ω</m:mi>
                            <m:mn>3</m:mn>
                          </m:msub>
                          <m:mo>)</m:mo>
                        </m:mrow>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mo>⋮</m:mo>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:msub>
                          <m:mi>A</m:mi>
                          <m:mi>d</m:mi>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:msub>
                            <m:mi>ω</m:mi>
                            <m:mi>R</m:mi>
                          </m:msub>
                          <m:mo>)</m:mo>
                        </m:mrow>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                </m:mtable>
              </m:mfenced>
              <m:mo>=</m:mo>
              <m:mfenced separators="" open="[" close="]">
                <m:mtable>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mn>0</m:mn>
                        </m:msub>
                        <m:mn>0</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mn>0</m:mn>
                        </m:msub>
                        <m:mn>1</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>⋯</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mn>0</m:mn>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:mi>R</m:mi>
                          <m:mo>-</m:mo>
                          <m:mn>1</m:mn>
                          <m:mo>)</m:mo>
                        </m:mrow>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd columnalign="right">
                      <m:mn>1</m:mn>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mn>1</m:mn>
                        </m:msub>
                        <m:mn>0</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mn>1</m:mn>
                        </m:msub>
                        <m:mn>1</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>⋯</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mn>1</m:mn>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:mi>R</m:mi>
                          <m:mo>-</m:mo>
                          <m:mn>1</m:mn>
                          <m:mo>)</m:mo>
                        </m:mrow>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd columnalign="right">
                      <m:mrow>
                        <m:mo>-</m:mo>
                        <m:mn>1</m:mn>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mn>2</m:mn>
                        </m:msub>
                        <m:mn>0</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mn>2</m:mn>
                        </m:msub>
                        <m:mn>1</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>⋯</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mn>2</m:mn>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:mi>R</m:mi>
                          <m:mo>-</m:mo>
                          <m:mn>1</m:mn>
                          <m:mo>)</m:mo>
                        </m:mrow>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd columnalign="right">
                      <m:mn>1</m:mn>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mn>3</m:mn>
                        </m:msub>
                        <m:mn>0</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mn>3</m:mn>
                        </m:msub>
                        <m:mn>1</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>⋯</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mn>3</m:mn>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:mi>R</m:mi>
                          <m:mo>-</m:mo>
                          <m:mn>1</m:mn>
                          <m:mo>)</m:mo>
                        </m:mrow>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd columnalign="right">
                      <m:mrow>
                        <m:mo>-</m:mo>
                        <m:mn>1</m:mn>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mo>⋮</m:mo>
                    </m:mtd>
                    <m:mtd/>
                    <m:mtd/>
                    <m:mtd/>
                    <m:mtd columnalign="right">
                      <m:mo>⋮</m:mo>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mi>R</m:mi>
                        </m:msub>
                        <m:mn>0</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mi>R</m:mi>
                        </m:msub>
                        <m:mn>1</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>⋯</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mi>R</m:mi>
                        </m:msub>
                        <m:mi>M</m:mi>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd columnalign="right">
                      <m:mrow>
                        <m:mo>±</m:mo>
                        <m:mn>1</m:mn>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                </m:mtable>
              </m:mfenced>
              <m:mfenced separators="" open="[" close="]">
                <m:mtable>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mi>a</m:mi>
                        <m:mo>(</m:mo>
                        <m:mn>0</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mi>a</m:mi>
                        <m:mo>(</m:mo>
                        <m:mn>1</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mi>a</m:mi>
                        <m:mo>(</m:mo>
                        <m:mn>2</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mo>⋮</m:mo>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mi>a</m:mi>
                        <m:mo>(</m:mo>
                        <m:mi>R</m:mi>
                        <m:mo>-</m:mo>
                        <m:mn>1</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mi>δ</m:mi>
                    </m:mtd>
                  </m:mtr>
                </m:mtable>
              </m:mfenced>
              <m:mo>.</m:mo>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2259182">These equations are solved for <m:math overflow="scroll"><m:mrow><m:mi>a</m:mi><m:mo>(</m:mo><m:mi>n</m:mi><m:mo>)</m:mo></m:mrow></m:math> and <m:math overflow="scroll"><m:mi>δ</m:mi></m:math> using an initial guess
as to the location of the extremal frequencies <m:math overflow="scroll"><m:msub><m:mi>ω</m:mi><m:mi>i</m:mi></m:msub></m:math>. This design is
optimal but only over the guessed frequencies, and we want optimality over
all of the pass and stopbands. Therefore, the amplitude response of the
filter is calculated over a dense set of frequency samples using
(<cnxn target=""/>) and a new set of estimates of the extremal frequencies is found
from the local minima and maxima and these are used to replace the initial
guesses (they are exchanged). This process is iteratively performed until
the guaranteed convergence is achieved and the optimal filter is designed.</para>
        <para id="id2259239">The detailed steps of the Parks-McClellan algorithm are:</para>
        <list id="id2259243" type="enumerated">
          <item id="uid22">Specify the ideal amplitude, <m:math overflow="scroll"><m:mrow><m:msub><m:mi>A</m:mi><m:mi>d</m:mi></m:msub><m:mrow><m:mo>(</m:mo><m:mi>ω</m:mi><m:mo>)</m:mo></m:mrow></m:mrow></m:math>, the stop and pass band edges,
<m:math overflow="scroll"><m:msub><m:mi>ω</m:mi><m:mi>p</m:mi></m:msub></m:math> and <m:math overflow="scroll"><m:msub><m:mi>ω</m:mi><m:mi>s</m:mi></m:msub></m:math>, the error weight <m:math overflow="scroll"><m:mi>K</m:mi></m:math> where <m:math overflow="scroll"><m:mrow><m:msub><m:mi>δ</m:mi><m:mi>p</m:mi></m:msub><m:mo>=</m:mo><m:mi>K</m:mi><m:mspace width="0.166667em"/><m:msub><m:mi>δ</m:mi><m:mi>s</m:mi></m:msub></m:mrow></m:math>, and the length <m:math overflow="scroll"><m:mi>L</m:mi></m:math>.
</item>
          <item id="uid23">Choose <m:math overflow="scroll"><m:mrow><m:mi>R</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:math> initial guesses for the extremal frequencies, <m:math overflow="scroll"><m:msub><m:mi>ω</m:mi><m:mi>i</m:mi></m:msub></m:math>, in
the bands of approximation, <m:math overflow="scroll"><m:mi>Ω</m:mi></m:math>.
This is often done uniformly over the pass and stop bands, including
<m:math overflow="scroll"><m:mrow><m:mi>ω</m:mi><m:mo>=</m:mo><m:mn>0</m:mn><m:mo>,</m:mo><m:msub><m:mi>ω</m:mi><m:mi>p</m:mi></m:msub><m:mo>,</m:mo><m:msub><m:mi>ω</m:mi><m:mi>s</m:mi></m:msub><m:mo>,</m:mo></m:mrow></m:math> and <m:math overflow="scroll"><m:mi>π</m:mi></m:math>.
</item>
          <item id="uid24">Calculate the cosine matrix at the current <m:math overflow="scroll"><m:msub><m:mi>ω</m:mi><m:mi>i</m:mi></m:msub></m:math> and solve (<cnxn target="uid21"/>) for
<m:math overflow="scroll"><m:mrow><m:mi>a</m:mi><m:mo>(</m:mo><m:mi>n</m:mi><m:mo>)</m:mo></m:mrow></m:math> and <m:math overflow="scroll"><m:mi>δ</m:mi></m:math> which are optimal over these current extremal frequencies,
<m:math overflow="scroll"><m:msub><m:mi>ω</m:mi><m:mi>i</m:mi></m:msub></m:math>.
</item>
          <item id="uid25">Using the <m:math overflow="scroll"><m:mrow><m:mi>a</m:mi><m:mo>(</m:mo><m:mi>n</m:mi><m:mo>)</m:mo></m:mrow></m:math> or the equivalent <m:math overflow="scroll"><m:mrow><m:mi>h</m:mi><m:mo>(</m:mo><m:mi>n</m:mi><m:mo>)</m:mo></m:mrow></m:math> from step 3, evaluate <m:math overflow="scroll"><m:mrow><m:mi>A</m:mi><m:mo>(</m:mo><m:mi>ω</m:mi><m:mo>)</m:mo></m:mrow></m:math>
over a dense set of frequencies. This amplitude response will interpolate
<m:math overflow="scroll"><m:mrow><m:mi>A</m:mi><m:mrow><m:mo>(</m:mo><m:msub><m:mi>ω</m:mi><m:mi>i</m:mi></m:msub><m:mo>)</m:mo></m:mrow><m:mo>=</m:mo><m:msub><m:mi>A</m:mi><m:mi>d</m:mi></m:msub><m:mrow><m:mo>(</m:mo><m:msub><m:mi>ω</m:mi><m:mi>i</m:mi></m:msub><m:mo>)</m:mo></m:mrow><m:mo>±</m:mo><m:mi>δ</m:mi></m:mrow></m:math> at the extremal frequencies.
</item>
          <item id="uid26">Find <m:math overflow="scroll"><m:mrow><m:mi>R</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:math> new extremal frequencies where the error has a local maximum
or minimum and has alternating sign. This includes the band edges.
</item>
          <item id="uid27">If the largest error is the same as <m:math overflow="scroll"><m:mi>δ</m:mi></m:math> found in step 3, then
convergence has occured and the optimal filter has been designed, otherwise,
exchange the old extremal frequencies <m:math overflow="scroll"><m:msub><m:mi>ω</m:mi><m:mi>i</m:mi></m:msub></m:math> used in step 2 and
return to step 3 for the next iteration.
</item>
          <item id="uid28">This iterative algorithm is guaranteed to converge to the unique optimal
solution using almost any starting points in step 2.
</item>
        </list>
        <para id="id2259723">This iterative procedure is called a multiple exchange algorithm because
all of the extremal frequencies are up-dated each iteration. If only the
frequency of the largest error is up-dated each iteration, it is called a
single exchange algorithm which also converges but much more slowly. Some
modification of the Parks-McClellan method or the Remez exchange algorithm
will not converge as a multiple exchange, but will as a single exchange.</para>
        <para id="id2259734">The Alternation theorem states that there will be a minimum of <m:math overflow="scroll"><m:mrow><m:mi>R</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:math>
extremal frequencies, even for multiband designs with arbitrary
<m:math overflow="scroll"><m:mrow><m:msub><m:mi>A</m:mi><m:mi>d</m:mi></m:msub><m:mrow><m:mo>(</m:mo><m:mi>ω</m:mi><m:mo>)</m:mo></m:mrow></m:mrow></m:math>. If <m:math overflow="scroll"><m:mrow><m:msub><m:mi>A</m:mi><m:mi>d</m:mi></m:msub><m:mrow><m:mo>(</m:mo><m:mi>ω</m:mi><m:mo>)</m:mo></m:mrow></m:mrow></m:math> is piece-wise constant with <m:math overflow="scroll"><m:mi>T</m:mi></m:math>
transition bands, one can derive the maximum possible number of extremal
frequencies and it is <m:math overflow="scroll"><m:mrow><m:mi>R</m:mi><m:mo>+</m:mo><m:mn>2</m:mn><m:mspace width="0.166667em"/><m:mi>T</m:mi></m:mrow></m:math>. This comes from the maximum number
of maxima and minima that a function of the form (<cnxn target="uid3"/>) or
(<cnxn target="uid4"/>) can have plus two at the edges of each transition band. For a
simple lowpass filter with one passband, one transition band, and one
stopband, there will be a minimum of <m:math overflow="scroll"><m:mrow><m:mi>R</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:math> extremal frequencies and a
maximum of <m:math overflow="scroll"><m:mrow><m:mi>R</m:mi><m:mo>+</m:mo><m:mn>2</m:mn></m:mrow></m:math>. For a bandpass filter, the maximum is <m:math overflow="scroll"><m:mrow><m:mi>R</m:mi><m:mo>+</m:mo><m:mn>4</m:mn></m:mrow></m:math>. If a design has more than the minimum number of extremal frequencies, it is
called an <emphasis>extra ripple</emphasis> design. If it has the maximum number, it is
called a <emphasis>maximum ripple</emphasis> design.</para>
        <para id="id2259903">It is interesting to note that at each iteration, the approximation is
optimal over that set of extremal frequencies and <m:math overflow="scroll"><m:mi>δ</m:mi></m:math> increased
over the previous iteration. At convergence, <m:math overflow="scroll"><m:mi>δ</m:mi></m:math> has increased to
the maximum error over <m:math overflow="scroll"><m:mi>Ω</m:mi></m:math> and that is the minimum Chebyshev error.</para>
        <para id="id2259937">At each iteration, the exchange of a proper set of extremal frequencies
with alternating signs of the errors is always possible. One can show
there will never be too few and if there are too many, one uses those
corresponding to the largest errors.</para>
        <para id="id2259945">In step 4 it is suggested that the amplitude response <m:math overflow="scroll"><m:mrow><m:mi>A</m:mi><m:mo>(</m:mo><m:mi>ω</m:mi><m:mo>)</m:mo></m:mrow></m:math> be
calculated over a dense grid in the pass and stopbands and in step 5
the local extremes are found by searching over this dense grid. There
are more accurate methods that use bisection methods and/or Newton's
method to find the extremal points.</para>
        <para id="id2259975">In step 2 it is suggested that the simultaneous equation of (<cnxn target="uid21"/>) be
solved. Parks and McClellan <cnxn target="bid46"/> use a more efficient and
numerically robust method of evaluating <m:math overflow="scroll"><m:mi>δ</m:mi></m:math> using a form of Cramer's
rule. With that <m:math overflow="scroll"><m:mi>δ</m:mi></m:math>, an interpolation method can be used to find
<m:math overflow="scroll"><m:mrow><m:mi>a</m:mi><m:mo>(</m:mo><m:mi>n</m:mi><m:mo>)</m:mo></m:mrow></m:math>. This is faster and allows longer filters to be designed than with
the linear algebra based approach described here.</para>
        <para id="id2260032">For the low pass filter, this formulation always has an extremal frequency
at both pass and stop band edges, <m:math overflow="scroll"><m:msub><m:mi>ω</m:mi><m:mi>p</m:mi></m:msub></m:math> and <m:math overflow="scroll"><m:msub><m:mi>ω</m:mi><m:mi>s</m:mi></m:msub></m:math>, and at
<m:math overflow="scroll"><m:mrow><m:mi>ω</m:mi><m:mo>=</m:mo><m:mn>0</m:mn></m:mrow></m:math> and/or at <m:math overflow="scroll"><m:mrow><m:mi>ω</m:mi><m:mo>=</m:mo><m:mi>π</m:mi></m:mrow></m:math>. The extra ripple filter has <m:math overflow="scroll"><m:mrow><m:mi>R</m:mi><m:mo>+</m:mo><m:mn>2</m:mn></m:mrow></m:math>
extremal frequencies including both zero and pi. If this algorithm is
started with an incorrect number of extremal frequencies in the stop or
pass band, the iterations will correct this. It is interesting and
informative to plot the frequency response of the filters designed at each
iteration of this algorithm and observe how the correction takes place.</para>
        <para id="id2260116">The Parks-McClellan algorithm starts with fixed pass and stop band edges
then minimizes a weighted form of the pass and stop band error ripple. In
some cases it may be more appropriate to fix one of the ripples and
minimize the other or to fix both ripples and minimize the transition band
width. Indeed Schüssler, Hofstetter, Tufts, and others <cnxn target="bid13"/>, <cnxn target="bid12"/>, <cnxn target="bid14"/>, <cnxn target="bid15"/>
formulated some of these ideas before Parks and McClellan developed their
algorithm. The DSP group at Rice has developed some modifications to
these methods and they are presented below.</para>
      </section>
      <section id="uid29">
        <name>Examples of the Parks-McClellan Algorithm</name>
        <para id="id2260166">Here we look at several examples of filters designed by the Parks-McClellan algorithm.
The examples here are length-15 with that shown in <cnxn target="uid30"/>a having a passband
<m:math overflow="scroll"><m:mrow><m:mn>0</m:mn><m:mo>&lt;</m:mo><m:mi>f</m:mi><m:mo>&lt;</m:mo><m:mn>0</m:mn><m:mo>.</m:mo><m:mn>3</m:mn></m:mrow></m:math>, a transition band <m:math overflow="scroll"><m:mrow><m:mn>0</m:mn><m:mo>.</m:mo><m:mn>3</m:mn><m:mo>&lt;</m:mo><m:mi>f</m:mi><m:mo>&lt;</m:mo><m:mn>0</m:mn><m:mo>.</m:mo><m:mn>5</m:mn></m:mrow></m:math>, and a stopband <m:math overflow="scroll"><m:mrow><m:mn>0</m:mn><m:mo>.</m:mo><m:mn>5</m:mn><m:mo>&lt;</m:mo><m:mi>f</m:mi><m:mo>&lt;</m:mo><m:mn>1</m:mn></m:mrow></m:math>. The
number of cosine terms in the frequency response formula is <m:math overflow="scroll"><m:mrow><m:mi>R</m:mi><m:mo>=</m:mo><m:mn>8</m:mn></m:mrow></m:math>, therefore, the
alternation theorem says we must have at least <m:math overflow="scroll"><m:mrow><m:mi>R</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:math> extremal points. There are four
in the passband, counting the one at zero frequency, the minimum, the maximum, and
the minimum at the bandedge. There are five in the stopband, counting the ones at the
bandedge and at <m:math overflow="scroll"><m:mrow><m:mi>f</m:mi><m:mo>=</m:mo><m:mn>1</m:mn></m:mrow></m:math>. So, the number is nine which is at least <m:math overflow="scroll"><m:mrow><m:mi>R</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:math>. However, in
<cnxn target="uid30"/>c, there are ten extremal points but that is also at least 9, so it
also is optimal. For a low pass filter, the maximum number of extremal points is <m:math overflow="scroll"><m:mrow><m:mi>R</m:mi><m:mo>+</m:mo><m:mn>2</m:mn></m:mrow></m:math>
and that is what this filter has. This special case is called the “maximum ripple" case.</para>
        <figure id="uid30" orient="horizontal">
          <media type="application/postscript" src="figC1.eps">
            <media type="image/png" src="figC1.png"><!-- NOTE: width parameter changes size of image online (pixels). original width is 453. --><param name="width" value="453"/></media>
          </media>
          <caption>Amplitude Response of Length-15 Optimal Chebyshev Filters</caption>
        </figure>
        <para id="id2260358">It is possible to have ripples that do not touch the maximum value and, therefore,
are not considered extremal points. That is illustrated in <cnxn target="uid31"/>a. The
effects of a narrow transitionband are illustrated in <cnxn target="uid31"/>c. Note
the zero locations for these filters and how they relate to the amplitude response.</para>
        <figure id="uid31" orient="horizontal">
          <media type="application/postscript" src="figC2.eps">
            <media type="image/png" src="figC2.png"><!-- NOTE: width parameter changes size of image online (pixels). original width is 470. --><param name="width" value="470"/></media>
          </media>
          <caption>Amplitude Response of Length-15 Optimal Chebyshev Filters</caption>
        </figure>
        <para id="id2260394">To illustrate some of the unexpected behavior that optimal filter designs can have,
consider the bandpass filter amplitude response shown in <cnxn target="uid32"/>. Here
we have a length-31 Chebyshev bandpass filter with a stopband
<m:math overflow="scroll"><m:mrow><m:mn>0</m:mn><m:mo>&lt;</m:mo><m:mi>f</m:mi><m:mo>&lt;</m:mo><m:mn>0</m:mn><m:mo>.</m:mo><m:mn>2</m:mn></m:mrow></m:math>, a transition band <m:math overflow="scroll"><m:mrow><m:mn>0</m:mn><m:mo>.</m:mo><m:mn>2</m:mn><m:mo>&lt;</m:mo><m:mi>f</m:mi><m:mo>&lt;</m:mo><m:mn>0</m:mn><m:mo>.</m:mo><m:mn>25</m:mn></m:mrow></m:math>, a passband <m:math overflow="scroll"><m:mrow><m:mn>0</m:mn><m:mo>.</m:mo><m:mn>25</m:mn><m:mo>&lt;</m:mo><m:mi>f</m:mi><m:mo>&lt;</m:mo><m:mn>0</m:mn><m:mo>.</m:mo><m:mn>5</m:mn></m:mrow></m:math>,
another transitionband <m:math overflow="scroll"><m:mrow><m:mn>0</m:mn><m:mo>.</m:mo><m:mn>5</m:mn><m:mo>&lt;</m:mo><m:mi>f</m:mi><m:mo>&lt;</m:mo><m:mn>0</m:mn><m:mo>.</m:mo><m:mn>68</m:mn></m:mrow></m:math>, and a stopband <m:math overflow="scroll"><m:mrow><m:mn>0</m:mn><m:mo>.</m:mo><m:mn>68</m:mn><m:mo>&lt;</m:mo><m:mi>f</m:mi><m:mo>&lt;</m:mo><m:mn>1</m:mn></m:mrow></m:math>. The
asymmetric transition bands cause large response in the transition band around
<m:math overflow="scroll"><m:mrow><m:mi>f</m:mi><m:mo>=</m:mo><m:mn>0</m:mn><m:mo>.</m:mo><m:mn>6</m:mn></m:mrow></m:math>. However, this filter is optimal since the deviation occurs in part
of the frequency band that is not included in the optimization criterion. If
you think you don't care what happens in the transition bands, you may change
your mind with this kind of behavior.</para>
        <figure id="uid32" orient="horizontal">
          <media type="application/postscript" src="figC3.eps">
            <media type="image/png" src="figC3.png"><!-- NOTE: width parameter changes size of image online (pixels). original width is 597. --><param name="width" value="597"/></media>
          </media>
          <caption>Amplitude Response of Length-31 Optimal Chebyshev Bandpass Filter</caption>
        </figure>
      </section>
      <section id="uid33">
        <name>The Modified Parks-McClellan Algorithm</name>
        <para id="id2260587">If one wants to fix the pass band ripple and minimize the stop band ripple
<cnxn target="bid56"/>, equation (<cnxn target="uid21"/>) is changed so that the pass band ripple is
added to the appropriate top part of the vector <m:math overflow="scroll"><m:msub><m:mi>A</m:mi><m:mi>d</m:mi></m:msub></m:math> of the desired
response and the unknown stop band is kept in the lower part of the last
column of the cosine matrix <m:math overflow="scroll"><m:mi>C</m:mi></m:math>.</para>
        <equation id="uid34">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mfenced separators="" open="[" close="]">
                <m:mtable>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:msub>
                          <m:mi>A</m:mi>
                          <m:mi>d</m:mi>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:msub>
                            <m:mi>ω</m:mi>
                            <m:mn>0</m:mn>
                          </m:msub>
                          <m:mo>)</m:mo>
                        </m:mrow>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:msub>
                          <m:mi>A</m:mi>
                          <m:mi>d</m:mi>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:msub>
                            <m:mi>ω</m:mi>
                            <m:mn>1</m:mn>
                          </m:msub>
                          <m:mo>)</m:mo>
                        </m:mrow>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mo>⋮</m:mo>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:msub>
                          <m:mi>A</m:mi>
                          <m:mi>d</m:mi>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:msub>
                            <m:mi>ω</m:mi>
                            <m:mi>p</m:mi>
                          </m:msub>
                          <m:mo>)</m:mo>
                        </m:mrow>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:msub>
                          <m:mi>A</m:mi>
                          <m:mi>d</m:mi>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:msub>
                            <m:mi>ω</m:mi>
                            <m:mi>s</m:mi>
                          </m:msub>
                          <m:mo>)</m:mo>
                        </m:mrow>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mo>⋮</m:mo>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:msub>
                          <m:mi>A</m:mi>
                          <m:mi>d</m:mi>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:msub>
                            <m:mi>ω</m:mi>
                            <m:mi>R</m:mi>
                          </m:msub>
                          <m:mo>)</m:mo>
                        </m:mrow>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                </m:mtable>
              </m:mfenced>
              <m:mo>+</m:mo>
              <m:mfenced separators="" open="[" close="]">
                <m:mtable>
                  <m:mtr>
                    <m:mtd>
                      <m:msub>
                        <m:mi>δ</m:mi>
                        <m:mi>p</m:mi>
                      </m:msub>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mo>-</m:mo>
                        <m:msub>
                          <m:mi>δ</m:mi>
                          <m:mi>p</m:mi>
                        </m:msub>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mo>⋮</m:mo>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mo>±</m:mo>
                        <m:msub>
                          <m:mi>δ</m:mi>
                          <m:mi>p</m:mi>
                        </m:msub>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mn>0</m:mn>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mo>⋮</m:mo>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mn>0</m:mn>
                    </m:mtd>
                  </m:mtr>
                </m:mtable>
              </m:mfenced>
              <m:mo>=</m:mo>
              <m:mfenced separators="" open="[" close="]">
                <m:mtable>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mn>0</m:mn>
                        </m:msub>
                        <m:mn>0</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mn>0</m:mn>
                        </m:msub>
                        <m:mn>1</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>⋯</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mn>0</m:mn>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:mi>R</m:mi>
                          <m:mo>-</m:mo>
                          <m:mn>1</m:mn>
                          <m:mo>)</m:mo>
                        </m:mrow>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd columnalign="right">
                      <m:mn>0</m:mn>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mn>1</m:mn>
                        </m:msub>
                        <m:mn>0</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mn>1</m:mn>
                        </m:msub>
                        <m:mn>1</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>⋯</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mn>1</m:mn>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:mi>R</m:mi>
                          <m:mo>-</m:mo>
                          <m:mn>1</m:mn>
                          <m:mo>)</m:mo>
                        </m:mrow>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd columnalign="right">
                      <m:mn>0</m:mn>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mo>⋮</m:mo>
                    </m:mtd>
                    <m:mtd/>
                    <m:mtd/>
                    <m:mtd/>
                    <m:mtd columnalign="right">
                      <m:mo>⋮</m:mo>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mi>p</m:mi>
                        </m:msub>
                        <m:mn>0</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mi>p</m:mi>
                        </m:msub>
                        <m:mn>1</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>⋯</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mi>p</m:mi>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:mi>R</m:mi>
                          <m:mo>-</m:mo>
                          <m:mn>1</m:mn>
                          <m:mo>)</m:mo>
                        </m:mrow>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd columnalign="right">
                      <m:mn>0</m:mn>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mi>s</m:mi>
                        </m:msub>
                        <m:mn>0</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mi>s</m:mi>
                        </m:msub>
                        <m:mn>1</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>⋯</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mi>s</m:mi>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:mi>R</m:mi>
                          <m:mo>-</m:mo>
                          <m:mn>1</m:mn>
                          <m:mo>)</m:mo>
                        </m:mrow>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd columnalign="right">
                      <m:mn>1</m:mn>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mo>⋮</m:mo>
                    </m:mtd>
                    <m:mtd/>
                    <m:mtd/>
                    <m:mtd/>
                    <m:mtd columnalign="right">
                      <m:mo>⋮</m:mo>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mi>R</m:mi>
                        </m:msub>
                        <m:mn>0</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mi>R</m:mi>
                        </m:msub>
                        <m:mn>1</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>⋯</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mi>R</m:mi>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:mi>R</m:mi>
                          <m:mo>-</m:mo>
                          <m:mn>1</m:mn>
                          <m:mo>)</m:mo>
                        </m:mrow>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd columnalign="right">
                      <m:mrow>
                        <m:mo>±</m:mo>
                        <m:mn>1</m:mn>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                </m:mtable>
              </m:mfenced>
              <m:mfenced separators="" open="[" close="]">
                <m:mtable>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mi>a</m:mi>
                        <m:mo>(</m:mo>
                        <m:mn>0</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mi>a</m:mi>
                        <m:mo>(</m:mo>
                        <m:mn>1</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mi>a</m:mi>
                        <m:mo>(</m:mo>
                        <m:mn>2</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mo>⋮</m:mo>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mi>a</m:mi>
                        <m:mo>(</m:mo>
                        <m:mi>R</m:mi>
                        <m:mo>-</m:mo>
                        <m:mn>1</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:msub>
                        <m:mi>δ</m:mi>
                        <m:mi>s</m:mi>
                      </m:msub>
                    </m:mtd>
                  </m:mtr>
                </m:mtable>
              </m:mfenced>
              <m:mo>.</m:mo>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2261366">Iteration of this equation will keep the pass band ripple <m:math overflow="scroll"><m:msub><m:mi>δ</m:mi><m:mi>p</m:mi></m:msub></m:math> fixed
and minimize the stop band ripple <m:math overflow="scroll"><m:msub><m:mi>δ</m:mi><m:mi>s</m:mi></m:msub></m:math>. A problem with convergence
occurs if one of the <m:math overflow="scroll"><m:mi>δ</m:mi></m:math>'s becomes negative during the iterations. A
modification to the basic exchange has been developed to give reliable
convergence <cnxn target="bid56"/>.</para>
      </section>
      <section id="uid35">
        <name>The Hofstetter, Oppenheim, and Siegel Algorithm</name>
        <para id="id2261432">This algorithm <cnxn target="bid14"/>, <cnxn target="bid15"/>, <cnxn target="bid56"/> came into existence in order to design
the filters posed by Herrmann and Schüssler <cnxn target="bid13"/>, <cnxn target="bid12"/> where both
the pass and stop band ripple sizes, <m:math overflow="scroll"><m:msub><m:mi>δ</m:mi><m:mi>p</m:mi></m:msub></m:math> and <m:math overflow="scroll"><m:msub><m:mi>δ</m:mi><m:mi>s</m:mi></m:msub></m:math>, are fixed
and the location of the transition band is not directly controlled. This
problem results in a maximum ripple design which, for the lowpass filter,
requires extremal frequencies at both <m:math overflow="scroll"><m:mrow><m:mi>ω</m:mi><m:mo>=</m:mo><m:mn>0</m:mn></m:mrow></m:math> and <m:math overflow="scroll"><m:mrow><m:mi>ω</m:mi><m:mo>=</m:mo><m:mi>π</m:mi></m:mrow></m:math> but
does not use either pass or stop band frequencies <m:math overflow="scroll"><m:msub><m:mi>ω</m:mi><m:mi>p</m:mi></m:msub></m:math> or <m:math overflow="scroll"><m:msub><m:mi>ω</m:mi><m:mi>s</m:mi></m:msub></m:math>.
This results in <m:math overflow="scroll"><m:mi>R</m:mi></m:math> extremal frequencies giving <m:math overflow="scroll"><m:mi>R</m:mi></m:math> equations to find the
<m:math overflow="scroll"><m:mi>R</m:mi></m:math> values of <m:math overflow="scroll"><m:mrow><m:mi>a</m:mi><m:mo>(</m:mo><m:mi>n</m:mi><m:mo>)</m:mo></m:mrow></m:math>.</para>
        <equation id="uid37">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mfenced separators="" open="[" close="]">
                <m:mtable>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:msub>
                          <m:mi>A</m:mi>
                          <m:mi>d</m:mi>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:msub>
                            <m:mi>ω</m:mi>
                            <m:mn>0</m:mn>
                          </m:msub>
                          <m:mo>)</m:mo>
                        </m:mrow>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:msub>
                          <m:mi>A</m:mi>
                          <m:mi>d</m:mi>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:msub>
                            <m:mi>ω</m:mi>
                            <m:mn>1</m:mn>
                          </m:msub>
                          <m:mo>)</m:mo>
                        </m:mrow>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mo>⋮</m:mo>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:msub>
                          <m:mi>A</m:mi>
                          <m:mi>d</m:mi>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:msub>
                            <m:mi>ω</m:mi>
                            <m:mrow>
                              <m:mi>p</m:mi>
                              <m:mo>-</m:mo>
                              <m:mn>1</m:mn>
                            </m:mrow>
                          </m:msub>
                          <m:mo>)</m:mo>
                        </m:mrow>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:msub>
                          <m:mi>A</m:mi>
                          <m:mi>d</m:mi>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:msub>
                            <m:mi>ω</m:mi>
                            <m:mrow>
                              <m:mi>s</m:mi>
                              <m:mo>+</m:mo>
                              <m:mn>1</m:mn>
                            </m:mrow>
                          </m:msub>
                          <m:mo>)</m:mo>
                        </m:mrow>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mo>⋮</m:mo>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:msub>
                          <m:mi>A</m:mi>
                          <m:mi>d</m:mi>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:msub>
                            <m:mi>ω</m:mi>
                            <m:mrow>
                              <m:mi>R</m:mi>
                              <m:mo>-</m:mo>
                              <m:mn>1</m:mn>
                            </m:mrow>
                          </m:msub>
                          <m:mo>)</m:mo>
                        </m:mrow>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                </m:mtable>
              </m:mfenced>
              <m:mo>+</m:mo>
              <m:mfenced separators="" open="[" close="]">
                <m:mtable>
                  <m:mtr>
                    <m:mtd>
                      <m:msub>
                        <m:mi>δ</m:mi>
                        <m:mi>p</m:mi>
                      </m:msub>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mo>-</m:mo>
                        <m:msub>
                          <m:mi>δ</m:mi>
                          <m:mi>p</m:mi>
                        </m:msub>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mo>⋮</m:mo>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mo>±</m:mo>
                        <m:msub>
                          <m:mi>δ</m:mi>
                          <m:mi>p</m:mi>
                        </m:msub>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:msub>
                        <m:mi>δ</m:mi>
                        <m:mi>s</m:mi>
                      </m:msub>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mo>⋮</m:mo>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mo>±</m:mo>
                        <m:msub>
                          <m:mi>δ</m:mi>
                          <m:mi>s</m:mi>
                        </m:msub>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                </m:mtable>
              </m:mfenced>
              <m:mo>=</m:mo>
              <m:mfenced separators="" open="[" close="]">
                <m:mtable>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mn>0</m:mn>
                        </m:msub>
                        <m:mn>0</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mn>0</m:mn>
                        </m:msub>
                        <m:mn>1</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>⋯</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mn>0</m:mn>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:mi>R</m:mi>
                          <m:mo>-</m:mo>
                          <m:mn>1</m:mn>
                          <m:mo>)</m:mo>
                        </m:mrow>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mn>1</m:mn>
                        </m:msub>
                        <m:mn>0</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mn>1</m:mn>
                        </m:msub>
                        <m:mn>1</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>⋯</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mn>1</m:mn>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:mi>R</m:mi>
                          <m:mo>-</m:mo>
                          <m:mn>1</m:mn>
                          <m:mo>)</m:mo>
                        </m:mrow>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mo>⋮</m:mo>
                    </m:mtd>
                    <m:mtd/>
                    <m:mtd/>
                    <m:mtd>
                      <m:mo>⋮</m:mo>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mrow>
                            <m:mi>p</m:mi>
                            <m:mo>-</m:mo>
                            <m:mn>1</m:mn>
                          </m:mrow>
                        </m:msub>
                        <m:mn>0</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mrow>
                            <m:mi>p</m:mi>
                            <m:mo>-</m:mo>
                            <m:mn>1</m:mn>
                          </m:mrow>
                        </m:msub>
                        <m:mn>1</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>⋯</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mrow>
                            <m:mi>p</m:mi>
                            <m:mo>-</m:mo>
                            <m:mn>1</m:mn>
                          </m:mrow>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:mi>R</m:mi>
                          <m:mo>-</m:mo>
                          <m:mn>1</m:mn>
                          <m:mo>)</m:mo>
                        </m:mrow>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mrow>
                            <m:mi>s</m:mi>
                            <m:mo>+</m:mo>
                            <m:mn>1</m:mn>
                          </m:mrow>
                        </m:msub>
                        <m:mn>0</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mrow>
                            <m:mi>s</m:mi>
                            <m:mo>+</m:mo>
                            <m:mn>1</m:mn>
                          </m:mrow>
                        </m:msub>
                        <m:mn>1</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>⋯</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mrow>
                            <m:mi>s</m:mi>
                            <m:mo>+</m:mo>
                            <m:mn>1</m:mn>
                          </m:mrow>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:mi>R</m:mi>
                          <m:mo>-</m:mo>
                          <m:mn>1</m:mn>
                          <m:mo>)</m:mo>
                        </m:mrow>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mo>⋮</m:mo>
                    </m:mtd>
                    <m:mtd/>
                    <m:mtd/>
                    <m:mtd>
                      <m:mo>⋮</m:mo>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mrow>
                            <m:mi>R</m:mi>
                            <m:mo>-</m:mo>
                            <m:mn>1</m:mn>
                          </m:mrow>
                        </m:msub>
                        <m:mn>0</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mrow>
                            <m:mi>R</m:mi>
                            <m:mo>-</m:mo>
                            <m:mn>1</m:mn>
                          </m:mrow>
                        </m:msub>
                        <m:mn>1</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>⋯</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mrow>
                            <m:mi>R</m:mi>
                            <m:mo>-</m:mo>
                            <m:mn>1</m:mn>
                          </m:mrow>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:mi>R</m:mi>
                          <m:mo>-</m:mo>
                          <m:mn>1</m:mn>
                          <m:mo>)</m:mo>
                        </m:mrow>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                </m:mtable>
              </m:mfenced>
              <m:mfenced separators="" open="[" close="]">
                <m:mtable>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mi>a</m:mi>
                        <m:mo>(</m:mo>
                        <m:mn>0</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mi>a</m:mi>
                        <m:mo>(</m:mo>
                        <m:mn>1</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mi>a</m:mi>
                        <m:mo>(</m:mo>
                        <m:mn>2</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mo>⋮</m:mo>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mi>a</m:mi>
                        <m:mo>(</m:mo>
                        <m:mi>R</m:mi>
                        <m:mo>-</m:mo>
                        <m:mn>1</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                </m:mtable>
              </m:mfenced>
              <m:mo>.</m:mo>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2262370">This algorithm is iterated as a multiple exchange, keeping the number of
ripples in the pass and stop band constant, to give an optimal extra
ripple filter. The location and width of the transition band is
controlled only by the choice of how the number of initial ripples are
divided between the pass and stop band. The final filter may not have the
transition located where you want it. Indeed, no solution may exist with
the desired location of the transition band.</para>
        <para id="id2262389">The designs produced by the HOS algorithm are always maximum ripple but
this comes with a loss of accurate control over the location of the
transition band. The algorithm is not, strictly speaking, an optimization
algorithm. It is an interpolation algorithm. The Chebyshev error is not
minimized, the designed amplitude interpolates the specified error
ripples. However, although not directly minimized, the transition band
width of these designs seems to be minimized <cnxn target="bid44"/>, <cnxn target="bid60"/>, <cnxn target="bid45"/>. Extra or
maximum ripple designs seem to be efficient in using all the zeros to
produce small ripple size and narrow transition bands, however, the loss
of accurate control over the location of the transition bands becomes even
more problematic with multiple transition band designs. Perhaps some
compromise methods can be devised that use some of the efficiency of the
maximum ripple approximations with some of the control of other methods.
The next two design methods are of that type.</para>
      </section>
      <section id="uid38">
        <name>The Shpak and Antoniou Algorithm</name>
        <para id="id2262435">Shpak and Antoniou <cnxn target="bid51"/> propose decoupling the size of the pass
and stopband ripple sizes in order to have control over the pass and stop
band edges and have an extra ripple design. The Parks-McClellan design
has the ripple sizes related with a fixed weight <m:math overflow="scroll"><m:mrow><m:msub><m:mi>δ</m:mi><m:mi>p</m:mi></m:msub><m:mo>=</m:mo><m:mi>K</m:mi><m:mspace width="0.166667em"/><m:msub><m:mi>δ</m:mi><m:mi>s</m:mi></m:msub></m:mrow></m:math>,
the modified Parks-McClellan design fixes one ripple size and minimizes
the other, the Hoffstetter, Oppenheim, and Siegel design fixes both
ripple sizes but cannot set the transition band edges. The Shpak-Antoniou
design fixes the transition band edges and gives a maximum ripple design
with minimum ripple but the relationship of the pass and stopband ripple
is uncontrolled.</para>
        <para id="id2262487">This method has two ripple sizes, <m:math overflow="scroll"><m:msub><m:mi>δ</m:mi><m:mi>p</m:mi></m:msub></m:math> and <m:math overflow="scroll"><m:msub><m:mi>δ</m:mi><m:mi>s</m:mi></m:msub></m:math>, appended to
the <m:math overflow="scroll"><m:mrow><m:mi>a</m:mi><m:mo>(</m:mo><m:mi>n</m:mi><m:mo>)</m:mo></m:mrow></m:math> vector similar to the single <m:math overflow="scroll"><m:mi>δ</m:mi></m:math> used in (<cnxn target="uid21"/>) or
(<cnxn target="uid34"/>). This allows controlling an additional extremal frequency and
results in an extra ripple approximation. This can become somewhat
complicated for multiple transition bands but seems very flexible
<cnxn target="bid58"/>.</para>
      </section>
      <section id="uid39">
        <name>The New Equal Ripple Design Formulation and
Exchange Algorithm</name>
        <para id="id2262576">Because the arguments in the Weisburn, Parks, and Shenoy paper
<cnxn target="bid0"/> require the assumption of no signal or
noise energy in the transition band, it is now
more obvious that a narrow transition band is very desirable. For this
reason it may be better to fix the pass and stop band peak error,
<m:math overflow="scroll"><m:msub><m:mi>δ</m:mi><m:mi>p</m:mi></m:msub></m:math> and <m:math overflow="scroll"><m:msub><m:mi>δ</m:mi><m:mi>s</m:mi></m:msub></m:math> and the transition band center frequency
<m:math overflow="scroll"><m:msub><m:mi>ω</m:mi><m:mi>o</m:mi></m:msub></m:math> then minimize the transition band width rather than fixing the
pass and stop band edges, <m:math overflow="scroll"><m:msub><m:mi>ω</m:mi><m:mi>p</m:mi></m:msub></m:math> and <m:math overflow="scroll"><m:msub><m:mi>ω</m:mi><m:mi>s</m:mi></m:msub></m:math>, then minimizing
<m:math overflow="scroll"><m:msub><m:mi>δ</m:mi><m:mi>p</m:mi></m:msub></m:math> and <m:math overflow="scroll"><m:msub><m:mi>δ</m:mi><m:mi>s</m:mi></m:msub></m:math>. Two methods have been recently developed to
address this point of view. The first is a new exchange algorithm that is
in some ways a combination of the Parks-McClellan and
Hofstetter-Oppenheim-Segiel algorithms <cnxn target="bid40"/> and the second is a
limiting case for a constrained least squares method based on Lagrange
multipliers <cnxn target="bid61"/>, <cnxn target="bid62"/>, <cnxn target="bid10"/>, <cnxn target="bid11"/> using tight constraints.</para>
        <para id="id2262727">For problems where the signal and noise spectra are such that a specific
frequency <m:math overflow="scroll"><m:msub><m:mi>ω</m:mi><m:mi>o</m:mi></m:msub></m:math> that separates the desired passband from the desired
stopband can be specified but specific separate transition band edges,
<m:math overflow="scroll"><m:mrow><m:msub><m:mi>ω</m:mi><m:mi>p</m:mi></m:msub><m:mo>&lt;</m:mo><m:msub><m:mi>ω</m:mi><m:mi>s</m:mi></m:msub></m:mrow></m:math>, cannot, we formulate <cnxn target="bid56"/> a design method
where the pass and stop band ripple sizes, <m:math overflow="scroll"><m:msub><m:mi>δ</m:mi><m:mi>p</m:mi></m:msub></m:math> and <m:math overflow="scroll"><m:msub><m:mi>δ</m:mi><m:mi>s</m:mi></m:msub></m:math> are
specified along with the separation frequency, <m:math overflow="scroll"><m:msub><m:mi>ω</m:mi><m:mi>o</m:mi></m:msub></m:math>. The algorithm
described below will interpolate the specified ripple sizes exactly (as
the HOS algorithm does) but will allow exact control over the location
of <m:math overflow="scroll"><m:msub><m:mi>ω</m:mi><m:mi>o</m:mi></m:msub></m:math> by not requiring maximum ripple. Although not set up to be
an optimization procedure, it seems to minimize the transition band width.
This formulation suits problems where there is no obvious transition band
(“don't care band") having no signal or noise energy to be passed or
rejected.</para>
        <para id="id2262853">The optimal Chebyshev filter designed with this new algorithm
is generally not extra ripple and, therefore, will have an extremal
frequency at <m:math overflow="scroll"><m:mrow><m:mi>ω</m:mi><m:mo>=</m:mo><m:mn>0</m:mn></m:mrow></m:math> or <m:math overflow="scroll"><m:mrow><m:mi>ω</m:mi><m:mo>=</m:mo><m:mi>π</m:mi></m:mrow></m:math> as the Parks-McClellan
formulation does. Because we are trying to minimizing the transition band
width, we do not specify both the edges, <m:math overflow="scroll"><m:msub><m:mi>ω</m:mi><m:mi>p</m:mi></m:msub></m:math> and <m:math overflow="scroll"><m:msub><m:mi>ω</m:mi><m:mi>s</m:mi></m:msub></m:math>, but
only one of them or, perhaps, the center of the transition band,
<m:math overflow="scroll"><m:msub><m:mi>ω</m:mi><m:mi>o</m:mi></m:msub></m:math>. This results in <m:math overflow="scroll"><m:mi>R</m:mi></m:math> equations which are used to find the
<m:math overflow="scroll"><m:mi>R</m:mi></m:math> coefficients <m:math overflow="scroll"><m:mrow><m:mi>a</m:mi><m:mo>(</m:mo><m:mi>n</m:mi><m:mo>)</m:mo></m:mrow></m:math>. The equations are formulated by adding the
alternating peak pass and stop band ripples to the <m:math overflow="scroll"><m:msub><m:mi>A</m:mi><m:mi>d</m:mi></m:msub></m:math> in (<cnxn target="uid21"/>) and
not having the special last column of <m:math overflow="scroll"><m:mi>C</m:mi></m:math> nor the unknown <m:math overflow="scroll"><m:mi>δ</m:mi></m:math>
appended to <m:math overflow="scroll"><m:mi>a</m:mi></m:math> as was done by Parks and McClellan in (<cnxn target="uid21"/>). The
resulting equation to be iterated in our new exchange algorithm has the
form</para>
        <equation id="uid40">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mfenced separators="" open="[" close="]">
                <m:mtable>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:msub>
                          <m:mi>A</m:mi>
                          <m:mi>d</m:mi>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:msub>
                            <m:mi>ω</m:mi>
                            <m:mn>0</m:mn>
                          </m:msub>
                          <m:mo>)</m:mo>
                        </m:mrow>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:msub>
                          <m:mi>A</m:mi>
                          <m:mi>d</m:mi>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:msub>
                            <m:mi>ω</m:mi>
                            <m:mn>1</m:mn>
                          </m:msub>
                          <m:mo>)</m:mo>
                        </m:mrow>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mo>⋮</m:mo>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:msub>
                          <m:mi>A</m:mi>
                          <m:mi>d</m:mi>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:msub>
                            <m:mi>ω</m:mi>
                            <m:mi>o</m:mi>
                          </m:msub>
                          <m:mo>)</m:mo>
                        </m:mrow>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:msub>
                          <m:mi>A</m:mi>
                          <m:mi>d</m:mi>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:msub>
                            <m:mi>ω</m:mi>
                            <m:mrow>
                              <m:mi>s</m:mi>
                              <m:mo>+</m:mo>
                              <m:mn>1</m:mn>
                            </m:mrow>
                          </m:msub>
                          <m:mo>)</m:mo>
                        </m:mrow>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mo>⋮</m:mo>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:msub>
                          <m:mi>A</m:mi>
                          <m:mi>d</m:mi>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:msub>
                            <m:mi>ω</m:mi>
                            <m:mrow>
                              <m:mi>R</m:mi>
                              <m:mo>-</m:mo>
                              <m:mn>1</m:mn>
                            </m:mrow>
                          </m:msub>
                          <m:mo>)</m:mo>
                        </m:mrow>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                </m:mtable>
              </m:mfenced>
              <m:mo>+</m:mo>
              <m:mfenced separators="" open="[" close="]">
                <m:mtable>
                  <m:mtr>
                    <m:mtd>
                      <m:msub>
                        <m:mi>δ</m:mi>
                        <m:mi>p</m:mi>
                      </m:msub>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mo>-</m:mo>
                        <m:msub>
                          <m:mi>δ</m:mi>
                          <m:mi>p</m:mi>
                        </m:msub>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mo>⋮</m:mo>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mn>0</m:mn>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:msub>
                        <m:mi>δ</m:mi>
                        <m:mi>s</m:mi>
                      </m:msub>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mo>⋮</m:mo>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mo>±</m:mo>
                        <m:msub>
                          <m:mi>δ</m:mi>
                          <m:mi>s</m:mi>
                        </m:msub>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                </m:mtable>
              </m:mfenced>
              <m:mo>=</m:mo>
              <m:mfenced separators="" open="[" close="]">
                <m:mtable>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mn>0</m:mn>
                        </m:msub>
                        <m:mn>0</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mn>0</m:mn>
                        </m:msub>
                        <m:mn>1</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>⋯</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mn>0</m:mn>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:mi>R</m:mi>
                          <m:mo>-</m:mo>
                          <m:mn>1</m:mn>
                          <m:mo>)</m:mo>
                        </m:mrow>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mn>1</m:mn>
                        </m:msub>
                        <m:mn>0</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mn>1</m:mn>
                        </m:msub>
                        <m:mn>1</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>⋯</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mn>1</m:mn>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:mi>R</m:mi>
                          <m:mo>-</m:mo>
                          <m:mn>1</m:mn>
                          <m:mo>)</m:mo>
                        </m:mrow>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mo>⋮</m:mo>
                    </m:mtd>
                    <m:mtd/>
                    <m:mtd/>
                    <m:mtd>
                      <m:mo>⋮</m:mo>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mi>o</m:mi>
                        </m:msub>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mi>o</m:mi>
                        </m:msub>
                        <m:mn>1</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>⋯</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mi>o</m:mi>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:mi>R</m:mi>
                          <m:mo>-</m:mo>
                          <m:mn>1</m:mn>
                          <m:mo>)</m:mo>
                        </m:mrow>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mrow>
                            <m:mi>s</m:mi>
                            <m:mo>+</m:mo>
                            <m:mn>1</m:mn>
                          </m:mrow>
                        </m:msub>
                        <m:mn>0</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mrow>
                            <m:mi>s</m:mi>
                            <m:mo>+</m:mo>
                            <m:mn>1</m:mn>
                          </m:mrow>
                        </m:msub>
                        <m:mn>1</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>⋯</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mrow>
                            <m:mi>s</m:mi>
                            <m:mo>+</m:mo>
                            <m:mn>1</m:mn>
                          </m:mrow>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:mi>R</m:mi>
                          <m:mo>-</m:mo>
                          <m:mn>1</m:mn>
                          <m:mo>)</m:mo>
                        </m:mrow>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mo>⋮</m:mo>
                    </m:mtd>
                    <m:mtd/>
                    <m:mtd/>
                    <m:mtd>
                      <m:mo>⋮</m:mo>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mrow>
                            <m:mi>R</m:mi>
                            <m:mo>-</m:mo>
                            <m:mn>1</m:mn>
                          </m:mrow>
                        </m:msub>
                        <m:mn>0</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mrow>
                            <m:mi>R</m:mi>
                            <m:mo>-</m:mo>
                            <m:mn>1</m:mn>
                          </m:mrow>
                        </m:msub>
                        <m:mn>1</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                    <m:mtd>
                      <m:mo>⋯</m:mo>
                    </m:mtd>
                    <m:mtd>
                      <m:mrow>
                        <m:mo form="prefix">cos</m:mo>
                        <m:mo>(</m:mo>
                        <m:msub>
                          <m:mi>ω</m:mi>
                          <m:mrow>
                            <m:mi>R</m:mi>
                            <m:mo>-</m:mo>
                            <m:mn>1</m:mn>
                          </m:mrow>
                        </m:msub>
                        <m:mrow>
                          <m:mo>(</m:mo>
                          <m:mi>R</m:mi>
                          <m:mo>-</m:mo>
                          <m:mn>1</m:mn>
                          <m:mo>)</m:mo>
                        </m:mrow>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                </m:mtable>
              </m:mfenced>
              <m:mfenced separators="" open="[" close="]">
                <m:mtable>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mi>a</m:mi>
                        <m:mo>(</m:mo>
                        <m:mn>0</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mi>a</m:mi>
                        <m:mo>(</m:mo>
                        <m:mn>1</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mi>a</m:mi>
                        <m:mo>(</m:mo>
                        <m:mn>2</m:mn>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mo>⋮</m:mo>
                    </m:mtd>
                  </m:mtr>
                  <m:mtr>
                    <m:mtd>
                      <m:mrow>
                        <m:mi>a</m:mi>
                        <m:mo>(</m:mo>
                        <m:mo>(</m:mo>
                        <m:mi>R</m:mi>
                        <m:mo>-</m:mo>
                        <m:mn>1</m:mn>
                        <m:mo>)</m:mo>
                        <m:mo>)</m:mo>
                      </m:mrow>
                    </m:mtd>
                  </m:mtr>
                </m:mtable>
              </m:mfenced>
              <m:mo>.</m:mo>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2263766">The exchange algorithm is done as by Parks and McClellan finding new
extremal frequencies at each iteration, but with fixed ripple sizes in both
pass and stop bands. This new algorithm reduces the transition band
width as done by the Hofstetter, Oppenheim, and Siegel method but with the
transition band location controlled and without requiring the extra ripple
solution. Note that any transition band frequency could be fixed. It
could be <m:math overflow="scroll"><m:mrow><m:msub><m:mi>A</m:mi><m:mi>d</m:mi></m:msub><m:mrow><m:mo>(</m:mo><m:msub><m:mi>ω</m:mi><m:mi>o</m:mi></m:msub><m:mo>)</m:mo></m:mrow><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>/</m:mo><m:mn>2</m:mn></m:mrow></m:math> to fix the half-power point. It could be
<m:math overflow="scroll"><m:mrow><m:msub><m:mi>A</m:mi><m:mi>d</m:mi></m:msub><m:mrow><m:mo>(</m:mo><m:msub><m:mi>ω</m:mi><m:mi>p</m:mi></m:msub><m:mo>)</m:mo></m:mrow><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>-</m:mo><m:msub><m:mi>δ</m:mi><m:mi>p</m:mi></m:msub></m:mrow></m:math> to fix the pass band edge. Or it could be
<m:math overflow="scroll"><m:mrow><m:msub><m:mi>A<