Filter delay demo

Illustratation of delay induced by an LTI system.

Contents

Start

clear
% close all

Define system

The system is defined by the difference equation

y(n) = 0.1 x(n) - 0.1 x(n-1) + 0.1 x(n-2) + 1.5 y(n-1) - 0.8 * y(n-2)

b = 0.1*[1 -1  1];

a = [1 -1.5 0.8];

Plot frequency response

Use the 'freqz' function to calculate the frequency response.

[H, om] = freqz(b,a);
f = om / (2*pi);

figure(1)
clf

subplot(2, 1, 1)
plot(f, abs(H))
title('Frequency response magnitude')
xlabel('Frequency')

subplot(2, 1, 2)
plot(f, angle(H))
title('Frequency response phase')
xlabel('Frequency')

Create sinusoid

Create a sinusoid with a specified frequency

L = 100;
n = 0:L;

om1 = 0.15*pi;      % Frequency of sinusoid radians/sample
f1 = om1 / (2*pi);  % Frequency in cycles/sample

x = cos(om1*n);     % Cosine signal

figure(1)
clf
subplot(2,1,1)
plot(n, x)
title('Signal')
ylim([-1.5 1.5])

Output signal

Comput output signal. Plot input and output signals on the same plot. Notice the output signal is delayed with respect to the input signal. How many samples is the input signal delayed?

y = filter(b, a, x);    % Output signal

figure(1)
clf
subplot(2, 1, 1)
plot(n, x, n, y, '--')
legend('Input signal', 'Output signal')
ylim([-1.5 1.5])

Frequency response value at om1

The value H(om1) of the frequency response at om1 is a complex number.

I = sqrt(-1);
z1 = exp(I*om1);
d = length(b) - length(a);
H_om1 = 1/z1^d * polyval(b, z1) / polyval(a, z1)    % Value of frequency response at om1
H_om1 =

   0.4268 - 0.3733i

Magnitude at om1

H(om1)

A = abs(H_om1)
A =

    0.5670

Phase at om1

The angle of H(om1) will tell us the delay..

theta = angle(H_om1)
theta =

   -0.7186

Show magnitude and phase on frequency response plot

figure(1)
clf

subplot(2, 1, 1)
plot(f, abs(H), f1, A, 'o')
title('Frequency response magnitude')
xlabel('Frequency')

subplot(2, 1, 2)
plot(f, angle(H), f1, theta, 'o')
title('Frequency response phase')
xlabel('Frequency')

Delay (in samples) at om1

Compute the signal delay in samples

M = -angle(H_om1)/om1      % Delay in samples

fprintf('The delay is %.2f samples\n', M)
M =

    1.5250

The delay is 1.52 samples

Verify delay property

Plot the input and output signal together, where the input signal is delayed by M samples and multiplied by A. Observed that the output signal y(n) is in phase with the delayed input signal A x(n-M).

figure(1)
clf
subplot(2, 1, 1)
plot(n + M, A*x, n, y)
xlim([0 L])
legend('A x(n-M)', 'y(n)')
title( sprintf('A = %.2f, M = %.2f', A, M) )

Plot phase delay function

Show delay M on plot of phase delay function.

figure(1)
clf
plot(f, -angle( H )./om, f1, M, '.', 'markersize', 20)
title('Phase delay')
ylabel('Samples')
xlabel('Frequency')