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
§H.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

imim

Consider first the FIR case in which , with

(8.8)

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

imimre

In matlab, the group delay, in samples, can be computed simply as

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 §H.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.

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:

(8.11)

where

may be called the
``flip-conjugate'' or ``Hermitian conjugate'' of the polynomial
.^{8.2}In matlab, the C polynomial is given by