firlpnorm
Least P-norm optimal FIR filter
Syntax
b = firlpnorm(n,f,edges,a)
b = firlpnorm(n,f,edges,a,w)
b = firlpnorm(n,f,edges,a,w,p)
b = firlpnorm(n,f,edges,a,w,p,dens)
b = firlpnorm(n,f,edges,a,w,p,dens,initnum)
b = firlpnorm(...,'minphase')
[b,err] = firlpnorm(...)
Description
b = firlpnorm(n,f,edges,a)
returns
a filter of numerator order n
which represents
the best approximation to the frequency response described by f
and a
in
the least-Pth norm sense. P is set to 128 by default, which essentially
equivalent to the infinity norm. Vector edges
specifies
the band-edge frequencies for multiband designs. firlpnorm
uses
an unconstrained quasi-Newton algorithm to design the specified filter.
f
and a
must have the
same number of elements, which can exceed the number of elements in edges
.
This lets you specify filters with any gain contour within each band.
However, the frequencies in edges
must also be
in vector f
. Always use freqz
to
check the resulting filter.
Note
firlpnorm
uses a nonlinear optimization
routine that may not converge in some filter design cases. Furthermore
the algorithm is not well-suited for certain large-order (order >
100) filter designs.
b = firlpnorm(n,f,edges,a,w)
uses
the weights in w
to weight the error. w
has one entry per frequency point (the same length as f
and a
)
which tells firlpnorm
how much emphasis to put
on minimizing the error in the vicinity of each frequency point relative
to the other points. For example,
b = firlpnorm(20,[0 .15 .4 .5 1],[0 .4 .5 1],... [1 1.6 1 0 0],[1 1 1 10 10])
designs a lowpass filter with a peak of 1.6 within the passband, and with emphasis placed on minimizing the error in the stopband.
b = firlpnorm(n,f,edges,a,w,p)
where p
is
a two-element vector [pmin pmax
] lets you specify
the minimum and maximum values of p
used in the
least-pth algorithm. Default is [2 128]
which essentially
yields the L-infinity, or Chebyshev, norm. pmin
and pmax
should
be even numbers. The design algorithm starts optimizing the filter
with pmin
and moves toward an optimal filter in
the pmax
sense. When p
is set
to 'inspect
', firlpnorm
does
not optimize the resulting filter. You might use this feature to inspect
the initial zero placement.
b = firlpnorm(n,f,edges,a,w,p,dens)
specifies
the grid density dens
used in the optimization.
The number of grid points is [dens*(n+1)
]. The
default is 20. You can specify dens
as a single-element
cell array. The grid is equally spaced.
b = firlpnorm(n,f,edges,a,w,p,dens,initnum)
lets
you determine the initial estimate of the filter numerator coefficients
in vector initnum
. This can prove helpful for difficult
optimization problems. The pole-zero editor in Signal Processing Toolbox™ software
can be used for generating initnum
.
b = firlpnorm(...,'minphase')
where
'minphase
' is the last argument in the argument
list generates a minimum-phase FIR filter. By default, firlpnorm
design
mixed-phase filters. Specifying input option 'minphase
'
causes firlpnorm
to use a different optimization
method to design the minimum-phase filter. As a result of the different
optimization used, the minimum-phase filter can yield slightly different
results.
[b,err] = firlpnorm(...)
returns
the least-pth approximation error err
.
Examples
References
Saramaki, T, Finite Impulse Response Filter Design, Handbook for Digital Signal ProcessingMitra, S.K. and J.F. Kaiser Eds. Wiley-Interscience, N.Y., 1993, Chapter 4.
Extended Capabilities
Version History
Introduced in R2011a