Note: This page has been translated by MathWorks. Please click here

To view all translated materals including this page, select Japan from the country navigator on the bottom of this page.

To view all translated materals including this page, select Japan from the country navigator on the bottom of this page.

Optimal IIR filter with prescribed group-delay

`[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)

`[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);

Antoniou, A., *Digital Filters: Analysis, Design, and
Applications*, Second Edition, McGraw-Hill, Inc. 1993.

Was this topic helpful?