iirgrpdelay
Optimal IIR filter with prescribed group-delay
Syntax
[num,den] = iirgrpdelay(n,f,edges,a)
[num,den] = iirgrpdelay(n,f,edges,a,w)
[num,den] = iirgrpdelay(n,f,edges,a,w,radius)
[num,den] = iirgrpdelay(n,f,edges,a,w,radius,p)
[num,den] = iirgrpdelay(n,f,edges,a,w,radius,p,dens)
[num,den] = iirgrpdelay(n,f,edges,a,w,radius,p,dens,initden)
[num,den] = iirgrpdelay(n,f,edges,a,w,radius,p,dens,initden,tau)
[num,den,tau] = iirgrpdelay(n,f,edges,a,w)
Description
[num,den] = iirgrpdelay(n,f,edges,a) returns
an allpass IIR filter of order n (n must
be even) which is the best approximation to the relative group-delay
response described by f and a in
the least-pth sense. f is a vector of frequencies
between 0 and 1 and a is specified in samples.
The vector edges specifies the band-edge frequencies
for multi-band designs. iirgrpdelay uses a constrained
Newton-type algorithm. Always check your resulting filter using grpdelay or freqz.
[num,den] = iirgrpdelay(n,f,edges,a,w) uses
the weights in w to weight the error. w has
one entry per frequency point and must be the same length as f and a).
Entries in w tell iirgrpdelay how
much emphasis to put on minimizing the error in the vicinity of each
specified frequency point relative to the other points.
f and a must have the
same number of elements. f and a can
contains more elements than the vector edges contains.
This lets you use f and a to
specify a filter that has any group-delay contour within each band.
[num,den] = iirgrpdelay(n,f,edges,a,w,radius) returns
a filter having a maximum pole radius equal to radius,
where 0<radius<1. radius defaults
to 0.999999. Filters whose pole radius you constrain to be less than
1.0 can better retain transfer function accuracy after quantization.
[num,den] = iirgrpdelay(n,f,edges,a,w,radius,p),
where p is a two-element vector [pmin
pmax], lets you determine the minimum and maximum values
of p used in the least-pth algorithm. p defaults
to [2 128] which yields filters very similar to the L-infinity, or
Chebyshev, norm. pmin and pmax should
be even. If p is 'inspect',
no optimization occurs. You might use this feature to inspect the
initial pole/zero placement.
[num,den] = iirgrpdelay(n,f,edges,a,w,radius,p,dens) specifies
the grid density dens used in the optimization
process. The number of grid points is (dens*(n+1)).
The default is 20. dens can be specified as a single-element
cell array. The grid is not equally spaced.
[num,den] = iirgrpdelay(n,f,edges,a,w,radius,p,dens,initden) allows
you to specify the initial estimate of the denominator coefficients
in vector initden. This can be useful for difficult
optimization problems. The pole-zero editor in Signal Processing Toolbox™ software
can be used for generating initden.
[num,den] = iirgrpdelay(n,f,edges,a,w,radius,p,dens,initden,tau) allows
the initial estimate of the group delay offset to be specified by
the value of tau, in samples.
[num,den,tau] = iirgrpdelay(n,f,edges,a,w) returns
the resulting group delay offset. In all cases, the resulting filter
has a group delay that approximates [a + tau].
Allpass filters can have only positive group delay and a non-zero
value of tau accounts for any additional group delay that is needed
to meet the shape of the contour specified by (f,a).
The default for tau is max(a).
Hint: If the zeros or poles cluster together, your filter order
may be too low or the pole radius may be too small (overly constrained).
Try increasing n or radius.
For group-delay equalization of an IIR filter, compute a by
subtracting the filter's group delay from its maximum group delay.
For example,
[be,ae] = ellip(4,1,40,0.2); f = 0:0.001:0.2; g = grpdelay(be,ae,f,2); % Equalize only the passband. a = max(g)-g; [num,den]=iirgrpdelay(8, f, [0 0.2], a);
References
Antoniou, A., Digital Filters: Analysis, Design, and Applications, Second Edition, McGraw-Hill, Inc. 1993.
Extended Capabilities
Version History
Introduced in R2011a