Inverse system example
Given h, find g such that conv(h, g) = impulse
Contents
Start
clear close all set(0, 'DefaultLineMarkerSize', 5) set(0, 'DefaultLineMarkerFaceColor', 'black') u = @(n) (n >= 0); del = @(n) (n == 0);
Impulse response h
n = -10:10;
h = del(n) + 4 * del(n-1) + 2 * del(n-2);
stem(n, h)
title('h')
Poles of H(z)
roots([1 4 2])
ans = -3.4142 -0.5858
Partial fraction expansion
[r, p, k] = residue([1 0],[1 4 2])
r = 1.2071 -0.2071 p = -3.4142 -0.5858 k = []
Causal impulse response g
This impulse response is causal but not stable! Note that the vertical axis goes up to 10^5
g = r(1) * p(1).^n .* u(n) + r(2) * p(2).^n .* u(n);
stem(n, g);
title('Causal impulse response')
Stable impulse response g
This impulse response is stable but not causal
g = -r(1) * p(1).^n .* u(-n-1) + r(2) * p(2).^n .* u(n);
stem(n, g)
title('Stable impulse response')
Verify the inverse system
Verify that the convolution of h and g is the impulse function
f = conv(h, g); stem(f) % In the plot, the impulse is at the wrong location. % We need to specify the time axis. % stem(n, f) causes an error because f is longer than n
This validates the correctness of g
stem(-20:20, f) % be aware of time axis when performing convolution title('conv(h, g)')
Example
x = 1.2*u(n) - 1.2*u(n-5);
subplot(3, 1, 1)
stem(n, x)
title('Input signal : x')
Compute the output of H
r = conv(h, x);
subplot(3, 1, 2)
stem(-20:20, r)
xlim([-10 10])
title('Received signal : r = conv(h, x)')
Compute the output of G
Observe that the output of G is the same as the input to H
y = conv(g, r);
subplot(3, 1, 3)
stem(-30:30, y)
xlim([-10 10])
title('Output signal : y = conv(g, r)')
set(0, 'DefaultLineMarkerSize', 'remove') set(0, 'DefaultLineMarkerFaceColor', 'remove')