Impulse Response due to Real and Complex Poles | Matlab

Time Response due to Distinct Poles

In addition to computing the time response of the output, we can use MATLAB to evaluate and display the time response due to an individual real pole or to a pair of complex poles. Recall that a real pole at s = p with residue r will result in the time function

$y(t)=r{{e}^{pt}} $  for t>0.

 If a pole is complex, say at s1=σ+jω, then its complex conjugate s2=σ+jω will also be a pole. The residue at s1 will be a complex number, say ${{r}_{1}}=K{{e}^{j\phi }}$, and the residue at s2 will be the complex conjugate of r1, namely, ${{r}_{2}}=K{{e}^{-j\phi }}$. It can be shown that for t>0 the time response due to this pair of complex poles is

$y(t)=2K{{e}^{\sigma t}}\cos (\omega t+\phi )$

To simplify the calculation of these responses, we have created two functions designated as named rpole2t and cpole2t. The former has as its arguments the value of the real pole, its residue, and a time vector. The function returns a column vector of time response values, one per time point. The latter function has the value of the complex pole with the positive imaginary part as its first argument, the residue at this pole as the second argument, and a time vector as the final argument.

Impulse Response due to Real and Complex Poles Matlab Example

Use the poles and residues of the transfer function G(s) to display the components of g(t) due to the real pole at s = -0.2408 and the complex poles at s = -0.8796 1± j1.1414. Verify that the sum of these two responses equals the impulse response shown in tutorial 2.

\[\begin{matrix}   G(s)=\frac{3s+2}{2{{s}^{3}}+4{{s}^{2}}+5s+1} & \cdots  & (1)  \\\end{matrix}\]

We can write the partial-fraction expansion of the transfer function as

\[\begin{matrix}   G(s)=\frac{0.3734}{s+0.2408}+\frac{-0.1867-j0.5526}{s+0.8796-j1.1414}+\frac{-0.1867+j0.5526}{s+0.8796+j1.1414} & \cdots  & (2)  \\\end{matrix}\]

Solution

Referring to Table 1 in tutorial 2,

Table.1: Poles and residues of G(s)

Pole Residue
-0.2408 0.3734
-0.8796 +j1.1414 -0.1867 -j0.5526
-0.8796 -j1.1414 -0.1867 + j0.5526

 We use the function rpole2t with the pole s = -0.2408 and the residue r = 0.3734 to obtain the response due to the one real pole of G(s). The resulting time function is the inverse Laplace transform of the first term of G(s). For the other two terms in (2), which result from the complex poles, we use the pole having the positive imaginary part, namely s = -0.8796 + j 1.1414 and its residue r = -0.1867 – j0.5526. The MATLAB instructions that will accomplish these steps and plot the responses are shown in Script 3, and the resulting responses are shown in Figure 1.

Matlab Code for Calculating Impulse Response


% Script 3: Impuse Response due to rel and complex poles

clear all;close all;clc

numG = [3 2]; denG = [2 4 5 1]; % create G(s) as ratio of polys

[resG,polG,otherG] = residue(numG,denG) % residues & poles of G(s)from equation (1)

t = [0:0.1:20]; % column vector of time points

ycmplx = cpole2t(polG(1),resG(1),t); % response due to complex pole

yreal = rpole2t(polG(3),resG(3),t); % response due to real pole

ytot = ycmplx + yreal; % y(t) is sum of the two

plot(t,ytot,t,ycmplx,t,yreal,'--') % plot the three curves

Function rpole2t


function y_out = rpole2t(real_p,residue,time)
% This function computes Inverse Laplace Transformation
%for a real pole in order to generatea time function
%Inputs for this function are:
%real_p - real pole
% residue - residue at the real pole
% time - a time vector
% That's how we compute the response as
 % y(t) = residue * exp(real_p*t) 
y_out = 0*time;
for t=1:length(time),
 y_out(t) = residue*exp(real_p*time(t));
end
y_out = real(y_out);
%%%%%%%%%%

Function cpole2t

function y_out = cpole2t(comp_p,residue,time)
% This function computes Inverse Laplace Transformation
%for two complex conjugate poles in order to generate a time function
% 
%Inputs for this function are:
%comp_p - complex poles with Positive Imaginary Parts
% residue - residue at the complex pole
% time - a time vector
%Output: 
%y_out - indicates time response vector as an output
% 
% That's how we compute the response 
% y(t) = 2*K*exp(m*t)*cos(Omega*t + phii)
% where residue = K*exp(j*phii), comp_p = m + j*Omega

m = real(comp_p); % Pole zero component
Omega = imag(comp_p); % Pole imaginary component
K = abs(residue); % to compute absolute value
phii = angle(residue); % to compute angle phii
y_out = 0*time;
for t=1:length(time),
 y_out(t) = 2*K*exp(m*time(t))*cos(Omega*time(t)+phii);
end
y_out = real(y_out);
%%%%%%%%%%

Result

Impulse Response due to Real and Complex Poles using Matlab Transfer Function

Fig.1: Impulse Response for Real and Complex Poles

So, from the graph, it’s evident that the “Total Response” here is the same as we obtained in tutorial 2.