Contents

% system functions f and g with l2 scaling of states
% lab5_2.m * mw * 02/23/2007

2nd order system

b = [1 2 1]; a = [1 -1.4 .74];    % numerator and denominator
h = filter(b,a,[1 zeros(1,100)]); % impulse response
b = b / sqrt(sum(h.^2));          % l2 scaling
ssr = ssr_ABCD(b,a,'DF2');        % direct form II

l2 scaling of states

if strcmp(ssr.form,'DF2')     % direct form II
    K = [1+a(3) -a(2); -a(2) 1+a(3)]/((1-a(3))*(1-a(2)+a(3))*(1+a(2)+a(3)));
elseif strcmp(ssr.form,'NF2') % normal form
    p = roots(a); z = p(1);   % poles
    K11 = 1/(1-abs(z)^2) - real(1/(1-z^2)); K12 = - imag(1/(1-z^2));
    K22 = 1/(1-abs(z)^2) + real(1/(1-z^2));
    K = .5*[K11 K12; K12 K22];
else
    fprintf('lab5_2 : no match - ssr.form = %s\n',ssr.form)
end
T = [sqrt(K(1,1)) 0; 0 sqrt(K(2,2))]; T_1 = inv(T);
ssr.A = T_1*ssr.A*T; ssr.B = T_1*ssr(1).B; ssr.C = ssr.C*T;

Quantization

w = 8;                       % word length
ssr = ssr_quant2c(ssr,w);    % quantized coeffizients

Simulation

N1 = 100; N2 = 31;
f = zeros(2,N1); f(:,2) = ssr.B;
g = zeros(2,N1); g(:,2) = ssr.C';
Ap = eye(2);
for n = 3:N1
    Ap = Ap*ssr.A;
    f(:,n) = Ap*ssr.B;
    g(:,n) = (ssr.C*Ap)';
end
% system impulse response
hf = zeros(1,N1);
hg = zeros(1,N1);
for n=1:N1
    hf(n) = ssr.C*f(:,n);
    hg(n) = g(:,n)'*ssr.B;
end
hf(1) = hf(1) + ssr.D;
hg(1) = hg(1) + ssr.D;
h = hf;  % = hg
% energies
Ef1 = sum(f(1,:).^2); Ef2 = sum(f(2,:).^2);
Eg1 = sum(g(1,:).^2); Eg2 = sum(g(2,:).^2);
Eh  = sum(h.^2);
fprintf('\nlab5_2 (%s)\n',ssr.form)
fprintf('Ef1 = %g ,  Eg1 = %g \n',Ef1,Eg1)
fprintf('Ef2 = %g ,  Eg2 = %g \n',Ef2,Eg2)
fprintf('Eh = %g \n',Eh)
lab5_2 (DF2q)
Ef1 = 1.01428 ,  Eg1 = 3.49005 
Ef2 = 1.01428 ,  Eg2 = 6.32687 
Eh = 1.01637 

Graphics - Impulse responses

FIG1 = figure('Name',['lab5_2 : f and g (',ssr.form,')'],...
    'NumberTitle','off','Units','normal','Position',[.3 .3 .65 .55]);
subplot(2,2,1),stem(0:N2-1,f(1,1:N2),'filled')
axis([0 N2 -2 2]); grid;
xlabel('n \rightarrow'), ylabel('f_1[n] \rightarrow')
title('Partial impulse response')
subplot(2,2,3),stem(0:N2-1,f(2,1:N2),'filled')
axis([0 N2 -2 2]); grid;
xlabel('n \rightarrow'), ylabel('f_2[n] \rightarrow')
title('Partial impulse response')
subplot(2,2,2),stem(0:N2-1,g(1,1:N2),'filled')
axis([0 N2 -2 2]); grid;
xlabel('n \rightarrow'), ylabel('g_1[n] \rightarrow')
title('Partial impulse response')
subplot(2,2,4),stem(0:N2-1,g(2,1:N2),'filled')
axis([0 N2 -2 2]); grid;
xlabel('n \rightarrow'), ylabel('g_2[n] \rightarrow')
title('Partial impulse response')
FIG2 = figure('Name',['lab5_2 : Impulse response - ',ssr.form],...
    'NumberTitle','off','Units','normal','Position',[.3 .3 .65 .55]);
stem(0:N2-1,hf(1:N2),'filled')
axis([0 N2 -1 1]); grid;
xlabel('n \rightarrow'), ylabel('h[n] \rightarrow')
title('Impulse response')