Numerical Computation
of Group Delay
The definition of group delay,
does not give an immediately useful recipe for computing group delay
numerically. In this section, we describe the theory of operation
behind the
matlab function for group-delay computation given in
§
J.8.
A more useful form of the group delay arises from the
logarithmic derivative of the frequency response. Expressing
the frequency response
in polar form as
yields the following logarithmic decomposition of magnitude and phase:
Thus, the real part of the logarithm of the frequency response equals
the log
amplitude response, while the imaginary part equals the
phase
response.
Since differentiation is linear, the logarithmic derivative becomes
where

and

denote the
derivatives of

and

, respectively, with
respect to

. We may therefore express the group delay as
Consider first the FIR case in which

, with
 |
(8.9) |
In this case, the derivative is simply
where
denotes ``
ramped'', i.e., the
th coefficient of
the polynomial
is
, for
. In
matlab, we may compute Br from B via the
following statement:
Br = B .* [0:M]; % Compute ramped B polynomial
The group delay of an
FIR filter 
can now
be written as
In matlab, the group delay, in samples, can be computed simply as
D = real(fft(Br) ./ fft(B))
where the
fft, of course, approximates the
Discrete Time
Fourier Transform (
DTFT). Such
sampling of the frequency axis by this
approximation is information-preserving whenever the number of samples
(FFT length) exceeds the polynomial order

. The
ratio of
sampled DTFTs, however, is
undersampled, in general. In fact,
we may have

at some frequencies (``zeros on the unit
circle''). The
grpdelay matlab utility in §
J.8
watches out for division by zero, and simply sets the group delay to
zero at such frequencies. Note that the true group delay approaches
infinite magnitude as either a zero or
pole approaches the unit circle.
Finally, when there are both poles and zeros, we have
where

is given in Eq.

(
7.9), and
 |
(8.10) |
Straightforward differentiation yields
 |
(8.11) |
and this can be implemented analogous to the FIR case discussed above.
However, a faster algorithm (usually) results from converting the IIR
case to the FIR case:
![$\displaystyle C(z) \isdefs B(z)\left[ z^{-N}\overline{A}(1/z)\right] \isdefs B(z)\tilde{A}(z) \protect$](http://www.dsprelated.com/josimages/filters/img959.png) |
(8.12) |
where
may be called the
``flip-conjugate'' or ``Hermitian conjugate'' of the polynomial

.
8.4In matlab, the C polynomial is given by
C = conv(B,fliplr(conj(A)));
It is straightforward to show
(Problem
11)
that
The phase of the
IIR filter

is therefore
and the group delay computation thus reduces to the FIR case:

re
This method is implemented in §
J.8.
Previous:
Vocoder AnalysisNext:
Frequency Response Analysis Problems
written by Julius Orion Smith III
Julius Smith's background is in electrical engineering (BS Rice 1975, PhD Stanford 1983). He is presently Professor of Music and Associate Professor (by courtesy) of Electrical Engineering at
Stanford's Center for Computer Research in Music and Acoustics (CCRMA), teaching courses and pursuing research related to signal processing applied to music and audio systems. See
http://ccrma.stanford.edu/~jos/ for details.