Computing the impulse response of a system with complex poles (Example 1)
This example shows three different ways to compute the impulse response.
Contents
Define system coefficients
Difference equation: y(n) = x(n) - 2.5 x(n-1) + y(n-1) - 0.7 y(n-2)
b = [1 -2.5]; a = [1 -1 0.7];
Compute impulse response directly from different equation
Use the MATLAB function 'filter' to compute the impulse response
u = @(n) n >= 0; % step signal del = @(n) n == 0; % impulse signal n = -10:30; x = del(n); % impulse h1 = filter(b, a, x); % impulse response figure(1) clf stem(n, h1, 'filled'); title('Impulse response computed using difference equation')
Compute impulse response using partial fraction expansion
Use MATLAB function 'residue' to find the poles and residues.
[r, p, k] = residue(b,a) % r = % 0.5000 + 1.4907i % 0.5000 - 1.4907i % % p = % 0.5000 + 0.6708i % 0.5000 - 0.6708i % % k = % [] h2 = r(1)*p(1).^n .* u(n) + r(2)*p(2).^n .* u(n); figure(1) clf stem(n, h2, 'filled') title('Impulse response computed using partial fraction expansion')
r = 0.5000 + 1.4907i 0.5000 - 1.4907i p = 0.5000 + 0.6708i 0.5000 - 0.6708i k = []
Verify that h2 is the same as h1
max(abs(h1 - h2))
% This is zero to machine precision
ans = 8.8818e-16
Compute impulse response using cosine formula
R = abs(r(1)); theta = angle(r(1)); a = abs(p(1)); om = angle(p(1)); h3 = 2 * R * a.^n .* cos(om * n + theta) .* u(n); figure(1) clf stem(n, h3, 'filled') title('Impulse response computing using cosine formula')
Verify that h3 is the same as h1
max(abs(h1 - h3))
% This is zero to machine precision
ans = 9.8532e-16
Plot all
figure(2) clf subplot(3, 1, 1) stem(n, h1, 'filled') title('Impulse response computed using difference equation') subplot(3, 1, 2) stem(n, h2, 'filled') title('Impulse response computed using partial fraction expansion') subplot(3, 1, 3) stem(n, h3, 'filled') title('Impulse response computing using cosine formula') orient tall print -dpdf ComplexPoles_1