Contents

% 2nd order filter in parallel form
% lab2_2.m * mw * 01/06/2007

State-space representation

z = [-j j]; p = [.5 -.25];  % zeros and poles of 2nd order filter
[A,B,C,D] = zp2ss(z,p,1);   % state-space representation (MATLAB)
ssr = struct('A',A,'B',B,'C',C,'D',D,'S',[0;0],'form','zp2ss');

Filtering

N = 50;                     % number of simulation cycles = N + 1
x = [1 zeros(1,N)];         % input signal (impulse)
[y,S] = ssr_filter(ssr,x);  % filtering

Transform to diagonal form (parallel form)

[V,lambda] = eig(A);                % eigenvectors, eigenvalues
V = [V(:,1)/V(1,1) V(:,2)/V(1,2)];  % normalized representation
M = V;             % modal matrix
M_1 = inv(M);      % inverse of modal matrix
L = M_1*A*M;       % diagonal form
ssr(2).A = L;      % matrix A in diagonal form
ssr(2).B = M_1*B;  % vector b
ssr(2).C = C*M;    % vector cT
ssr(2).D = D;      % scalar d
ssr(2).S = [0;0];  % initialize state variables
ssr(2).form = 'diagonal';
[yd,S] = ssr_filter(ssr(2),x);   % filtering

Compare impulse responses

fprintf('\n')
fprintf('lab2_2 : Impulse responses of 2nd order systems\n')
fprintf(' n       y[n]           yd[n] \n')
for n=1:10
    fprintf('%2i  :  %-1.5e   %-1.5e \n',n,y(n),yd(n))
end
lab2_2 : Impulse responses of 2nd order systems
 n       y[n]           yd[n] 
 1  :  1.00000e+000   1.00000e+000 
 2  :  2.50000e-001   2.50000e-001 
 3  :  1.18750e+000   1.18750e+000 
 4  :  3.28125e-001   3.28125e-001 
 5  :  2.30469e-001   2.30469e-001 
 6  :  9.86328e-002   9.86328e-002 
 7  :  5.34668e-002   5.34668e-002 
 8  :  2.56958e-002   2.56958e-002 
 9  :  1.31073e-002   1.31073e-002 
10  :  6.48880e-003   6.48880e-003