Main Content

grpdelay

Average filter delay (group delay)

Description

[gd,w] = grpdelay(b,a,n) returns the n-point group delay response vector gd and the corresponding angular frequency vector w for the digital filter with transfer function coefficients stored in b and a.

example

[gd,w] = grpdelay(sos,n) returns the n-point group delay response corresponding to the second-order sections matrix sos.

example

[gd,w] = grpdelay(d,n) returns the n-point group delay response for the digital filter d.

[gd,w] = grpdelay(___,"whole") returns the group delay at n sample points around the entire unit circle.

[gd,f] = grpdelay(___,n,fs) returns the group delay response vector gd and the corresponding physical frequency vector f for a digital filter designed to filter signals sampled at a rate fs.

[gd,f] = grpdelay(___,n,"whole",fs) returns the frequency vector at n points ranging between 0 and fs.

gd = grpdelay(___,win) returns the group delay response vector gd evaluated at the normalized frequencies supplied in win.

example

gd = grpdelay(___,fin,fs) returns the group delay response vector gd evaluated at the physical frequencies supplied in fin.

example

grpdelay(___) with no output arguments plots the group delay response of the filter.

Examples

collapse all

Design a Butterworth filter of order 6 with normalized 3-dB frequency 0.2π rad/sample. Use grpdelay to display the group delay.

[z,p,k] = butter(6,0.2);
sos = zp2sos(z,p,k);

grpdelay(sos,128)

Figure contains an axes object. The axes object with title Group Delay, xlabel Normalized Frequency ( times pi blank rad/sample), ylabel Group delay (samples) contains an object of type line.

Plot both the group delay and the phase delay of the system on the same figure.

gd = grpdelay(sos,512);

[h,w] = freqz(sos,512);
pd = -unwrap(angle(h))./w;

plot(w/pi,gd,w/pi,pd)
grid
xlabel 'Normalized Frequency (\times\pi rad/sample)'
ylabel 'Group and phase delays'
legend('Group delay','Phase delay')

Figure contains an axes object. The axes object with xlabel Normalized Frequency ( times pi blank rad/sample), ylabel Group and phase delays contains 2 objects of type line. These objects represent Group delay, Phase delay.

Use designfilt to design a sixth-order Butterworth Filter with normalized 3-dB frequency 0.2π rad/sample. Display its group delay response.

d = designfilt('lowpassiir','FilterOrder',6, ...
    'HalfPowerFrequency',0.2,'DesignMethod','butter');
grpdelay(d)

Figure Figure 1: Group delay contains an axes object. The axes object with title Group delay, xlabel Normalized Frequency ( times pi blank rad/sample), ylabel Group delay (in samples) contains an object of type line.

Design an 88th-order FIR filter of arbitrary magnitude response. The filter has two passbands and two stopbands. The lower-frequency passband has twice the gain of the higher-frequency passband. Specify a sample rate of 200 Hz. Visualize the magnitude response and the phase response of the filter from 10 Hz to 78 Hz.

fs = 200;
d = designfilt('arbmagfir', ...
       'FilterOrder',88, ...
       'NumBands',4, ...
       'BandFrequencies1',[0 20], ...
       'BandFrequencies2',[25 40], ...
       'BandFrequencies3',[45 65], ...
       'BandFrequencies4',[70 100], ...
       'BandAmplitudes1',[2 2], ...
       'BandAmplitudes2',[0 0], ...
       'BandAmplitudes3',[1 1], ...
       'BandAmplitudes4',[0 0], ...
       'SampleRate',fs);
freqz(d,10:1/fs:78,fs)

Figure Figure 1: Magnitude Response (dB) and Phase Response contains an axes object. The axes object with title Magnitude Response (dB) and Phase Response, xlabel Frequency (Hz), ylabel Magnitude (dB) contains an object of type line.

Compute and display the group delay response of the filter over the same frequency range. Verify that it is one-half of the filter order.

filtord(d)
ans = 88
grpdelay(d,10:1/fs:78,fs)

Figure Figure 2: Group delay contains an axes object. The axes object with title Group delay, xlabel Frequency (Hz), ylabel Group delay (in samples) contains an object of type line.

Input Arguments

collapse all

Transfer function coefficients, specified as vectors. Express the transfer function in terms of b and a as

H(z)=B(z)A(z)=b1+b2z1+bnz(n1)+bn+1zna1+a2z1+amz(m1)+am+1zm

Example: b = [1 3 3 1]/6 and a = [3 0 1 0]/3 specify a third-order Butterworth filter with normalized 3 dB frequency 0.5π rad/sample.

Data Types: double | single
Complex Number Support: Yes

Number of evaluation points, specified as a positive integer scalar no less than 2. When n is absent, it defaults to 512. For best results, set n to a value greater than the filter order.

Second-order section coefficients, specified as a matrix. sos is a K-by-6 matrix, where the number of sections, K, must be greater than or equal to 2. If the number of sections is less than 2, the function treats the input as a numerator vector. Each row of sos corresponds to the coefficients of a second-order (biquad) filter. The ith row of sos corresponds to [bi(1) bi(2) bi(3) ai(1) ai(2) ai(3)].

Example: s = [2 4 2 6 0 2;3 3 0 6 0 0] specifies a third-order Butterworth filter with normalized 3 dB frequency 0.5π rad/sample.

Data Types: double | single
Complex Number Support: Yes

Digital filter, specified as a digitalFilter object. Use designfilt to generate a digital filter based on frequency-response specifications.

Example: d = designfilt('lowpassiir','FilterOrder',3,'HalfPowerFrequency',0.5) specifies a third-order Butterworth filter with normalized 3 dB frequency 0.5π rad/sample.

Sample rate, specified as a positive scalar. When the unit of time is seconds, fs is expressed in hertz.

Data Types: double

Angular frequencies, specified as a vector and expressed in rad/sample. win must have at least two elements, because otherwise the function interprets it as n. win = π corresponds to the Nyquist frequency.

Frequencies, specified as a vector. fin must have at least two elements, because otherwise the function interprets it as n. When the unit of time is seconds, fin is expressed in hertz.

Data Types: double

Output Arguments

collapse all

Group delay response, returned as a vector. If you specify n, then gd has length n. If you do not specify n, or specify n as the empty vector, then gd has length 512.

If the input to grpdelay is single precision, the function computes the group delay using single-precision arithmetic. The output h is single precision.

Angular frequencies, returned as a vector. w has values ranging from 0 to π. If you specify "whole" in your input, the values in w range from 0 to 2π. If you specify n, w has length n. If you do not specify n, or specify n as the empty vector, then w has length 512.

Frequencies, returned as a vector expressed in hertz. f has values ranging from 0 to fs/2 Hz. If you specify "whole" in your input, the values in f range from 0 to fs Hz. If you specify n, f has length n. If you do not specify n, or specify n as the empty vector, then f has length 512.

More About

collapse all

Group Delay

The group delay response of a filter is a measure of the average delay of the filter as a function of frequency. It is the negative first derivative of the phase response of the filter. If the frequency response of a filter is H(e), then the group delay is

τg(ω)=dθ(ω)dω,

where θ(ω) is the phase, or argument, of H(e).

Extended Capabilities

C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.

Version History

Introduced before R2006a

expand all