<?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>Constrained Approximation and Mixed Criteria</name>
  <metadata>
  <md:version>1.1</md:version>
  <md:created>2008/06/09 13:37:40.971 GMT-5</md:created>
  <md:revised>2008/06/25 15:14:14.256 GMT-5</md:revised>
  <md:authorlist>
      <md:author 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:author>
      <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>
    <section id="uid1">
      <name>Trade-off of Error Measures and Design Specifications</name>
      <para id="id2255554">In many filter design problems, more than one criterion is important. For
example, both <m:math overflow="scroll"><m:msub><m:mi>L</m:mi><m:mn>2</m:mn></m:msub></m:math> and <m:math overflow="scroll"><m:msub><m:mi>L</m:mi><m:mi>∞</m:mi></m:msub></m:math> may be of interest in one filter.
Often one is posed as a constraint and the other as an optimized variable.
Indeed, because <m:math overflow="scroll"><m:msub><m:mi>L</m:mi><m:mn>2</m:mn></m:msub></m:math> approximation minimizes the error energy and because
Parseval's theorem states that an optimal <m:math overflow="scroll"><m:msub><m:mi>L</m:mi><m:mn>2</m:mn></m:msub></m:math> frequency domain
approximation is also an optimal <m:math overflow="scroll"><m:msub><m:mi>L</m:mi><m:mn>2</m:mn></m:msub></m:math> time domain approximation, an
<m:math overflow="scroll"><m:msub><m:mi>L</m:mi><m:mi>∞</m:mi></m:msub></m:math> constrained minimum <m:math overflow="scroll"><m:msub><m:mi>L</m:mi><m:mn>2</m:mn></m:msub></m:math> error approximation seems a good
practical approach. To see how this might have advantages, it is
informative to examine the relationship of the <m:math overflow="scroll"><m:msub><m:mi>L</m:mi><m:mn>2</m:mn></m:msub></m:math> error to the
<m:math overflow="scroll"><m:msub><m:mi>L</m:mi><m:mi>∞</m:mi></m:msub></m:math> error as the constraint is varied from tight to loose
<cnxn target="bid0"/>, <cnxn target="bid1"/> in <cnxn target="uid2"/>. From this one can see just how sensitive one error is
to the other and how the traditional designs are extremes on this diagram.</para>
      <figure id="uid2" orient="horizontal">
        <media type="application/postscript" src="figCLS2.eps">
          <media type="image/png" src="figCLS2.png"><!-- NOTE: width parameter changes size of image online (pixels). original width is 419. --><param name="width" value="419"/></media>
        </media>
        <caption>The Squared Error vs. the Chebyshev Error for the Constrained
Least Squared Error FIR Filter</caption>
      </figure>
      <para id="id2255730">Another trade-off is the error in a Chebyshev design as a function of the
transition band location. There are certain locations of transition band
or band edges that give much lower ripple size than others. Rabiner has
examined that relation <cnxn target="bid2"/>, <cnxn target="bid3"/>.</para>
    </section>
    <section id="uid3">
      <name>Constrained Least Squares Design</name>
      <para id="id2255758">There are problems where the peak error or Chebyshev error is important.
This can be minimized directly using the Remez exchange algorithm but, in
many cases, is better controlled by use of a peak error constraint on the
basic least squared error formulation of the problem
<cnxn target="bid1"/>, <cnxn target="bid4"/>, <cnxn target="bid0"/>, <cnxn target="bid5"/>. An efficient algorithm for minimizing the
constrained least squared error uses Lagrange multipliers
<cnxn target="bid6"/>, <cnxn target="bid7"/> and the Kuhn-Tucker conditions <cnxn target="bid0"/>, <cnxn target="bid8"/>.</para>
      <para id="id2255810">Similar to the Chebyshev design problem, there are two formulations of the
problem: one where there is a well defined transition band separating the
desired signal spectrum (passband) from the noise or interfering signal
spectrum (stopband) and the second where there is a well defined frequency
that separates the pass and stopband but no well defined transition band.</para>
      <para id="id2255820">The first case would include situations with signals residing in specified
bands separated by “guard bands" such as commercial radio and TV
transmissions. It also includes cases where due to multirate sampling,
certain well defined bands are aliased into other well defined bands. The
Parks-McClellan and Shpak-Antoniou Chebyshev designs address this case for
the Chebyshev error.
Adams' method <cnxn target="bid1"/>, <cnxn target="bid9"/>, <cnxn target="bid10"/>, <cnxn target="bid4"/>, <cnxn target="bid11"/>, <cnxn target="bid5"/> described below
applies to the constrained least squares design with a specified transition band.</para>
      <para id="id2255869">The second case would include signals with known spectral support with
additive white or broad-band noise. In these cases there is no obvious
transition band or “don't care" band. The Hoffstetter-Oppenheim-Siegel
and the method of <cnxn target=""/> address this case for a Chebyshev design.
The method in section below applies to the constrained least squares
design <cnxn target="bid0"/> without a specified transition band.</para>
      <section id="uid5">
        <name>The Lagrangian</name>
        <para id="id2255902">To pose the constrained least squared error optimization problem, we use
a Lagrange multiplier formulation. First define the Lagrangian as</para>
        <equation id="uid7">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mi mathvariant="script">L</m:mi>
              <m:mspace width="0.166667em"/>
              <m:mo>=</m:mo>
              <m:mspace width="0.166667em"/>
              <m:mi>P</m:mi>
              <m:msubsup>
                <m:mo>∫</m:mo>
                <m:mn>0</m:mn>
                <m:mi>π</m:mi>
              </m:msubsup>
              <m:msup>
                <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:mn>2</m:mn>
              </m:msup>
              <m:mspace width="0.166667em"/>
              <m:mi>d</m:mi>
              <m:mi>ω</m:mi>
              <m:mo>+</m:mo>
              <m:munder>
                <m:mo>∑</m:mo>
                <m:mi>i</m:mi>
              </m:munder>
              <m:msub>
                <m:mi>μ</m:mi>
                <m:mi>i</m:mi>
              </m:msub>
              <m:mspace width="0.166667em"/>
              <m:mfenced separators="" open="(" close=")">
                <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: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>T</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:mrow>
              </m:mfenced>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2256323">where the <m:math overflow="scroll"><m:msub><m:mi>μ</m:mi><m:mi>i</m:mi></m:msub></m:math> are the necessary number of Langrange multipliers and
<m:math overflow="scroll"><m:mi>P</m:mi></m:math> is a scale factor that can be chosen for simplicity later. The
first term in (<cnxn target="uid7"/>) is the integral squared error of the frequency
response to be minimized and the second term will be zero when the equality
constraints are satisfied at the frequencies, <m:math overflow="scroll"><m:msub><m:mi>ω</m:mi><m:mi>i</m:mi></m:msub></m:math>.
The function <m:math overflow="scroll"><m:mrow><m:mi>T</m:mi><m:mo>(</m:mo><m:mi>ω</m:mi><m:mo>)</m:mo></m:mrow></m:math> is the constraint function in that <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>
must satisfy</para>
        <equation id="uid8">
          <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>T</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:mo>-</m:mo>
              <m:mi>T</m:mi>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:mi>ω</m:mi>
                <m:mo>)</m:mo>
              </m:mrow>
              <m:mo>.</m:mo>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2256486">Necessary
conditions for the minimization of the integral squared error are that the
derivative of the Lagrangian with respect to the filter 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>
defined in (<cnxn target=""/>)
and to the Lagrange multipliers <m:math overflow="scroll"><m:msub><m:mi>μ</m:mi><m:mi>i</m:mi></m:msub></m:math> be zero <cnxn target="bid12"/>.</para>
        <para id="id2256532">The derivatives of the Lagrangian with respect to <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> are</para>
        <equation id="uid9">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mfrac>
                <m:mrow>
                  <m:mi>d</m:mi>
                  <m:mi mathvariant="script">L</m:mi>
                </m:mrow>
                <m:mrow>
                  <m:mi>d</m:mi>
                  <m:mspace width="0.166667em"/>
                  <m:mi>a</m:mi>
                  <m:mo>(</m:mo>
                  <m:mi>n</m:mi>
                  <m:mo>)</m:mo>
                </m:mrow>
              </m:mfrac>
              <m:mspace width="0.166667em"/>
              <m:mo>=</m:mo>
              <m:mspace width="0.166667em"/>
              <m:mi>P</m:mi>
              <m:msubsup>
                <m:mo>∫</m:mo>
                <m:mn>0</m:mn>
                <m:mi>π</m:mi>
              </m:msubsup>
              <m:mn>2</m:mn>
              <m:mspace width="0.166667em"/>
              <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:mfrac>
                <m:mrow>
                  <m:mi>d</m:mi>
                  <m:mi>A</m:mi>
                </m:mrow>
                <m:mrow>
                  <m:mi>d</m:mi>
                  <m:mi>a</m:mi>
                </m:mrow>
              </m:mfrac>
              <m:mspace width="0.166667em"/>
              <m:mi>d</m:mi>
              <m:mi>ω</m:mi>
              <m:mspace width="0.277778em"/>
              <m:mo>+</m:mo>
              <m:mspace width="0.277778em"/>
              <m:msub>
                <m:mfenced separators="" open="" close="|">
                  <m:munder>
                    <m:mo>∑</m:mo>
                    <m:mi>i</m:mi>
                  </m:munder>
                  <m:msub>
                    <m:mi>μ</m:mi>
                    <m:mi>i</m:mi>
                  </m:msub>
                  <m:mfrac>
                    <m:mrow>
                      <m:mi>d</m:mi>
                      <m:mi>A</m:mi>
                    </m:mrow>
                    <m:mrow>
                      <m:mi>d</m:mi>
                      <m:mi>a</m:mi>
                    </m:mrow>
                  </m:mfrac>
                </m:mfenced>
                <m:msub>
                  <m:mi>ω</m:mi>
                  <m:mi>i</m:mi>
                </m:msub>
              </m:msub>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2256720">where from (<cnxn target=""/>) we have for <m:math overflow="scroll"><m:mrow><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:mo>⋯</m:mo><m:mo>,</m:mo><m:mi>M</m:mi></m:mrow></m:math></para>
        <equation id="uid10">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mfrac>
                <m:mrow>
                  <m:mi>d</m:mi>
                  <m:mspace width="0.166667em"/>
                  <m:mi>A</m:mi>
                  <m:mo>(</m:mo>
                  <m:mi>ω</m:mi>
                  <m:mo>)</m:mo>
                </m:mrow>
                <m:mrow>
                  <m:mi>d</m:mi>
                  <m:mspace width="0.166667em"/>
                  <m:mi>a</m:mi>
                  <m:mo>(</m:mo>
                  <m:mi>n</m:mi>
                  <m:mo>)</m:mo>
                </m:mrow>
              </m:mfrac>
              <m:mspace width="0.166667em"/>
              <m:mo>=</m:mo>
              <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="id2256820">and for <m:math overflow="scroll"><m:mrow><m:mi>n</m:mi><m:mo>=</m:mo><m:mn>0</m:mn></m:mrow></m:math></para>
        <equation id="uid11">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mfrac>
                <m:mrow>
                  <m:mi>d</m:mi>
                  <m:mspace width="0.166667em"/>
                  <m:mi>A</m:mi>
                  <m:mo>(</m:mo>
                  <m:mi>ω</m:mi>
                  <m:mo>)</m:mo>
                </m:mrow>
                <m:mrow>
                  <m:mi>d</m:mi>
                  <m:mspace width="0.166667em"/>
                  <m:mi>a</m:mi>
                  <m:mo>(</m:mo>
                  <m:mn>0</m:mn>
                  <m:mo>)</m:mo>
                </m:mrow>
              </m:mfrac>
              <m:mspace width="0.166667em"/>
              <m:mo>=</m:mo>
              <m:mspace width="0.166667em"/>
              <m:mi>K</m:mi>
              <m:mo>.</m:mo>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2256894">For <m:math overflow="scroll"><m:mrow><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:mo>⋯</m:mo><m:mo>,</m:mo><m:mi>M</m:mi></m:mrow></m:math> this gives</para>
        <equation id="uid12">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mfrac>
                <m:mrow>
                  <m:mi>d</m:mi>
                  <m:mi mathvariant="script">L</m:mi>
                </m:mrow>
                <m:mrow>
                  <m:mi>d</m:mi>
                  <m:mspace width="0.166667em"/>
                  <m:mi>a</m:mi>
                  <m:mo>(</m:mo>
                  <m:mi>n</m:mi>
                  <m:mo>)</m:mo>
                </m:mrow>
              </m:mfrac>
              <m:mspace width="0.166667em"/>
              <m:mo>=</m:mo>
              <m:mspace width="0.166667em"/>
              <m:mn>2</m:mn>
              <m:mspace width="0.166667em"/>
              <m:mi>P</m:mi>
              <m:mfenced separators="" open="[" close="]">
                <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: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:mspace width="0.166667em"/>
                <m:mi>d</m:mi>
                <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:mo>(</m:mo>
                  <m:mi>ω</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:mspace width="0.166667em"/>
                <m:mi>d</m:mi>
                <m:mi>ω</m:mi>
              </m:mfenced>
              <m:mo>+</m:mo>
              <m:munder>
                <m:mo>∑</m:mo>
                <m:mi>i</m:mi>
              </m:munder>
              <m:msub>
                <m:mi>μ</m:mi>
                <m:mi>i</m:mi>
              </m:msub>
              <m:mspace width="0.166667em"/>
              <m:mo form="prefix">cos</m:mo>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:msub>
                  <m:mi>ω</m:mi>
                  <m:mi>i</m:mi>
                </m:msub>
                <m:mi>n</m:mi>
                <m:mo>)</m:mo>
              </m:mrow>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2257103">and for <m:math overflow="scroll"><m:mrow><m:mi>n</m:mi><m:mo>=</m:mo><m:mn>0</m:mn></m:mrow></m:math> gives</para>
        <equation id="uid13">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mfrac>
                <m:mrow>
                  <m:mi>d</m:mi>
                  <m:mi mathvariant="script">L</m:mi>
                </m:mrow>
                <m:mrow>
                  <m:mi>d</m:mi>
                  <m:mspace width="0.166667em"/>
                  <m:mi>a</m:mi>
                  <m:mo>(</m:mo>
                  <m:mn>0</m:mn>
                  <m:mo>)</m:mo>
                </m:mrow>
              </m:mfrac>
              <m:mspace width="0.166667em"/>
              <m:mo>=</m:mo>
              <m:mspace width="0.166667em"/>
              <m:mn>2</m:mn>
              <m:mspace width="0.166667em"/>
              <m:mi>P</m:mi>
              <m:mspace width="0.166667em"/>
              <m:mi>K</m:mi>
              <m:mfenced separators="" open="[" close="]">
                <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:mspace width="0.166667em"/>
                <m:mi>d</m:mi>
                <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:mo>(</m:mo>
                  <m:mi>ω</m:mi>
                  <m:mo>)</m:mo>
                </m:mrow>
                <m:mspace width="0.166667em"/>
                <m:mi>d</m:mi>
                <m:mi>ω</m:mi>
              </m:mfenced>
              <m:mo>+</m:mo>
              <m:munder>
                <m:mo>∑</m:mo>
                <m:mi>i</m:mi>
              </m:munder>
              <m:msub>
                <m:mi>μ</m:mi>
                <m:mi>i</m:mi>
              </m:msub>
              <m:mspace width="0.166667em"/>
              <m:mi>K</m:mi>
              <m:mo>.</m:mo>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2257260">Using (<cnxn target=""/>) for <m:math overflow="scroll"><m:mrow><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:mo>⋯</m:mo><m:mo>,</m:mo><m:mi>M</m:mi></m:mrow></m:math>, we have</para>
        <equation id="uid14">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mfrac>
                <m:mrow>
                  <m:mi>d</m:mi>
                  <m:mi mathvariant="script">L</m:mi>
                </m:mrow>
                <m:mrow>
                  <m:mi>d</m:mi>
                  <m:mspace width="0.166667em"/>
                  <m:mi>a</m:mi>
                  <m:mo>(</m:mo>
                  <m:mi>n</m:mi>
                  <m:mo>)</m:mo>
                </m:mrow>
              </m:mfrac>
              <m:mspace width="0.166667em"/>
              <m:mo>=</m:mo>
              <m:mspace width="0.166667em"/>
              <m:mi>π</m:mi>
              <m:mspace width="0.166667em"/>
              <m:mi>P</m:mi>
              <m:mfenced separators="" open="[" close="]">
                <m:mi>a</m:mi>
                <m:mrow>
                  <m:mo>(</m:mo>
                  <m:mi>n</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>n</m:mi>
                  <m:mo>)</m:mo>
                </m:mrow>
              </m:mfenced>
              <m:mo>+</m:mo>
              <m:munder>
                <m:mo>∑</m:mo>
                <m:mi>i</m:mi>
              </m:munder>
              <m:msub>
                <m:mi>μ</m:mi>
                <m:mi>i</m:mi>
              </m:msub>
              <m:mspace width="0.166667em"/>
              <m:mo form="prefix">cos</m:mo>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:msub>
                  <m:mi>ω</m:mi>
                  <m:mi>i</m:mi>
                </m:msub>
                <m:mi>n</m:mi>
                <m:mo>)</m:mo>
              </m:mrow>
              <m:mo>=</m:mo>
              <m:mn>0</m:mn>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2257428">and for <m:math overflow="scroll"><m:mrow><m:mi>n</m:mi><m:mo>=</m:mo><m:mn>0</m:mn></m:mrow></m:math></para>
        <equation id="uid15">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mfrac>
                <m:mrow>
                  <m:mi>d</m:mi>
                  <m:mi mathvariant="script">L</m:mi>
                </m:mrow>
                <m:mrow>
                  <m:mi>d</m:mi>
                  <m:mspace width="0.166667em"/>
                  <m:mi>a</m:mi>
                  <m:mo>(</m:mo>
                  <m:mn>0</m:mn>
                  <m:mo>)</m:mo>
                </m:mrow>
              </m:mfrac>
              <m:mspace width="0.166667em"/>
              <m:mo>=</m:mo>
              <m:mspace width="0.166667em"/>
              <m:mn>2</m:mn>
              <m:mi>π</m:mi>
              <m:mspace width="0.166667em"/>
              <m:mi>P</m:mi>
              <m:mspace width="0.166667em"/>
              <m:msup>
                <m:mi>K</m:mi>
                <m:mn>2</m:mn>
              </m:msup>
              <m:mfenced separators="" open="[" close="]">
                <m:mi>a</m:mi>
                <m:mrow>
                  <m:mo>(</m:mo>
                  <m:mn>0</m:mn>
                  <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:mn>0</m:mn>
                  <m:mo>)</m:mo>
                </m:mrow>
              </m:mfenced>
              <m:mo>+</m:mo>
              <m:mi>K</m:mi>
              <m:munder>
                <m:mo>∑</m:mo>
                <m:mi>i</m:mi>
              </m:munder>
              <m:msub>
                <m:mi>μ</m:mi>
                <m:mi>i</m:mi>
              </m:msub>
              <m:mspace width="0.166667em"/>
              <m:mo>=</m:mo>
              <m:mspace width="0.166667em"/>
              <m:mn>0</m:mn>
              <m:mo>.</m:mo>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2257580">Choosing <m:math overflow="scroll"><m:mrow><m:mi>P</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>/</m:mo><m:mi>π</m:mi></m:mrow></m:math> gives</para>
        <equation id="uid16">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <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>=</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:mi>n</m:mi>
                <m:mo>)</m:mo>
              </m:mrow>
              <m:mo>-</m:mo>
              <m:munder>
                <m:mo>∑</m:mo>
                <m:mi>i</m:mi>
              </m:munder>
              <m:msub>
                <m:mi>μ</m:mi>
                <m:mi>i</m:mi>
              </m:msub>
              <m:mspace width="0.166667em"/>
              <m:mo form="prefix">cos</m:mo>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:msub>
                  <m:mi>ω</m:mi>
                  <m:mi>i</m:mi>
                </m:msub>
                <m:mi>n</m:mi>
                <m:mo>)</m:mo>
              </m:mrow>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2257689">and</para>
        <equation id="uid17">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mi>a</m:mi>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:mn>0</m:mn>
                <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:mn>0</m:mn>
                <m:mo>)</m:mo>
              </m:mrow>
              <m:mo>-</m:mo>
              <m:mfrac>
                <m:mn>1</m:mn>
                <m:mrow>
                  <m:mn>2</m:mn>
                  <m:mi>K</m:mi>
                </m:mrow>
              </m:mfrac>
              <m:munder>
                <m:mo>∑</m:mo>
                <m:mi>i</m:mi>
              </m:munder>
              <m:msub>
                <m:mi>μ</m:mi>
                <m:mi>i</m:mi>
              </m:msub>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2257766">Writing (<cnxn target="uid16"/>) and (<cnxn target="uid17"/>) in matrix form gives</para>
        <equation id="uid18">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mrow>
                <m:mi mathvariant="bold">a</m:mi>
                <m:mspace width="0.166667em"/>
                <m:mo>=</m:mo>
                <m:mspace width="0.166667em"/>
                <m:msub>
                  <m:mi mathvariant="bold">a</m:mi>
                  <m:mi mathvariant="bold">d</m:mi>
                </m:msub>
                <m:mo>-</m:mo>
                <m:mi mathvariant="bold">H</m:mi>
                <m:mspace width="0.166667em"/>
                <m:mi>μ</m:mi>
              </m:mrow>
              <m:mo>.</m:mo>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2257835">where <m:math overflow="scroll"><m:mi mathvariant="bold">H</m:mi></m:math> is a matrix with elements</para>
        <equation id="uid19">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mi>h</m:mi>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:mi>n</m:mi>
                <m:mo>,</m:mo>
                <m:mi>i</m:mi>
                <m:mo>)</m:mo>
              </m:mrow>
              <m:mspace width="0.166667em"/>
              <m:mo>=</m:mo>
              <m:mspace width="0.166667em"/>
              <m:mo form="prefix">cos</m:mo>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:msub>
                  <m:mi>ω</m:mi>
                  <m:mi>i</m:mi>
                </m:msub>
                <m:mi>n</m:mi>
                <m:mo>)</m:mo>
              </m:mrow>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2257907">except for the first row which is</para>
        <equation id="uid20">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mi>h</m:mi>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:mn>0</m:mn>
                <m:mo>,</m:mo>
                <m:mi>i</m:mi>
                <m:mo>)</m:mo>
              </m:mrow>
              <m:mspace width="0.166667em"/>
              <m:mo>=</m:mo>
              <m:mspace width="0.166667em"/>
              <m:mfrac>
                <m:mn>1</m:mn>
                <m:mrow>
                  <m:mn>2</m:mn>
                  <m:mi>K</m:mi>
                </m:mrow>
              </m:mfrac>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2257958">because of the normalization of the <m:math overflow="scroll"><m:mrow><m:mi>a</m:mi><m:mo>(</m:mo><m:mn>0</m:mn><m:mo>)</m:mo></m:mrow></m:math> term. The <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>n</m:mi><m:mo>)</m:mo></m:mrow></m:mrow></m:math> are the
cosine coefficients for the unconstrained approximation to the ideal
filter which result from truncating the inverse DTFT of <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>.</para>
        <para id="id2258029">The derivative of the Lagrangian in (<cnxn target="uid7"/>) with respect to the Lagrange
multipliers <m:math overflow="scroll"><m:msub><m:mi>μ</m:mi><m:mi>i</m:mi></m:msub></m:math>, when set to zero, gives</para>
        <equation id="uid21">
          <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>i</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>i</m:mi>
                </m:msub>
                <m:mo>)</m:mo>
              </m:mrow>
              <m:mo>±</m:mo>
              <m:mi>T</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:mspace width="0.166667em"/>
              <m:mo>=</m:mo>
              <m:mspace width="0.166667em"/>
              <m:msub>
                <m:mi>A</m:mi>
                <m:mi>c</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:mrow>
          </m:math>
        </equation>
        <para id="id2258157">which is simply a statement of the equality constraints.</para>
        <para id="id2258163">In terms of the filter's cosine 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>, from (<cnxn target=""/>), this
can be written</para>
        <equation id="uid22">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:msub>
                <m:mi>A</m:mi>
                <m:mi>c</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:mspace width="0.166667em"/>
              <m:mo>=</m:mo>
              <m:mspace width="0.166667em"/>
              <m:munder>
                <m:mo>∑</m:mo>
                <m:mi>n</m:mi>
              </m:munder>
              <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:msub>
                  <m:mi>ω</m:mi>
                  <m:mi>i</m:mi>
                </m:msub>
                <m:mi>n</m:mi>
                <m:mo>)</m:mo>
              </m:mrow>
              <m:mo>+</m:mo>
              <m:mi>K</m:mi>
              <m:mspace width="0.166667em"/>
              <m:mi>a</m:mi>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:mn>0</m:mn>
                <m:mo>)</m:mo>
              </m:mrow>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2258286">and as matrices</para>
        <equation id="uid23">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:msub>
                <m:mi mathvariant="bold">A</m:mi>
                <m:mi mathvariant="bold">c</m:mi>
              </m:msub>
              <m:mspace width="0.166667em"/>
              <m:mo>=</m:mo>
              <m:mspace width="0.166667em"/>
              <m:mi mathvariant="bold">G</m:mi>
              <m:mspace width="0.166667em"/>
              <m:mi mathvariant="bold">a</m:mi>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2258337">where <m:math overflow="scroll"><m:msub><m:mi mathvariant="bold">A</m:mi><m:mi mathvariant="bold">c</m:mi></m:msub></m:math> is the vector of frequency response values which are the
desired response plus or minus the constraints evaluated at the
frequencies in the constraint set. The frequency response must
interpolate these values. The matrix <m:math overflow="scroll"><m:mi mathvariant="bold">G</m:mi></m:math> is</para>
        <equation id="uid24">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mi>g</m:mi>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:mi>i</m:mi>
                <m:mo>,</m:mo>
                <m:mi>n</m:mi>
                <m:mo>)</m:mo>
              </m:mrow>
              <m:mspace width="0.166667em"/>
              <m:mo>=</m:mo>
              <m:mspace width="0.166667em"/>
              <m:mo form="prefix">cos</m:mo>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:msub>
                  <m:mi>ω</m:mi>
                  <m:mi>i</m:mi>
                </m:msub>
                <m:mi>n</m:mi>
                <m:mo>)</m:mo>
              </m:mrow>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2258431">except for the first column which is</para>
        <equation id="uid25">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mi>g</m:mi>
              <m:mo>(</m:mo>
              <m:mi>i</m:mi>
              <m:mo>,</m:mo>
              <m:mn>0</m:mn>
              <m:mo>)</m:mo>
              <m:mspace width="0.166667em"/>
              <m:mo>=</m:mo>
              <m:mspace width="0.166667em"/>
              <m:mi>K</m:mi>
              <m:mo>.</m:mo>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2258476">Notice that if <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:msqrt><m:mn>2</m:mn></m:msqrt></m:mrow></m:math>, the first rows and columns are such that we
have <m:math overflow="scroll"><m:mrow><m:msup><m:mi mathvariant="bold">G</m:mi><m:mi mathvariant="bold">T</m:mi></m:msup><m:mo>=</m:mo><m:mi mathvariant="bold">H</m:mi></m:mrow></m:math>.</para>
        <para id="id2258528">The two equations (<cnxn target="uid18"/>) and (<cnxn target="uid23"/>) that must be satisfied can be
written as a single matrix equation of the form
</para>
        <equation id="uid26">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mfenced separators="" open="[" close="]">
                <m:mrow>
                  <m:mi mathvariant="bold">I</m:mi>
                  <m:mi mathvariant="bold">H</m:mi>
                  <m:mi mathvariant="bold">G</m:mi>
                  <m:mn mathvariant="bold">0</m:mn>
                </m:mrow>
              </m:mfenced>
              <m:mfenced separators="" open="[" close="]">
                <m:mrow>
                  <m:mi mathvariant="bold">a</m:mi>
                  <m:mi>μ</m:mi>
                </m:mrow>
              </m:mfenced>
              <m:mo>=</m:mo>
              <m:mfenced separators="" open="[" close="]">
                <m:mrow>
                  <m:msub>
                    <m:mi mathvariant="bold">a</m:mi>
                    <m:mi>d</m:mi>
                  </m:msub>
                  <m:msub>
                    <m:mi mathvariant="bold">A</m:mi>
                    <m:mi mathvariant="bold">c</m:mi>
                  </m:msub>
                </m:mrow>
              </m:mfenced>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2258669">or, if <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:msqrt><m:mn>2</m:mn></m:msqrt></m:mrow></m:math>, as
</para>
        <equation id="uid27">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mfenced separators="" open="[" close="]">
                <m:mrow>
                  <m:mi mathvariant="bold">I</m:mi>
                  <m:msup>
                    <m:mrow>
                      <m:mi mathvariant="bold">G</m:mi>
                    </m:mrow>
                    <m:mi>T</m:mi>
                  </m:msup>
                  <m:mi mathvariant="bold">G</m:mi>
                  <m:mn mathvariant="bold">0</m:mn>
                </m:mrow>
              </m:mfenced>
              <m:mfenced separators="" open="[" close="]">
                <m:mrow>
                  <m:mi mathvariant="bold">a</m:mi>
                  <m:mi>μ</m:mi>
                </m:mrow>
              </m:mfenced>
              <m:mo>=</m:mo>
              <m:mfenced separators="" open="[" close="]">
                <m:mrow>
                  <m:msub>
                    <m:mi mathvariant="bold">a</m:mi>
                    <m:mi>d</m:mi>
                  </m:msub>
                  <m:msub>
                    <m:mi mathvariant="bold">A</m:mi>
                    <m:mi mathvariant="bold">c</m:mi>
                  </m:msub>
                </m:mrow>
              </m:mfenced>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2258828">which have as solutions
</para>
        <equation id="uid28">
          <m:math mode="display" overflow="scroll">
            <m:mtable displaystyle="true">
              <m:mtr>
                <m:mtd columnalign="right">
                  <m:mi>μ</m:mi>
                </m:mtd>
                <m:mtd>
                  <m:mo>=</m:mo>
                </m:mtd>
                <m:mtd columnalign="left">
                  <m:mrow>
                    <m:msup>
                      <m:mrow>
                        <m:mo>(</m:mo>
                        <m:mi mathvariant="bold">G</m:mi>
                        <m:mi mathvariant="bold">H</m:mi>
                        <m:mo>)</m:mo>
                      </m:mrow>
                      <m:mrow>
                        <m:mo>-</m:mo>
                        <m:mn>1</m:mn>
                      </m:mrow>
                    </m:msup>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:mrow>
                        <m:mi mathvariant="bold">G</m:mi>
                        <m:mspace width="0.166667em"/>
                        <m:msub>
                          <m:mi mathvariant="bold">a</m:mi>
                          <m:mi mathvariant="bold">d</m:mi>
                        </m:msub>
                        <m:mo>-</m:mo>
                        <m:msub>
                          <m:mi mathvariant="bold">A</m:mi>
                          <m:mi mathvariant="bold">c</m:mi>
                        </m:msub>
                      </m:mrow>
                      <m:mo>)</m:mo>
                    </m:mrow>
                  </m:mrow>
                </m:mtd>
              </m:mtr>
              <m:mtr>
                <m:mtd columnalign="right">
                  <m:mi mathvariant="bold">a</m:mi>
                </m:mtd>
                <m:mtd>
                  <m:mo>=</m:mo>
                </m:mtd>
                <m:mtd columnalign="left">
                  <m:mrow>
                    <m:msub>
                      <m:mi mathvariant="bold">a</m:mi>
                      <m:mi>d</m:mi>
                    </m:msub>
                    <m:mo>-</m:mo>
                    <m:mi mathvariant="bold">H</m:mi>
                    <m:mi>μ</m:mi>
                  </m:mrow>
                </m:mtd>
              </m:mtr>
            </m:mtable>
          </m:math>
        </equation>
        <para id="id2258976">The filter corresponding to the cosine 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> minimize the
<m:math overflow="scroll"><m:msub><m:mi>L</m:mi><m:mn>2</m:mn></m:msub></m:math> error norm subject the equality conditions in (<cnxn target="uid23"/>).</para>
        <para id="id2259019">Notice that the term in (<cnxn target="uid28"/>) of the form <m:math overflow="scroll"><m:mrow><m:mi mathvariant="bold">G</m:mi><m:mspace width="0.166667em"/><m:msub><m:mi mathvariant="bold">a</m:mi><m:mi mathvariant="bold">d</m:mi></m:msub></m:mrow></m:math> is the
frequency response of the optimal unconstrained filter evaluated at the
constraint set frequencies. Equation (<cnxn target="uid28"/>) could, therefore, be
written</para>
        <equation id="uid29">
          <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:msup>
                <m:mrow>
                  <m:mo>(</m:mo>
                  <m:mi mathvariant="bold">G</m:mi>
                  <m:mspace width="0.166667em"/>
                  <m:mi mathvariant="bold">H</m:mi>
                  <m:mo>)</m:mo>
                </m:mrow>
                <m:mrow>
                  <m:mo>-</m:mo>
                  <m:mn mathvariant="bold">1</m:mn>
                </m:mrow>
              </m:msup>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:msub>
                  <m:mi mathvariant="bold">A</m:mi>
                  <m:mi mathvariant="bold">u</m:mi>
                </m:msub>
                <m:mo>-</m:mo>
                <m:msub>
                  <m:mi mathvariant="bold">A</m:mi>
                  <m:mi mathvariant="bold">c</m:mi>
                </m:msub>
                <m:mo>)</m:mo>
              </m:mrow>
            </m:mrow>
          </m:math>
        </equation>
      </section>
      <section id="uid30">
        <name>The Constrained Weighted Least Squares Design of FIR Filters</name>
        <para id="id2259157">Combining the weighted least squared error formulation with the
constrained least squared error gives the general formulation of this
class of problems.</para>
        <para id="id2259162">We now modify the Lagrangian in (<cnxn target="uid7"/>) to allow a weighted squared error
giving</para>
        <equation id="uid31">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mi mathvariant="script">L</m:mi>
              <m:mspace width="0.166667em"/>
              <m:mo>=</m:mo>
              <m:mspace width="0.166667em"/>
              <m:mfrac>
                <m:mn>1</m:mn>
                <m:mi>π</m:mi>
              </m:mfrac>
              <m:msubsup>
                <m:mo>∫</m:mo>
                <m:mn>0</m:mn>
                <m:mi>π</m:mi>
              </m:msubsup>
              <m:mi>W</m:mi>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:mi>ω</m:mi>
                <m:mo>)</m:mo>
              </m:mrow>
              <m:mspace width="0.166667em"/>
              <m:msup>
                <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:mn>2</m:mn>
              </m:msup>
              <m:mspace width="0.166667em"/>
              <m:mi>d</m:mi>
              <m:mi>ω</m:mi>
              <m:mo>+</m:mo>
              <m:munder>
                <m:mo>∑</m:mo>
                <m:mi>i</m:mi>
              </m:munder>
              <m:msub>
                <m:mi>μ</m:mi>
                <m:mi>i</m:mi>
              </m:msub>
              <m:mspace width="0.166667em"/>
              <m:mfenced separators="" open="(" close=")">
                <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>T</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:mfenced>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2259357">with a corresponding derivative of</para>
        <equation id="uid32">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mfrac>
                <m:mrow>
                  <m:mi>d</m:mi>
                  <m:mi mathvariant="script">L</m:mi>
                </m:mrow>
                <m:mrow>
                  <m:mi>d</m:mi>
                  <m:mspace width="0.166667em"/>
                  <m:mi>a</m:mi>
                  <m:mo>(</m:mo>
                  <m:mi>n</m:mi>
                  <m:mo>)</m:mo>
                </m:mrow>
              </m:mfrac>
              <m:mspace width="0.166667em"/>
              <m:mo>=</m:mo>
              <m:mspace width="0.166667em"/>
              <m:mfrac>
                <m:mn>2</m:mn>
                <m:mi>π</m:mi>
              </m:mfrac>
              <m:mo>∫</m:mo>
              <m:mfenced separators="" open="(" close=")">
                <m:mi>W</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: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:mfenced>
              <m:mfrac>
                <m:mrow>
                  <m:mi>d</m:mi>
                  <m:mi>A</m:mi>
                </m:mrow>
                <m:mrow>
                  <m:mi>d</m:mi>
                  <m:mi>a</m:mi>
                </m:mrow>
              </m:mfrac>
              <m:mspace width="0.166667em"/>
              <m:mi>d</m:mi>
              <m:mi>ω</m:mi>
              <m:mo>+</m:mo>
              <m:msub>
                <m:mfenced separators="" open="" close="|">
                  <m:munder>
                    <m:mo>∑</m:mo>
                    <m:mi>i</m:mi>
                  </m:munder>
                  <m:msub>
                    <m:mi>μ</m:mi>
                    <m:mi>i</m:mi>
                  </m:msub>
                  <m:mfrac>
                    <m:mrow>
                      <m:mi>d</m:mi>
                      <m:mi>A</m:mi>
                    </m:mrow>
                    <m:mrow>
                      <m:mi>d</m:mi>
                      <m:mi>a</m:mi>
                    </m:mrow>
                  </m:mfrac>
                </m:mfenced>
                <m:msub>
                  <m:mi>ω</m:mi>
                  <m:mi>i</m:mi>
                </m:msub>
              </m:msub>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2259537">The integral cannot be carried out analytically for a general weighting
function, but if the weight function is constant over each subband,
(<cnxn target=""/>) can be written</para>
        <equation id="uid33">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mfrac>
                <m:mrow>
                  <m:mi>d</m:mi>
                  <m:mi mathvariant="script">L</m:mi>
                </m:mrow>
                <m:mrow>
                  <m:mi>d</m:mi>
                  <m:mspace width="0.166667em"/>
                  <m:mi>a</m:mi>
                  <m:mo>(</m:mo>
                  <m:mi>n</m:mi>
                  <m:mo>)</m:mo>
                </m:mrow>
              </m:mfrac>
              <m:mspace width="0.166667em"/>
              <m:mo>=</m:mo>
              <m:mspace width="0.166667em"/>
              <m:mfrac>
                <m:mn>2</m:mn>
                <m:mi>π</m:mi>
              </m:mfrac>
              <m:munder>
                <m:mo>∑</m:mo>
                <m:mi>k</m:mi>
              </m:munder>
              <m:msubsup>
                <m:mo>∫</m:mo>
                <m:mrow>
                  <m:msub>
                    <m:mi>ω</m:mi>
                    <m:mi>k</m:mi>
                  </m:msub>
                </m:mrow>
                <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:msubsup>
              <m:mfenced separators="" open="(" close=")">
                <m:msub>
                  <m:mi>W</m:mi>
                  <m:mi>k</m:mi>
                </m:msub>
                <m:mspace width="0.166667em"/>
                <m:mrow>
                  <m:mo>(</m:mo>
                  <m:munderover>
                    <m:mo>∑</m:mo>
                    <m:mrow>
                      <m:mi>m</m:mi>
                      <m:mo>=</m:mo>
                      <m:mn>1</m:mn>
                    </m:mrow>
                    <m:mi>M</m:mi>
                  </m:munderover>
                  <m:mi>a</m:mi>
                  <m:mrow>
                    <m:mo>(</m:mo>
                    <m:mi>m</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>m</m:mi>
                    <m:mo>)</m:mo>
                  </m:mrow>
                  <m:mo>+</m:mo>
                  <m:mi>K</m:mi>
                  <m:mspace width="0.166667em"/>
                  <m:mi>a</m:mi>
                  <m:mrow>
                    <m:mo>(</m:mo>
                    <m:mn>0</m:mn>
                    <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:mfenced>
              <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:mspace width="0.166667em"/>
              <m:mi>d</m:mi>
              <m:mi>ω</m:mi>
              <m:mo>+</m:mo>
              <m:msub>
                <m:mfenced separators="" open="" close="|">
                  <m:munder>
                    <m:mo>∑</m:mo>
                    <m:mi>i</m:mi>
                  </m:munder>
                  <m:msub>
                    <m:mi>μ</m:mi>
                    <m:mi>i</m:mi>
                  </m:msub>
                  <m:mfrac>
                    <m:mrow>
                      <m:mi>d</m:mi>
                      <m:mi>A</m:mi>
                    </m:mrow>
                    <m:mrow>
                      <m:mi>d</m:mi>
                      <m:mi>a</m:mi>
                    </m:mrow>
                  </m:mfrac>
                </m:mfenced>
                <m:msub>
                  <m:mi>ω</m:mi>
                  <m:mi>i</m:mi>
                </m:msub>
              </m:msub>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2259813">which after rearranging is
</para>
        <equation id="id2259829">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mo>=</m:mo>
              <m:munderover>
                <m:mo>∑</m:mo>
                <m:mrow>
                  <m:mi>m</m:mi>
                  <m:mo>=</m:mo>
                  <m:mn>1</m:mn>
                </m:mrow>
                <m:mi>M</m:mi>
              </m:munderover>
              <m:mfenced separators="" open="[" close="]">
                <m:mfrac>
                  <m:mn>2</m:mn>
                  <m:mi>π</m:mi>
                </m:mfrac>
                <m:munder>
                  <m:mo>∑</m:mo>
                  <m:mi>k</m:mi>
                </m:munder>
                <m:msub>
                  <m:mi>W</m:mi>
                  <m:mi>k</m:mi>
                </m:msub>
                <m:msubsup>
                  <m:mo>∫</m:mo>
                  <m:mrow>
                    <m:msub>
                      <m:mi>ω</m:mi>
                      <m:mi>k</m:mi>
                    </m:msub>
                  </m:mrow>
                  <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:msubsup>
                <m:mrow>
                  <m:mo>(</m:mo>
                  <m:mo form="prefix">cos</m:mo>
                  <m:mrow>
                    <m:mo>(</m:mo>
                    <m:mi>ω</m:mi>
                    <m:mi>m</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:mo>)</m:mo>
                </m:mrow>
                <m:mspace width="0.166667em"/>
                <m:mi>d</m:mi>
                <m:mi>ω</m:mi>
              </m:mfenced>
              <m:mspace width="0.166667em"/>
              <m:mi>a</m:mi>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:mi>m</m:mi>
                <m:mo>)</m:mo>
              </m:mrow>
            </m:mrow>
          </m:math>
        </equation>
        <equation id="uid34">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mo>-</m:mo>
              <m:mfrac>
                <m:mn>2</m:mn>
                <m:mi>π</m:mi>
              </m:mfrac>
              <m:munder>
                <m:mo>∑</m:mo>
                <m:mi>k</m:mi>
              </m:munder>
              <m:msub>
                <m:mi>W</m:mi>
                <m:mi>k</m:mi>
              </m:msub>
              <m:msubsup>
                <m:mo>∫</m:mo>
                <m:mrow>
                  <m:msub>
                    <m:mi>ω</m:mi>
                    <m:mi>k</m:mi>
                  </m:msub>
                </m:mrow>
                <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:msubsup>
              <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: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:mspace width="0.166667em"/>
              <m:mi>d</m:mi>
              <m:mi>ω</m:mi>
              <m:mo>+</m:mo>
              <m:munder>
                <m:mo>∑</m:mo>
                <m:mi>i</m:mi>
              </m:munder>
              <m:msub>
                <m:mi>μ</m:mi>
                <m:mi>i</m:mi>
              </m:msub>
              <m:mo form="prefix">cos</m:mo>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:msub>
                  <m:mi>ω</m:mi>
                  <m:mi>i</m:mi>
                </m:msub>
                <m:mi>n</m:mi>
                <m:mo>)</m:mo>
              </m:mrow>
              <m:mspace width="0.166667em"/>
              <m:mo>=</m:mo>
              <m:mspace width="0.166667em"/>
              <m:mn>0</m:mn>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2260127">where the integral in the first term can now be done analytically. In matrix
notation (<cnxn target=""/>) is</para>
        <equation id="uid35">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mi mathvariant="bold">R</m:mi>
              <m:mspace width="0.166667em"/>
              <m:mi mathvariant="bold">a</m:mi>
              <m:mo>-</m:mo>
              <m:msub>
                <m:mi mathvariant="bold">a</m:mi>
                <m:msub>
                  <m:mi mathvariant="bold">d</m:mi>
                  <m:mi mathvariant="bold">w</m:mi>
                </m:msub>
              </m:msub>
              <m:mo>+</m:mo>
              <m:mi mathvariant="bold">H</m:mi>
              <m:mspace width="0.166667em"/>
              <m:mi>μ</m:mi>
              <m:mspace width="0.166667em"/>
              <m:mo>=</m:mo>
              <m:mspace width="0.166667em"/>
              <m:mn mathvariant="bold">0</m:mn>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2260209">This is a similar form to that in the multiband paper where the matrix
<m:math overflow="scroll"><m:mi mathvariant="bold">R</m:mi></m:math> gives the effects of weighting with elements</para>
        <equation id="uid36">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mi>r</m:mi>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:mi>n</m:mi>
                <m:mo>,</m:mo>
                <m:mi>m</m:mi>
                <m:mo>)</m:mo>
              </m:mrow>
              <m:mspace width="0.166667em"/>
              <m:mo>=</m:mo>
              <m:mspace width="0.166667em"/>
              <m:mfrac>
                <m:mn>2</m:mn>
                <m:mi>π</m:mi>
              </m:mfrac>
              <m:munder>
                <m:mo>∑</m:mo>
                <m:mi>k</m:mi>
              </m:munder>
              <m:msub>
                <m:mi>W</m:mi>
                <m:mi>k</m:mi>
              </m:msub>
              <m:msubsup>
                <m:mo>∫</m:mo>
                <m:mrow>
                  <m:msub>
                    <m:mi>ω</m:mi>
                    <m:mi>k</m:mi>
                  </m:msub>
                </m:mrow>
                <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:msubsup>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:mo form="prefix">cos</m:mo>
                <m:mrow>
                  <m:mo>(</m:mo>
                  <m:mi>ω</m:mi>
                  <m:mi>m</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:mo>)</m:mo>
              </m:mrow>
              <m:mspace width="0.166667em"/>
              <m:mi>d</m:mi>
              <m:mi>ω</m:mi>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2260358">except for the first row which should be divided by <m:math overflow="scroll"><m:mrow><m:mn>2</m:mn><m:mspace width="0.166667em"/><m:mi>K</m:mi></m:mrow></m:math> because of the
normalizing of the <m:math overflow="scroll"><m:mrow><m:mi>a</m:mi><m:mo>(</m:mo><m:mn>0</m:mn><m:mo>)</m:mo></m:mrow></m:math> term in (<cnxn target=""/>) and (<cnxn target="uid20"/>) and the first
column which should be multiplied by <m:math overflow="scroll"><m:mi>K</m:mi></m:math> because of (<cnxn target=""/>) and
(<cnxn target="uid25"/>). The matrix <m:math overflow="scroll"><m:mi mathvariant="bold">R</m:mi></m:math> is a sum of a Toeplitz matrix and a
Hankel matrix and this fact might be used to advantage and <m:math overflow="scroll"><m:msub><m:mi mathvariant="bold">a</m:mi><m:msub><m:mi mathvariant="bold">d</m:mi><m:mi mathvariant="bold">w</m:mi></m:msub></m:msub></m:math> is the vector of modified filter parameters with elements</para>
        <equation id="uid37">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:msub>
                <m:mi>a</m:mi>
                <m:msub>
                  <m:mi>d</m:mi>
                  <m:mi>w</m:mi>
                </m:msub>
              </m:msub>
              <m:mrow>
                <m:mo>(</m:mo>
                <m:mi>n</m:mi>
                <m:mo>)</m:mo>
              </m:mrow>
              <m:mspace width="0.166667em"/>
              <m:mo>=</m:mo>
              <m:mspace width="0.166667em"/>
              <m:mfrac>
                <m:mn>2</m:mn>
                <m:mi>π</m:mi>
              </m:mfrac>
              <m:mo>∑</m:mo>
              <m:msub>
                <m:mi>W</m:mi>
                <m:mi>k</m:mi>
              </m:msub>
              <m:msubsup>
                <m:mo>∫</m:mo>
                <m:mrow>
                  <m:msub>
                    <m:mi>ω</m:mi>
                    <m:mi>k</m:mi>
                  </m:msub>
                </m:mrow>
                <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:msubsup>
              <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: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:mspace width="0.166667em"/>
              <m:mi>d</m:mi>
              <m:mi>ω</m:mi>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2260589">and the matrix <m:math overflow="scroll"><m:mi mathvariant="bold">H</m:mi></m:math> is the same as used in (<cnxn target="uid18"/>) and defined in
(<cnxn target="uid19"/>).
Equations (<cnxn target=""/>) and (<cnxn target="uid23"/>) can be written together as a matrix equation
</para>
        <equation id="uid38">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mfenced separators="" open="[" close="]">
                <m:mrow>
                  <m:mi mathvariant="bold">R</m:mi>
                  <m:mi mathvariant="bold">H</m:mi>
                  <m:mi mathvariant="bold">G</m:mi>
                  <m:mn mathvariant="bold">0</m:mn>
                </m:mrow>
              </m:mfenced>
              <m:mfenced separators="" open="[" close="]">
                <m:mrow>
                  <m:mi mathvariant="bold">a</m:mi>
                  <m:mi>μ</m:mi>
                </m:mrow>
              </m:mfenced>
              <m:mspace width="0.166667em"/>
              <m:mo>=</m:mo>
              <m:mspace width="0.166667em"/>
              <m:mfenced separators="" open="[" close="]">
                <m:mrow>
                  <m:msub>
                    <m:mi mathvariant="bold">a</m:mi>
                    <m:msub>
                      <m:mi>d</m:mi>
                      <m:mi>w</m:mi>
                    </m:msub>
                  </m:msub>
                  <m:msub>
                    <m:mi mathvariant="bold">A</m:mi>
                    <m:mi>c</m:mi>
                  </m:msub>
                </m:mrow>
              </m:mfenced>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2260760">The solutions to (<cnxn target=""/>) and (<cnxn target="uid23"/>) or to (<cnxn target="uid38"/>) are
</para>
        <equation id="uid39"><m:math mode="display" overflow="scroll">
            <m:mtable displaystyle="true">
              <m:mtr>
                <m:mtd columnalign="right">
                  <m:mi>μ</m:mi>
                </m:mtd>
                <m:mtd>
                  <m:mo>=</m:mo>
                </m:mtd>
                <m:mtd columnalign="left">
                  <m:mrow>
                    <m:msup>
                      <m:mrow>
                        <m:mo>(</m:mo>
                        <m:mi mathvariant="bold">G</m:mi>
                        <m:msup>
                          <m:mrow>
                            <m:mi mathvariant="bold">R</m:mi>
                          </m:mrow>
                          <m:mrow>
                            <m:mo>-</m:mo>
                            <m:mn>1</m:mn>
                          </m:mrow>
                        </m:msup>
                        <m:mi mathvariant="bold">H</m:mi>
                        <m:mo>)</m:mo>
                      </m:mrow>
                      <m:mrow>
                        <m:mo>-</m:mo>
                        <m:mn>1</m:mn>
                      </m:mrow>
                    </m:msup>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:msup>
                        <m:mrow>
                          <m:mi mathvariant="bold">GR</m:mi>
                        </m:mrow>
                        <m:mrow>
                          <m:mo>-</m:mo>
                          <m:mn>1</m:mn>
                        </m:mrow>
                      </m:msup>
                      <m:mrow>
                        <m:msub>
                          <m:mi mathvariant="bold">a</m:mi>
                          <m:msub>
                            <m:mi mathvariant="bold">d</m:mi>
                            <m:mi mathvariant="bold">w</m:mi>
                          </m:msub>
                        </m:msub>
                        <m:mo>-</m:mo>
                        <m:msub>
                          <m:mi mathvariant="bold">A</m:mi>
                          <m:mi mathvariant="bold">c</m:mi>
                        </m:msub>
                      </m:mrow>
                      <m:mo>)</m:mo>
                    </m:mrow>
                  </m:mrow>
                </m:mtd>
              </m:mtr>

            </m:mtable>
          </m:math>
        </equation>
        <equation id="element-394"><m:math>
<m:mtable> 
 <m:mtr>
                <m:mtd columnalign="right">
                  <m:mi mathvariant="bold">a</m:mi>
                </m:mtd>
                <m:mtd>
                  <m:mo>=</m:mo>
                </m:mtd>
                <m:mtd columnalign="left">
                  <m:mrow>
                    <m:msup>
                      <m:mrow>
                        <m:mi mathvariant="bold">R</m:mi>
                      </m:mrow>
                      <m:mrow>
                        <m:mo>-</m:mo>
                        <m:mn>1</m:mn>
                      </m:mrow>
                    </m:msup>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:msub>
                        <m:mi mathvariant="bold">a</m:mi>
                        <m:msub>
                          <m:mi>d</m:mi>
                          <m:mi>w</m:mi>
                        </m:msub>
                      </m:msub>
                      <m:mo>-</m:mo>
                      <m:mi mathvariant="bold">H</m:mi>
                      <m:mspace width="0.166667em"/>
                      <m:mi>μ</m:mi>
                      <m:mo>)</m:mo>
                    </m:mrow>
                  </m:mrow>
                </m:mtd>
              </m:mtr>
            </m:mtable>
          </m:math>
        </equation><para id="id2260974">which are ideally suited to a language like Matlab and are implemented in
the programs at the end of this book.</para>
        <para id="id2260982">Since the solution of <m:math overflow="scroll"><m:mrow><m:mi mathvariant="bold">R</m:mi><m:mspace width="0.166667em"/><m:msub><m:mi mathvariant="bold">a</m:mi><m:mi mathvariant="bold">u</m:mi></m:msub><m:mo>=</m:mo><m:msub><m:mi mathvariant="bold">a</m:mi><m:msub><m:mi mathvariant="bold">d</m:mi><m:mi mathvariant="bold">w</m:mi></m:msub></m:msub></m:mrow></m:math> is the optimal
unconstrained weighted least squares filter, we can write (<cnxn target="uid39"/>) and
(<cnxn target="element-394"/>) in the form
</para>
        <equation id="uid40"><m:math mode="display" overflow="scroll">
            <m:mtable displaystyle="true">
              <m:mtr>
                <m:mtd columnalign="right">
                  <m:mi>μ</m:mi>
                </m:mtd>
                <m:mtd>
                  <m:mrow>
                    <m:mspace width="0.166667em"/>
                    <m:mo>=</m:mo>
                    <m:mspace width="0.166667em"/>
                  </m:mrow>
                </m:mtd>
                <m:mtd columnalign="left">
                  <m:mrow>
                    <m:msup>
                      <m:mrow>
                        <m:mo>(</m:mo>
                        <m:mi mathvariant="bold">G</m:mi>
                        <m:msup>
                          <m:mrow>
                            <m:mi mathvariant="bold">R</m:mi>
                          </m:mrow>
                          <m:mrow>
                            <m:mo>-</m:mo>
                            <m:mn>1</m:mn>
                          </m:mrow>
                        </m:msup>
                        <m:mi mathvariant="bold">H</m:mi>
                        <m:mo>)</m:mo>
                      </m:mrow>
                      <m:mrow>
                        <m:mo>-</m:mo>
                        <m:mn>1</m:mn>
                      </m:mrow>
                    </m:msup>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:mi mathvariant="bold">G</m:mi>
                      <m:mspace width="0.166667em"/>
                      <m:mrow>
                        <m:msub>
                          <m:mi mathvariant="bold">a</m:mi>
                          <m:mi mathvariant="bold">u</m:mi>
                        </m:msub>
                        <m:mo>-</m:mo>
                        <m:msub>
                          <m:mi mathvariant="bold">A</m:mi>
                          <m:mi mathvariant="bold">c</m:mi>
                        </m:msub>
                      </m:mrow>
                      <m:mo>)</m:mo>
                    </m:mrow>
                    <m:mspace width="0.166667em"/>
                    <m:mo>=</m:mo>
                    <m:mspace width="0.166667em"/>
                    <m:msup>
                      <m:mrow>
                        <m:mo>(</m:mo>
                        <m:mi mathvariant="bold">G</m:mi>
                        <m:msup>
                          <m:mrow>
                            <m:mi mathvariant="bold">R</m:mi>
                          </m:mrow>
                          <m:mrow>
                            <m:mo>-</m:mo>
                            <m:mn>1</m:mn>
                          </m:mrow>
                        </m:msup>
                        <m:mi mathvariant="bold">H</m:mi>
                        <m:mo>)</m:mo>
                      </m:mrow>
                      <m:mrow>
                        <m:mo>-</m:mo>
                        <m:mn>1</m:mn>
                      </m:mrow>
                    </m:msup>
                    <m:mrow>
                      <m:mo>(</m:mo>
                      <m:mrow>
                        <m:msub>
                          <m:mi mathvariant="bold">A</m:mi>
                          <m:mi mathvariant="bold">u</m:mi>
                        </m:msub>
                        <m:mo>-</m:mo>
                        <m:msub>
                          <m:mi mathvariant="bold">A</m:mi>
                          <m:mi mathvariant="bold">c</m:mi>
                        </m:msub>
                      </m:mrow>
                      <m:mo>)</m:mo>
                    </m:mrow>
                  </m:mrow>
                </m:mtd>
              </m:mtr>
              <m:mtr>
                <m:mtd columnalign="right">
                  <m:mi mathvariant="bold">a</m:mi>
                </m:mtd>
                <m:mtd>
                  <m:mrow>
                    <m:mspace width="0.166667em"/>
                    <m:mo>=</m:mo>
                    <m:mspace width="0.166667em"/>
                  </m:mrow>
                </m:mtd>
                <m:mtd columnalign="left">
                  <m:mrow>
                    <m:msub>
                      <m:mi mathvariant="bold">a</m:mi>
                      <m:mi>u</m:mi>
                    </m:msub>
                    <m:mo>-</m:mo>
                    <m:msup>
                      <m:mrow>
                        <m:mi mathvariant="bold">R</m:mi>
                      </m:mrow>
                      <m:mrow>
                        <m:mo>-</m:mo>
                        <m:mn>1</m:mn>
                      </m:mrow>
                    </m:msup>
                    <m:mi mathvariant="bold">H</m:mi>
                    <m:mspace width="0.166667em"/>
                    <m:mi>μ</m:mi>
                  </m:mrow>
                </m:mtd>
              </m:mtr>
            </m:mtable>
          </m:math>
        </equation><equation id="element-715"><m:math>
<m:mtable>
 <m:mtr>
                <m:mtd columnalign="right">
                  <m:mi mathvariant="bold">a</m:mi>
                </m:mtd>
                <m:mtd>
                  <m:mrow>
                    <m:mspace width="0.166667em"/>
                    <m:mo>=</m:mo>
                    <m:mspace width="0.166667em"/>
                  </m:mrow>
                </m:mtd>
                <m:mtd columnalign="left">
                  <m:mrow>
                    <m:msub>
                      <m:mi mathvariant="bold">a</m:mi>
                      <m:mi>u</m:mi>
                    </m:msub>
                    <m:mo>-</m:mo>
                    <m:msup>
                      <m:mrow>
                        <m:mi mathvariant="bold">R</m:mi>
                      </m:mrow>
                      <m:mrow>
                        <m:mo>-</m:mo>
                        <m:mn>1</m:mn>
                      </m:mrow>
                    </m:msup>
                    <m:mi mathvariant="bold">H</m:mi>
                    <m:mspace width="0.166667em"/>
                    <m:mi>μ</m:mi>
                  </m:mrow>
                </m:mtd>
              </m:mtr>
            </m:mtable>
          </m:math>
        </equation>
      </section>
      <section id="uid41">
        <name>The Exchange Algorithms</name>
        <para id="id2261321">This Lagrange multiplier formulation together with applying the Kuhn-Tucker
conditions are used in an iterative multiple exchange algorithm similar to
the Remez exchange algorithm to give the complete design method.</para>
        <para id="id2261328">One version of this exchange algorithm applies to the problem posed by
Adams with specified pass and stopband edges and with zero error weighting
in the transition band. This problem has the structure of a quadratic
programming problem and could be solved using general QP methods but the
multiple exchange algorithm suggested here is probably faster.</para>
        <para id="id2261337">The second version of this exchange algorithm applies to the problem where
there is no explicitly specified transition band. This problem is not
strictly a quadratic programming problem and our exchange algorithm has no
proof of convergence (the HOS algorithm also has no proof of convergence).
However, in practice, this program has proven to be robust and
converges for a wide variety of lengths, constraints, weights, and
band edges. The performance is completely independent of the normalizing
parameter <m:math overflow="scroll"><m:mi>K</m:mi></m:math>. Notice that the inversion of the <m:math overflow="scroll"><m:mi mathvariant="bold">R</m:mi></m:math> matrix is done
once and does not have to be done each iteration. The details of the
program are included in the filter design paper and in the Matlab program
at the end of this book.</para>
        <para id="id2261373">At mentioned earlier, this design problem might be addressed by general
constrained quadratic programming methods
<cnxn target="bid13"/>, <cnxn target="bid14"/>, <cnxn target="bid15"/>, <cnxn target="bid16"/>, <cnxn target="bid17"/>, <cnxn target="bid18"/>, <cnxn target="bid19"/>, <cnxn target="bid20"/>, <cnxn target="bid21"/>, <cnxn target="bid22"/>.</para>
      </section>
      <section id="uid42">
        <name>Examples and Observations on CLS Designs</name>
        <para id="id2261443">Here we show that the CLS FIR filter design approach is probably the best
general FIR filter design method. For example, a length-31 linear phase lowpass FIR
filter is designed for a band edge of 0.3 and the constraint that the response in the stop cannot be
greater than 0.03 is illustrated in <cnxn target="uid43"/>.</para>
        <figure id="uid43" orient="horizontal">
          <media type="application/postscript" src="figCLS1.eps">
            <media type="image/png" src="figCLS1.png"><!-- NOTE: width parameter changes size of image online (pixels). original width is 504. --><param name="width" value="504"/></media>
          </media>
          <caption>Response of a Constrained Least Squared Error Filter Design</caption>
        </figure>
        <para id="id2261476">This filter was designed using the Matlab command: 'fircls1()' function.</para>
      </section>
    </section>
    <section id="uid44">
      <name><!--Math is not currently allowed in CNXML section title.--> Approximation and the Iterative Reweighted Least Squares Method</name>
      <para id="id2261503">We now consider the general <m:math overflow="scroll"><m:msub><m:mi>L</m:mi><m:mi>p</m:mi></m:msub></m:math> approximation which contains the least
squares <m:math overflow="scroll"><m:msub><m:mi>L</m:mi><m:mn>2</m:mn></m:msub></m:math> and the Chebyshev <m:math overflow="scroll"><m:msub><m:mi>L</m:mi><m:mi>∞</m:mi></m:msub></m:math> cases.
This approach is described in <cnxn target="bid23"/>, <cnxn target="bid24"/>, <cnxn target="bid25"/>
using the iterative reweighted least squared (IRLS) alorithm and looks
attractive in that it can use different <m:math overflow="scroll"><m:mi>p</m:mi></m:math> in different frequency bands.
This would allow, for example, a least squared error approximation in the
passband and a Chebyshev approximation in the stopband. The IRLS method
can also be used for complex Chebyshev approximations <cnxn target="bid26"/> and
constrained <m:math overflow="scroll"><m:msub><m:mi>L</m:mi><m:mn>2</m:mn></m:msub></m:math> approximatin.</para>
      <section id="uid45">
        <name>Iterative Reweighted Least Squares Filter Design Methods</name>
        <para id="id2261615">There are cases where it is desirable to design an FIR filter that will
minimize the <m:math overflow="scroll"><m:msub><m:mi>L</m:mi><m:mi>p</m:mi></m:msub></m:math> error norm. The error is defined by</para>
        <equation id="uid47">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:mi>q</m:mi>
              <m:mspace width="0.166667em"/>
              <m:mo>=</m:mo>
              <m:mspace width="0.166667em"/>
              <m:msub>
                <m:mo>∫</m:mo>
                <m:mi>Ω</m:mi>
              </m:msub>
              <m:msup>
                <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:mi>p</m:mi>
              </m:msup>
              <m:mspace width="0.166667em"/>
              <m:mi>d</m:mi>
              <m:mi>ω</m:mi>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2261712">but we usually work with <m:math overflow="scroll"><m:msup><m:mi>Q</m:mi><m:mn>2</m:mn></m:msup></m:math>.
For large <m:math overflow="scroll"><m:mi>p</m:mi></m:math>, the results are essentially the same as the Chebyshev
filter and this gives a continuum of design between <m:math overflow="scroll"><m:msub><m:mi>L</m:mi><m:mn>2</m:mn></m:msub></m:math> and <m:math overflow="scroll"><m:msub><m:mi>L</m:mi><m:mi>∞</m:mi></m:msub></m:math>.
It also allows the very interesting important possibility of allowing
<m:math overflow="scroll"><m:mrow><m:mi>p</m:mi><m:mo>(</m:mo><m:mi>ω</m:mi><m:mo>)</m:mo></m:mrow></m:math> to be a function of frequency. This means one could have
different error criteria in different frequency bands. It can be modified
to give the same effects as a constraint. This approach is discussed in
<cnxn target="bid25"/>. It can be applied to complex approximation and to
two-dimensional filter design <cnxn target="bid23"/>, <cnxn target="bid27"/>.</para>
        <para id="id2261812">The least squared error and the minimum Chebyshev error criteria are the
two most commonly used linear-phase FIR filter design methods <cnxn target="bid28"/>.
There are many situations where better total performance would be obtained
with a mixture of these two error measures or some compromise design that
would give a trade-off between the two. We show how to design a filter
with an <m:math overflow="scroll"><m:msub><m:mi>L</m:mi><m:mn>2</m:mn></m:msub></m:math> approximation in the passband and a Chebyshev approximation
in the stopband. We also show that by formulating the <m:math overflow="scroll"><m:msub><m:mi>L</m:mi><m:mi>p</m:mi></m:msub></m:math> problem we
can solve the constrained <m:math overflow="scroll"><m:msub><m:mi>L</m:mi><m:mn>2</m:mn></m:msub></m:math> approximation problem <cnxn target="bid1"/>.</para>
        <para id="id2261879">This section first explores the minimization of 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 as a general approximation method and then shows how this allows
<m:math overflow="scroll"><m:msub><m:mi>L</m:mi><m:mn>2</m:mn></m:msub></m:math> and <m:math overflow="scroll"><m:msub><m:mi>L</m:mi><m:mi>∞</m:mi></m:msub></m:math> approximations to be used simultaneous in different
frequency bands of one filter and how the method can be used to impose
constraints on the frequency response. There are no analytical methods to
find this approximation, therefore, an iterative method is used over
samples of the error in the frequency domain. The methods developed here
<cnxn target="bid23"/>, <cnxn target="bid24"/> are based on what is called an <emphasis>iterative reweighted
least squared</emphasis> (IRLS) error algorithm <cnxn target="bid29"/>, <cnxn target="bid30"/>, <cnxn target="bid31"/> and
they can solve certain FIR filter design problems that neither the Remez
exchange algorithm nor analytical <m:math overflow="scroll"><m:msub><m:mi>L</m:mi><m:mn>2</m:mn></m:msub></m:math> methods can.</para>
        <para id="id2261994">The idea of using an IRLS algorithm to achieve a Chebyshev or <m:math overflow="scroll"><m:msub><m:mi>L</m:mi><m:mi>∞</m:mi></m:msub></m:math>
approximation seems to have been first developed by Lawson <cnxn target="bid32"/> and extended to
<m:math overflow="scroll"><m:msub><m:mi>L</m:mi><m:mi>p</m:mi></m:msub></m:math> by Rice and Usow <cnxn target="bid33"/>, <cnxn target="bid34"/>. The basic IRLS method for
<m:math overflow="scroll"><m:msub><m:mi>L</m:mi><m:mi>p</m:mi></m:msub></m:math> was given by Karlovitz <cnxn target="bid35"/> and extended by Chalmers,
et. al. <cnxn target="bid36"/>, Bani and Chalmers <cnxn target="bid37"/>, and Watson
<cnxn target="bid38"/>. Independently, Fletcher, Grant and Hebden <cnxn target="bid39"/>
developed a similar form of IRLS but based on Newton's method and Kahng
<cnxn target="bid40"/> did likewise as an extension of Lawson's algorithm. Others
analyzed and extended this work <cnxn target="bid41"/>, <cnxn target="bid42"/>, <cnxn target="bid31"/>, <cnxn target="bid38"/>. Special
analysis has been made for <m:math overflow="scroll"><m:mrow><m:mn>1</m:mn><m:mo>≤</m:mo><m:mi>p</m:mi><m:mo>&lt;</m:mo><m:mn>2</m:mn></m:mrow></m:math> by
<cnxn target="bid43"/>, <cnxn target="bid44"/>, <cnxn target="bid30"/>, <cnxn target="bid45"/>, <cnxn target="bid42"/>, <cnxn target="bid29"/>, <cnxn target="bid46"/> and for <m:math overflow="scroll"><m:mrow><m:mi>p</m:mi><m:mo>=</m:mo><m:mi>∞</m:mi></m:mrow></m:math> by
<cnxn target="bid39"/>, <cnxn target="bid37"/>, <cnxn target="bid30"/>, <cnxn target="bid47"/>, <cnxn target="bid48"/>, <cnxn target="bid49"/>. Relations to the
Remez exchange algorithm <cnxn target="bid50"/>, <cnxn target="bid51"/> were suggested by
<cnxn target="bid37"/>, to homotopy <cnxn target="bid52"/> by <cnxn target="bid53"/>, and to
Karmarkar's linear programming algorithm <cnxn target="bid12"/> by
<cnxn target="bid30"/>, <cnxn target="bid54"/>. Applications of Lawson's algorithm to complex
Chebyshev approximation in FIR filter design have been made in
<cnxn target="bid55"/>, <cnxn target="bid56"/>, <cnxn target="bid57"/>, <cnxn target="bid26"/> and to 2-D filter design in <cnxn target="bid58"/>.
Reference <cnxn target="bid59"/> indicates further results may be forthcoming.
Application to array design can be found in <cnxn target="bid60"/> and to
statistics in <cnxn target="bid31"/>.</para>
        <para id="id2262321">This paper unifies and extends the IRLS techniques and applies them to the
design of FIR digital filters. It develops a framework that relates all
of the above referenced work and shows them to be variations of a basic
IRLS method modified so as to control convergence. In particular, we
generalize the work of Rice and Usow on Lawson's algorithm and explain why
its asymptotic convergence is slow.</para>
        <para id="id2262338">The main contribution here is a new robust IRLS method
<cnxn target="bid23"/>, <cnxn target="bid24"/> that combines an improved convergence acceleration scheme
and a Newton based method. This gives a very efficient and versatile
filter design algorithm that performs significantly better than the
Rice-Usow-Lawson algorithm or any of the other IRLS schemes. Both the
initial and asymptotic convergence behavior of the new algorithm is
examined and the reason for occasional slow convergence of this and all
other IRLS methods is discovered.</para>
        <para id="id2262361">We then show that the new IRLS method allows the use of <m:math overflow="scroll"><m:mi>p</m:mi></m:math> as a function
of frequency to achieve different error criteria in the pass and stopbands
of a filter. Therefore, this algorithm can be applied to solve the
constrained <m:math overflow="scroll"><m:msub><m:mi>L</m:mi><m:mi>p</m:mi></m:msub></m:math> approximation problem. Initial results of applications
to the complex and two-dimensional filter design problem are presented.</para>
        <para id="id2262395">Although the traditional IRLS methods were sometimes slower than competing
approaches, the results of this paper and the availability of fast modern
desktop computers make them practical now and allow exploitation of their
greater flexibility and generality.</para>
        <section id="uid48">
          <name>Minimum Squared Error Approximations</name>
          <para id="id2262409">Various approximation methods can be developed by considering different
definitions of norm or error measure. Commonly used definitions are
<m:math overflow="scroll"><m:msub><m:mi>L</m:mi><m:mn>1</m:mn></m:msub></m:math>, <m:math overflow="scroll"><m:msub><m:mi>L</m:mi><m:mn>2</m:mn></m:msub></m:math>, and Chebyshev or <m:math overflow="scroll"><m:msub><m:mi>L</m:mi><m:mi>∞</m:mi></m:msub></m:math>. Using the <m:math overflow="scroll"><m:msub><m:mi>L</m:mi><m:mn>2</m:mn></m:msub></m:math> norm, gives
the scalar error to minimize</para>
          <equation id="uid49">
            <m:math mode="display" overflow="scroll">
              <m:mrow>
                <m:mi>q</m:mi>
                <m:mo>=</m:mo>
                <m:munderover>
                  <m:mo>∑</m:mo>
                  <m:mrow>
                    <m:mi>k</m:mi>
                    <m:mo>=</m:mo>
                    <m:mn>0</m:mn>
                  </m:mrow>
                  <m:mrow>
                    <m:mi>L</m:mi>
                    <m:mo>-</m:mo>
                    <m:mn>1</m:mn>
                  </m:mrow>
                </m:munderover>
                <m:msup>
                  <m:mrow>
                    <m:mo>|</m:mo>
                    <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: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>k</m:mi>
                      </m:msub>
                      <m:mo>)</m:mo>
                    </m:mrow>
                    <m:mo>|</m:mo>
                  </m:mrow>
                  <m:mn>2</m:mn>
                </m:msup>
              </m:mrow>
            </m:math>
          </equation>
          <para id="id2262560">or in matrix notation using (<cnxn target="uid49"/>), the error or residual vector is
defined by</para>
          <equation id="uid50">
            <m:math mode="display" overflow="scroll">
              <m:mrow>
                <m:mi>q</m:mi>
                <m:mspace width="0.166667em"/>
                <m:mo>=</m:mo>
                <m:mspace width="0.166667em"/>
                <m:mrow>
                  <m:mi mathvariant="bold">C</m:mi>
                  <m:mspace width="0.166667em"/>
                  <m:mi mathvariant="bold">a</m:mi>
                  <m:mo>-</m:mo>
                  <m:msub>
                    <m:mi mathvariant="bold">A</m:mi>
                    <m:mi mathvariant="bold">d</m:mi>
                  </m:msub>
                </m:mrow>
              </m:mrow>
            </m:math>
          </equation>
          <para id="id2262622">giving the scalar error of (<cnxn target="uid49"/>) as</para>
          <equation id="uid51">
            <m:math mode="display" overflow="scroll">
              <m:mrow>
                <m:mi>q</m:mi>
                <m:mspace width="0.166667em"/>
                <m:mo>=</m:mo>
                <m:mspace width="0.166667em"/>
                <m:mrow>
                  <m:msup>
                    <m:mi>ϵ</m:mi>
                    <m:mi mathvariant="bold">T</m:mi>
                  </m:msup>
                  <m:mi>ϵ</m:mi>
                  <m:mo>.</m:mo>
                </m:mrow>
              </m:mrow>
            </m:math>
          </equation>
          <para id="id2262672">This can be minimized by solution of the normal equations
<cnxn target="bid61"/>, <cnxn target="bid62"/>, <cnxn target="bid12"/></para>
          <equation id="uid52">
            <m:math mode="display" overflow="scroll">
              <m:mrow>
                <m:msup>
                  <m:mi mathvariant="bold">C</m:mi>
                  <m:mi mathvariant="bold">T</m:mi>
                </m:msup>
                <m:mspace width="0.166667em"/>
                <m:mi mathvariant="bold">C</m:mi>
                <m:mspace width="0.166667em"/>
                <m:mi mathvariant="bold">a</m:mi>
                <m:mo>=</m:mo>
                <m:msup>
                  <m:mi mathvariant="bold">C</m:mi>
                  <m:mi mathvariant="bold">T</m:mi>
                </m:msup>
                <m:mspace width="0.166667em"/>
                <m:msub>
                  <m:mi mathvariant="bold">A</m:mi>
                  <m:mi mathvariant="bold">d</m:mi>
                </m:msub>
                <m:mo>.</m:mo>
              </m:mrow>
            </m:math>
          </equation>
          <para id="id2262765">The weighted squared error defined by</para>
          <equation id="uid53">
            <m:math mode="display" overflow="scroll">
              <m:mrow>
                <m:mi>q</m:mi>
                <m:mspace width="0.166667em"/>
                <m:mo>=</m:mo>
                <m:mspace width="0.166667em"/>
                <m:munderover>
                  <m:mo>∑</m:mo>
                  <m:mrow>
                    <m:mi>k</m:mi>
                    <m:mo>=</m:mo>
                    <m:mn>0</m:mn>
                  </m:mrow>
                  <m:mrow>
                    <m:mi>L</m:mi>
                    <m:mo>-</m:mo>
                    <m:mn>1</m:mn>
                  </m:mrow>
                </m:munderover>
                <m:msubsup>
                  <m:mi>w</m:mi>
                  <m:mi>k</m:mi>
                  <m:mn>2</m:mn>
                </m:msubsup>
                <m:mspace width="0.166667em"/>
                <m:msup>
                  <m:mrow>
                    <m:mo>|</m:mo>
                    <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: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>k</m:mi>
                      </m:msub>
                      <m:mo>)</m:mo>
                    </m:mrow>
                    <m:mo>|</m:mo>
                  </m:mrow>
                  <m:mn>2</m:mn>
                </m:msup>
                <m:mo>.</m:mo>
              </m:mrow>
            </m:math>
          </equation>
          <para id="id2262881">or, in matrix notation using (<cnxn target="uid50"/>) and (<cnxn target="uid51"/>) causes (<cnxn target="uid53"/>)
to become</para>
          <equation id="uid54">
            <m:math mode="display" overflow="scroll">
              <m:mrow>
                <m:mi>q</m:mi>
                <m:mo>=</m:mo>
                <m:mrow>
                  <m:msup>
                    <m:mi>ϵ</m:mi>
                    <m:mi mathvariant="bold">T</m:mi>
                  </m:msup>
                  <m:mspace width="0.166667em"/>
                  <m:msup>
                    <m:mi mathvariant="bold">W</m:mi>
                    <m:mi mathvariant="bold">T</m:mi>
                  </m:msup>
                  <m:mspace width="0.166667em"/>
                  <m:mi mathvariant="bold">W</m:mi>
                  <m:mspace width="0.166667em"/>
                  <m:mi>ϵ</m:mi>
                </m:mrow>
              </m:mrow>
            </m:math>
          </equation>
          <para id="id2262957">which can be minimized by solving</para>
          <equation id="uid55">
            <m:math mode="display" overflow="scroll">
              <m:mrow>
                <m:mi mathvariant="bold">W</m:mi>
                <m:mspace width="0.166667em"/>
                <m:mi mathvariant="bold">C</m:mi>
                <m:mspace width="0.166667em"/>
                <m:mi mathvariant="bold">a</m:mi>
                <m:mo>=</m:mo>
                <m:mi mathvariant="bold">W</m:mi>
                <m:mspace width="0.166667em"/>
                <m:msub>
                  <m:mi mathvariant="bold">A</m:mi>
                  <m:mi mathvariant="bold">d</m:mi>
                </m:msub>
              </m:mrow>
            </m:math>
          </equation>
          <para id="id2263018">with the normal equations</para>
          <equation id="uid56">
            <m:math mode="display" overflow="scroll">
              <m:mrow>
                <m:msup>
                  <m:mi mathvariant="bold">C</m:mi>
                  <m:mi mathvariant="bold">T</m:mi>
                </m:msup>
                <m:mspace width="0.166667em"/>
                <m:msup>
                  <m:mi mathvariant="bold">W</m:mi>
                  <m:mi mathvariant="bold">T</m:mi>
                </m:msup>
                <m:mspace width="0.166667em"/>
                <m:mi mathvariant="bold">W</m:mi>
                <m:mspace width="0.166667em"/>
                <m:mi mathvariant="bold">C</m:mi>
                <m:mspace width="0.166667em"/>
                <m:mi mathvariant="bold">a</m:mi>
                <m:mo>=</m:mo>
                <m:msup>
                  <m:mi mathvariant="bold">C</m:mi>
                  <m:mi mathvariant="bold">T</m:mi>
                </m:msup>
                <m:mspace width="0.166667em"/>
                <m:msup>
                  <m:mi mathvariant="bold">W</m:mi>
                  <m:mi mathvariant="bold">T</m:mi>
                </m:msup>
                <m:mspace width="0.166667em"/>
                <m:mi mathvariant="bold">W</m:mi>
                <m:mspace width="0.166667em"/>
                <m:msub>
                  <m:mi mathvariant="bold">A</m:mi>
                  <m:mi mathvariant="bold">d</m:mi>
                </m:msub>
              </m:mrow>
            </m:math>
          </equation>
          <para id="id2263139">where <m:math overflow="scroll"><m:mi>W</m:mi></m:math> is an <m:math overflow="scroll"><m:mi>L</m:mi></m:math> by <m:math overflow="scroll"><m:mi>L</m:mi></m:math> diagonal matrix with the weights <m:math overflow="scroll"><m:msub><m:mi>w</m:mi><m:mi>k</m:mi></m:msub></m:math> from
(<cnxn target="uid53"/>) along the diagonal. A more general formulation of the
approximation simply requires <m:math overflow="scroll"><m:mrow><m:msup><m:mi>W</m:mi><m:mi>T</m:mi></m:msup><m:mi>W</m:mi></m:mrow></m:math> to be positive definite. Some
authors define the weighted error in (<cnxn target="uid53"/>) using <m:math overflow="scroll"><m:msub><m:mi>w</m:mi><m:mi>k</m:mi></m:msub></m:math> rather than
<m:math overflow="scroll"><m:msubsup><m:mi>w</m:mi><m:mi>k</m:mi><m:mn>2</m:mn></m:msubsup></m:math>. We use the latter to be consistent with the least squared error
algorithms in Matlab <cnxn target="bid63"/>.</para>
          <para id="id2263255">Solving (<cnxn target="uid56"/>) is a direct method of designing an FIR filter using a
weighted least squared error approximation. To minimize the sum of the
squared error and get approximately the same result as minimizing the
integral of the squared error, one must choose <m:math overflow="scroll"><m:mi>L</m:mi></m:math> to be 3 to 10 or more
times the length <m:math overflow="scroll"><m:mi>L</m:mi></m:math> of the filter being designed.</para>
        </section>
        <section id="uid57">
          <name>Iterative Algorithms to Minimize the <!--Math is not currently allowed in CNXML section title.--> Error</name>
          <para id="id2263309">There is no simple direct method for finding the optimal approximation for
any error power other than two. However, if the weighting coefficients
<m:math overflow="scroll"><m:msub><m:mi>w</m:mi><m:mi>k</m:mi></m:msub></m:math> as elements of <m:math overflow="scroll"><m:mi>W</m:mi></m:math> in (<cnxn target="uid56"/>) could be set equal to the elements
in <m:math overflow="scroll"><m:mrow><m:mrow><m:mo>|</m:mo><m:mi>A</m:mi><m:mo>-</m:mo></m:mrow><m:msub><m:mi>A</m:mi><m:mi>d</m:mi></m:msub><m:mrow><m:mo>|</m:mo></m:mrow></m:mrow></m:math>, minimizing (<cnxn target="uid53"/>) would minimize the fourth power of
<m:math overflow="scroll"><m:mrow><m:mrow><m:mo>|</m:mo><m:mi>A</m:mi><m:mo>-</m:mo></m:mrow><m:msub><m:mi>A</m:mi><m:mi>d</m:mi></m:msub><m:mrow><m:mo>|</m:mo></m:mrow></m:mrow></m:math>. This cannot be done in one step because we need the solution
to find the weights! We can, however, pose an iterative algorithm which
will first solve the problem in (<cnxn target="uid52"/>) with no weights, then calculate
the error vector <m:math overflow="scroll"><m:mi>ϵ</m:mi></m:math> from (<cnxn target="uid50"/>) which will then be used to
calculate the weights in (<cnxn target="uid56"/>). At each stage of the iteration, the
weights are updated from the previous error and the problem solved again.
This process of successive approximations is called the <emphasis>iterative
reweighted least squared</emphasis> error algorithm (IRLS).</para>
          <para id="id2263438">The basic IRLS equations can also be derived by simply taking the gradient
of the <m:math overflow="scroll"><m:mi>p</m:mi></m:math>-error with respect to the filter coefficients <m:math overflow="scroll"><m:mi>h</m:mi></m:math> or <m:math overflow="scroll"><m:mi>a</m:mi></m:math> and
setting it equal to zero <cnxn target="bid39"/>, <cnxn target="bid40"/>. These equations form the
basis for the iterative algorithm.</para>
          <para id="id2263483">If the algorithm is a contraction mapping <cnxn target="bid64"/>, the successive
approximations will converge and the limit is the solution of the minimum
<m:math overflow="scroll"><m:msub><m:mi>L</m:mi><m:mn>4</m:mn></m:msub></m:math> approximation problem. If a general problem can be posed
<cnxn target="bid65"/>, <cnxn target="bid66"/>, <cnxn target="bid67"/> as the solution of an equation in the form</para>
          <equation id="uid58">
            <m:math mode="display" overflow="scroll">
              <m:mrow>
                <m:mi>x</m:mi>
                <m:mo>=</m:mo>
                <m:mi>f</m:mi>
                <m:mo>(</m:mo>
                <m:mi>x</m:mi>
                <m:mo>)</m:mo>
                <m:mo>,</m:mo>
              </m:mrow>
            </m:math>
          </equation>
          <para id="id2263554">a successive approximation algorithm can be proposed which iteratively
calculates <m:math overflow="scroll"><m:mi>x</m:mi></m:math> using</para>
          <equation id="uid59">
            <m:math mode="display" overflow="scroll">
              <m:mrow>
                <m:msub>
                  <m:mi>x</m:mi>
                  <m:mrow>
                    <m:mi>m</m:mi>
                    <m:mo>+</m:mo>
                    <m:mn>1</m:mn>
                  </m:mrow>
                </m:msub>
                <m:mo>=</m:mo>
                <m:mi>f</m:mi>
                <m:mrow>
                  <m:mo>(</m:mo>
                  <m:msub>
                    <m:mi>x</m:mi>
                    <m:mi>m</m:mi>
                  </m:msub>
                  <m:mo>)</m:mo>
                </m:mrow>
              </m:mrow>
            </m:math>
          </equation>
          <para id="id2263612">starting with some <m:math overflow="scroll"><m:msub><m:mi>x</m:mi><m:mn>0</m:mn></m:msub></m:math>. The function <m:math overflow="scroll"><m:mrow><m:mi>f</m:mi><m:mo>(</m:mo><m:mo>·</m:mo><m:mo>)</m:mo></m:mrow></m:math> maps <m:math overflow="scroll"><m:msub><m:mi>x</m:mi><m:mi>m</m:mi></m:msub></m:math> into
<m:math overflow="scroll"><m:msub><m:mi>x</m:mi><m:mrow><m:mi>m</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:msub></m:math> and, if</para>
          <para id="id2263683"><m:math overflow="scroll"><m:mrow><m:msub><m:mo movablelimits="true" form="prefix">lim</m:mo><m:mrow><m:mi>m</m:mi><m:mo>→</m:mo><m:mi>∞</m:mi></m:mrow></m:msub><m:msub><m:mi>x</m:mi><m:mi>m</m:mi></m:msub><m:mo>=</m:mo><m:msub><m:mi>x</m:mi><m:mn>0</m:mn></m:msub></m:mrow></m:math> where <m:math overflow="scroll"><m:mrow><m:msub><m:mi>x</m:mi><m:mn>0</m:mn></m:msub><m:mo>=</m:mo><m:mi>f</m:mi><m:mrow><m:mo>(</m:mo><m:msub><m:mi>x</m:mi><m:mn>0</m:mn></m:msub><m:mo>)</m:mo></m:mrow></m:mrow></m:math>, <m:math overflow="scroll"><m:msub><m:mi>x</m:mi><m:mn>0</m:mn></m:msub></m:math> is the fixed point of the mapping and a solution to
(<cnxn target="uid58"/>). The trick is to find a mapping that solves the desired
problem, converges, and converges fast.</para>
          <para id="id2263784">By setting the weights in (<cnxn target="uid53"/>) equal to</para>
          <equation id="uid60">
            <m:math mode="display" overflow="scroll">
              <m:mrow>
                <m:mrow>
                  <m:mi>w</m:mi>
                  <m:mrow>
                    <m:mo>(</m:mo>
                    <m:mi>k</m:mi>
                    <m:mo>)</m:mo>
                  </m:mrow>
                  <m:mo>=</m:mo>
                  <m:mo>|</m:mo>
                  <m:mi>A</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: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>k</m:mi>
                  </m:msub>
                  <m:mo>)</m:mo>
                </m:mrow>
                <m:msup>
                  <m:mrow>
                    <m:mo>|</m:mo>
                  </m:mrow>
                  <m:mrow>
                    <m:mo>(</m:mo>
                    <m:mi>p</m:mi>
                    <m:mo>-</m:mo>
                    <m:mn>2</m:mn>
                    <m:mo>)</m:mo>
                    <m:mo>/</m:mo>
                    <m:mn>2</m:mn>
                  </m:mrow>
                </m:msup>
                <m:mo>,</m:mo>
              </m:mrow>
            </m:math>
          </equation>
          <para id="id2263882">the fixed point of a convergent algorithm minimizes</para>
          <equation id="uid61">
            <m:math mode="display" overflow="scroll">
              <m:mrow>
                <m:mi>q</m:mi>
                <m:mo>=</m:mo>
                <m:munderover>
                  <m:mo>∑</m:mo>
                  <m:mrow>
                    <m:mi>k</m:mi>
                    <m:mo>=</m:mo>
                    <m:mn>0</m:mn>
                  </m:mrow>
                  <m:mrow>
                    <m:mi>L</m:mi>
                    <m:mo>-</m:mo>
                    <m:mn>1</m:mn>
                  </m:mrow>
                </m:munderover>
                <m:msup>
                  <m:mrow>
                    <m:mo>|</m:mo>
                    <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: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>k</m:mi>
                      </m:msub>
                      <m:mo>)</m:mo>
                    </m:mrow>
                    <m:mo>|</m:mo>
                  </m:mrow>
                  <m:mi>p</m:mi>
                </m:msup>
                <m:mo>.</m:mo>
              </m:mrow>
            </m:math>
          </equation>
          <para id="id2263977">It has been shown <cnxn target="bid33"/> that weights always exist such that
minimizing (<cnxn target="uid53"/>) also minimizes (<cnxn target="uid61"/>). The problem is to find
those weights efficiently.</para>
        </section>
        <section id="uid62">
          <name>Basic Iterative Reweighted Least Squares</name>
          <para id="id2264007">The basic IRLS algorithm is started by initializing the weight matrix
defined in (<cnxn target="uid53"/>) and (<cnxn target="uid54"/>) for unit weights with <m:math overflow="scroll"><m:mrow><m:msub><m:mi>W</m:mi><m:mn>0</m:mn></m:msub><m:mo>=</m:mo><m:mi>I</m:mi></m:mrow></m:math>.
Using these weights to start, the <m:math overflow="scroll"><m:msup><m:mi>m</m:mi><m:mrow><m:mi>t</m:mi><m:mi>h</m:mi></m:mrow></m:msup></m:math> iteration solves (<cnxn target="uid56"/>) for
the filter coefficients with</para>
          <equation id="uid63">
            <m:math mode="display" overflow="scroll">
              <m:mrow>
                <m:msub>
                  <m:mi mathvariant="bold">a</m:mi>
                  <m:mi mathvariant="bold">m</m:mi>
                </m:msub>
                <m:mo>=</m:mo>
                <m:msup>
                  <m:mrow>
                    <m:mo>[</m:mo>
                    <m:msup>
                      <m:mi mathvariant="bold">C</m:mi>
                      <m:mi mathvariant="bold">T</m:mi>
                    </m:msup>
                    <m:msubsup>
                      <m:mi mathvariant="bold">W</m:mi>
                      <m:mi mathvariant="bold">m</m:mi>
                      <m:mi mathvariant="bold">T</m:mi>
                    </m:msubsup>
                    <m:msub>
                      <m:mi mathvariant="bold">W</m:mi>
                      <m:mi mathvariant="bold">m</m:mi>
                    </m:msub>
                    <m:mi mathvariant="bold">C</m:mi>
                    <m:mo>]</m:mo>
                  </m:mrow>
                  <m:mrow>
                    <m:mo>-</m:mo>
                    <m:mn mathvariant="bold">1</m:mn>
                  </m:mrow>
                </m:msup>
                <m:msup>
                  <m:mi mathvariant="bold">C</m:mi>
                  <m:mi mathvariant="bold">T</m:mi>
                </m:msup>
                <m:msubsup>
                  <m:mi mathvariant="bold">W</m:mi>
                  <m:mi mathvariant="bold">m</m:mi>
                  <m:mi mathvariant="bold">T</m:mi>
                </m:msubsup>
                <m:msub>
                  <m:mi mathvariant="bold">W</m:mi>
                  <m:mi mathvariant="bold">m</m:mi>
                </m:msub>
                <m:msub>
                  <m:mi mathvariant="bold">A</m:mi>
                  <m:mi mathvariant="bold">d</m:mi>
                </m:msub>
              </m:mrow>
            </m:math>
          </equation>
          <para id="id2264207">This is a formal statement of the operation. In practice one should not
invert a matrix, one should use a sophisticated numerical method
<cnxn target="bid68"/> to solve the overdetermined equations in (<cnxn target="uid49"/>) The
error or residual vector (<cnxn target="uid50"/>) for the <m:math overflow="scroll"><m:msup><m:mi>m</m:mi><m:mrow><m:mi>t</m:mi><m:mi>h</m:mi></m:mrow></m:msup></m:math> iteration is found by</para>
          <equation id="uid64">
            <m:math mode="display" overflow="scroll">
              <m:mrow>
                <m:msub>
                  <m:mi>ϵ</m:mi>
                  <m:mi mathvariant="bold">m</m:mi>
                </m:msub>
                <m:mo>=</m:mo>
                <m:mi mathvariant="bold">C</m:mi>
                <m:mspace width="0.166667em"/>
                <m:msub>
                  <m:mi mathvariant="bold">a</m:mi>
                  <m:mi mathvariant="bold">m</m:mi>
                </m:msub>
                <m:mo>-</m:mo>
                <m:msub>
                  <m:mi mathvariant="bold">A</m:mi>
                  <m:mi mathvariant="bold">d</m:mi>
                </m:msub>
              </m:mrow>
            </m:math>
          </equation>
          <para id="id2264307">A new weighting vector is created from this error vector using (<cnxn target="uid60"/>) by</para>
          <equation id="uid65">
            <m:math mode="display" overflow="scroll">
              <m:mrow>
                <m:msub>
                  <m:mi>w</m:mi>
                  <m:mrow>
                    <m:mi>m</m:mi>
                    <m:mo>+</m:mo>
                    <m:mn>1</m:mn>
                  </m:mrow>
                </m:msub>
                <m:mo>=</m:mo>
                <m:msup>
                  <m:mrow>
                    <m:mo>|</m:mo>
                    <m:msub>
                      <m:mi>ϵ</m:mi>
                      <m:mi mathvariant="bold">m</m:mi>
                    </m:msub>
                    <m:mo>|</m:mo>
                  </m:mrow>
                  <m:mrow>
                    <m:mo>(</m:mo>
                    <m:mi>p</m:mi>
                    <m:mo>-</m:mo>
                    <m:mn>2</m:mn>
                    <m:mo>)</m:mo>
                    <m:mo>/</m:mo>
                    <m:mn>2</m:mn>
                  </m:mrow>
                </m:msup>
              </m:mrow>
            </m:math>
          </equation>
          <para id="id2264380">whose elements are the diagonal elements of the new weight matrix</para>
          <equation id="uid66">
            <m:math mode="display" overflow="scroll">
              <m:mrow>
                <m:msub>
                  <m:mi mathvariant="bold">W</m:mi>
                  <m:mrow>
                    <m:mi mathvariant="bold">m</m:mi>
                    <m:mo>+</m:mo>
                    <m:mn mathvariant="bold">1</m:mn>
                  </m:mrow>
                </m:msub>
                <m:mo>=</m:mo>
                <m:mi>d</m:mi>
                <m:mi>i</m:mi>
                <m:mi>a</m:mi>
                <m:mi>g</m:mi>
                <m:mrow>
                  <m:mo>[</m:mo>
                  <m:msub>
                    <m:mi>w</m:mi>
                    <m:mrow>
                      <m:mi>m</m:mi>
                      <m:mo>+</m:mo>
                      <m:mn>1</m:mn>
                    </m:mrow>
                  </m:msub>
                  <m:mo>]</m:mo>
                </m:mrow>
                <m:mo>.</m:mo>
              </m:mrow>
            </m:math>
          </equation>
          <para id="id2264450">Using this weight matrix, we solve for the next vector of filter
coefficients by going back to (<cnxn target="uid63"/>) and this defines the basic
iterative process of the IRLS algorithm.</para>
          <para id="id2264463">It can easily be shown that the <m:math overflow="scroll"><m:mi>a</m:mi></m:math> that minimizes (<cnxn target="uid61"/>) is a fixed
point of this iterative map. Unfortunately, applied directly, this basic
IRLS algorithm does not converge and/or it has numerical problems for most
practical cases <cnxn target="bid31"/>. There are three aspects that must be
addressed. First, the IRLS algorithm must theoretically converge. Second,
the solution of (<cnxn target="uid63"/>) must be numerically stable. Finally, even if
the algorithm converges and is numerically stable, it must converge fast
enough to be practical.</para>
          <para id="id2264497">Both theory and experience indicate there are different convergence
problems connected with several different ranges and values of <m:math overflow="scroll"><m:mi>p</m:mi></m:math>. In
the range <m:math overflow="scroll"><m:mrow><m:mn>2</m:mn><m:mo>≤</m:mo><m:mi>p</m:mi><m:mo>&lt;</m:mo><m:mn>3</m:mn></m:mrow></m:math>, virtually all methods converge
<cnxn target="bid39"/>, <cnxn target="bid31"/>, <cnxn target="bid42"/>. In the range <m:math overflow="scroll"><m:mrow><m:mn>3</m:mn><m:mo>≤</m:mo><m:mi>p</m:mi><m:mo>&lt;</m:mo><m:mi>∞</m:mi></m:mrow></m:math>, the algorithm
diverges and the various methods discussed in this paper must be used.
As <m:math overflow="scroll"><m:mi>p</m:mi></m:math> becomes large compared to 2, the weights carry a larger
contribution to the total minimization than the underlying least squared
error minimization, the improvement at each iteration becomes smaller, and
the likelihood of divergence becomes larger. For <m:math overflow="scroll"><m:mrow><m:mi>p</m:mi><m:mo>=</m:mo><m:mi>∞</m:mi></m:mrow></m:math> we can use
to advantage the fact that the optimal approximation solution to
(<cnxn target="uid61"/>) is unique but the weights in (<cnxn target="uid53"/>) that give that solution
are not. In other words, different matrices <m:math overflow="scroll"><m:mi>W</m:mi></m:math> give the same solution to
(<cnxn target="uid63"/>) but will have different convergence properties. This allows
certain alteration to the weights to improve convergence without harming
the optimality of the results <cnxn target="bid49"/>. In the range <m:math overflow="scroll"><m:mrow><m:mn>1</m:mn><m:mo>&lt;</m:mo><m:mi>p</m:mi><m:mo>&lt;</m:mo><m:mn>2</m:mn></m:mrow></m:math>,
both convergence and numerical problems exist as, in contrast to <m:math overflow="scroll"><m:mrow><m:mi>p</m:mi><m:mo>&gt;</m:mo><m:mn>2</m:mn></m:mrow></m:math>,
the IRLS iterations are undoing what the underlying least squares is
doing. In particular, the weights near frequencies with small errors
become very large. Indeed, if the error happens to be zero, the weight
becomes infinite because of the negative exponent in (<cnxn target="uid65"/>). For <m:math overflow="scroll"><m:mrow><m:mi>p</m:mi><m:mo>=</m:mo><m:mn>1</m:mn></m:mrow></m:math> the solution to the optimization problem is not even unique. The
various algorithms that are presented below are based on schemes to
address these problems.</para>
        </section>
      </section>
      <section id="uid67">
        <name>The Karlovitz Method</name>
        <para id="id2264702">In order to achieve convergence, a second order update is used which only
partially changes the filter coefficients <m:math overflow="scroll"><m:msub><m:mi>a</m:mi><m:mi>m</m:mi></m:msub></m:math> in (<cnxn target="uid63"/>) each
iteration. This is done by first calculating the unweighted <m:math overflow="scroll"><m:msub><m:mi>L</m:mi><m:mn>2</m:mn></m:msub></m:math>
approximation filter coefficients using (<cnxn target=""/>) as</para>
        <equation id="uid68">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:msub>
                <m:mi>a</m:mi>
                <m:mn>0</m:mn>
              </m:msub>
              <m:mo>=</m:mo>
              <m:msup>
                <m:mrow>
                  <m:mo>[</m:mo>
                  <m:msup>
                    <m:mi>C</m:mi>
                    <m:mi>T</m:mi>
                  </m:msup>
                  <m:mspace width="0.166667em"/>
                  <m:mi>C</m:mi>
                  <m:mo>]</m:mo>
                </m:mrow>
                <m:mrow>
                  <m:mo>-</m:mo>
                  <m:mn>1</m:mn>
                </m:mrow>
              </m:msup>
              <m:msup>
                <m:mi>C</m:mi>
                <m:mi>T</m:mi>
              </m:msup>
              <m:mspace width="0.166667em"/>
              <m:msub>
                <m:mi>A</m:mi>
                <m:mi>d</m:mi>
              </m:msub>
              <m:mo>.</m:mo>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2264813">The error or residual vector (<cnxn target=""/>) for the <m:math overflow="scroll"><m:msup><m:mi>m</m:mi><m:mrow><m:mi>t</m:mi><m:mi>h</m:mi></m:mrow></m:msup></m:math> iteration is
found as (<cnxn target=""/>) by</para>
        <equation id="uid69">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:msub>
                <m:mi>ϵ</m:mi>
                <m:mi>m</m:mi>
              </m:msub>
              <m:mo>=</m:mo>
              <m:mi>C</m:mi>
              <m:mspace width="0.166667em"/>
              <m:msub>
                <m:mi>a</m:mi>
                <m:mi>m</m:mi>
              </m:msub>
              <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="id2264886">and the new weighting vector is created from this error vector using
(<cnxn target="uid60"/>) by</para>
        <equation id="uid70">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:msub>
                <m:mi>w</m:mi>
                <m:mrow>
                  <m:mi>m</m:mi>
                  <m:mo>+</m:mo>
                  <m:mn>1</m:mn>
                </m:mrow>
              </m:msub>
              <m:mo>=</m:mo>
              <m:msup>
                <m:mrow>
                  <m:mo>|</m:mo>
                  <m:msub>
                    <m:mi>ϵ</m:mi>
                    <m:mi>m</m:mi>
                  </m:msub>
                  <m:mo>|</m:mo>
                </m:mrow>
                <m:mrow>
                  <m:mo>(</m:mo>
                  <m:mi>p</m:mi>
                  <m:mo>-</m:mo>
                  <m:mn>2</m:mn>
                  <m:mo>)</m:mo>
                  <m:mo>/</m:mo>
                  <m:mn>2</m:mn>
                </m:mrow>
              </m:msup>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2264957">whose elements are the diagonal elements of the new weight matrix</para>
        <equation id="uid71">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:msub>
                <m:mi>W</m:mi>
                <m:mrow>
                  <m:mi>m</m:mi>
                  <m:mo>+</m:mo>
                  <m:mn>1</m:mn>
                </m:mrow>
              </m:msub>
              <m:mo>=</m:mo>
              <m:mi>d</m:mi>
              <m:mi>i</m:mi>
              <m:mi>a</m:mi>
              <m:mi>g</m:mi>
              <m:mrow>
                <m:mo>[</m:mo>
                <m:msub>
                  <m:mi>w</m:mi>
                  <m:mrow>
                    <m:mi>m</m:mi>
                    <m:mo>+</m:mo>
                    <m:mn>1</m:mn>
                  </m:mrow>
                </m:msub>
                <m:mo>]</m:mo>
              </m:mrow>
              <m:mo>.</m:mo>
            </m:mrow>
          </m:math>
        </equation>
        <para id="id2265020">This weight matrix is then used to calculate a temporary filter coefficient
vector by</para>
        <equation id="uid72">
          <m:math mode="display" overflow="scroll">
            <m:mrow>
              <m:msub>
                <m:mover accent="true">
                  <m:mi>a</m:mi>
                  <m:mo>^</m:mo>
                </m:mover>
                <m:mrow>
                  <m:mi>m</m:mi>
                  <m:mo>+</m:mo>
                  <m:mn>1</m:mn>
   