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(...)
德scription
b = firlpnorm(n,f,edges,a)
returns a filter of numerator ordern
which represents the best approximation to the frequency response described byf
anda
in the least-Pth norm sense. P is set to 128 by default, which essentially equivalent to the infinity norm. Vectoredges
specifies the band-edge frequencies for multiband designs.firlpnorm
uses an unconstrained quasi-Newton algorithm to design the specified filter.
f
anda
must have the same number of elements, which can exceed the number of elements inedges
. This lets you specify filters with any gain contour within each band. However, the frequencies inedges
must also be in vectorf
. Always usefreqz
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 inw
to weight the error.w
has one entry per frequency point (the same length asf
anda
) which tellsfirlpnorm
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)
wherep
is a two-element vector [pmin pmax
] lets you specify the minimum and maximum values ofp
used in the least-pth algorithm. Default is[2 128]
which essentially yields the L-infinity, or Chebyshev, norm.pmin
andpmax
should be even numbers. The design algorithm starts optimizing the filter withpmin
and moves toward an optimal filter in thepmax
sense. Whenp
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 densitydens
used in the optimization. The number of grid points is [dens*(n+1)
]. The default is 20. You can specifydens
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 vectorinitnum
. This can prove helpful for difficult optimization problems. The pole-zero editor in Signal Processing Toolbox™ software can be used for generatinginitnum
.
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
' causesfirlpnorm
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 errorerr
.
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.