### Numerical Computation of Group Delay

The definition of group delay,

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

Since differentiation is linear, the logarithmic derivative becomes

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 polynomialThe group delay of an FIR filter can now be written 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

Straightforward differentiation yields

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:

where

^{8.4}In matlab, the C polynomial is given by

C = conv(B,fliplr(conj(A)));It is straightforward to show (Problem 11) that

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

**Next Section:**

Computing Reflection Coefficients to Check Filter Stability

**Previous Section:**

Vocoder Analysis