Contents

% scaled and quantized of 2nd order sections in normal form
% lab3_6.m * mw * 02/14/2007

Scaling with respect to the frequency response

N = 1024;
[H1,w] = freqz(SOS(1,1:3),SOS(1,4:6),N); % frequency responses
[H2,w] = freqz(SOS(2,1:3),SOS(2,4:6),N);
[H3,w] = freqz(SOS(3,1:3),SOS(3,4:6),N);
MAX1 = max(abs(H1));                     % scaling factors
MAX2 = max(abs(H2.*H1/MAX1));
MAX3 = max(abs(H3.*(H2/MAX2).*(H1/MAX1)));
SOSs =SOS;
SOSs(1,1:3) = SOSs(1,1:3)/MAX1;
SOSs(2,1:3) = SOSs(2,1:3)/MAX2;
SOSs(3,1:3) = SOSs(3,1:3)/MAX3;
fprintf('scaling factors for section 1, 2 and 3 : %g  , %g  , %g\n',1/MAX1,1/MAX2,1/MAX3)
scaling factors for section 1, 2 and 3 : 0.0271663  , 0.229457  , 0.508501

Normal form with quantized coefficients

w = 8; LSB = 2^-(w-1); % word length and least signifcant bit
Form = 'NF2';
for k=1:3
    ssrq(k) = ssr_ABCD(SOSs(k,1:3),SOSs(k,4:6),Form);
    ssrq(k).A = LSB*round(ssrq(k).A/LSB);
    ssrq(k).C = LSB*round(ssrq(k).C/LSB);
    ssrq(k).D = LSB*round(ssrq(k).D/LSB);
end
disp('Matrices A')
disp([ssrq(1).A, ssrq(2).A, ssrq(3).A])
disp('Vectors B')
disp([ssrq(1).B, ssrq(2).B, ssrq(3).B])
disp('Vectors C')
disp([ssrq(1).C, ssrq(2).C, ssrq(3).C])
disp('Skalars D')
disp([ssrq(1).D, ssrq(2).D, ssrq(3).D])
Matrices A
    0.7891   -0.1719    0.7734   -0.4375    0.7813   -0.5703
    0.1719    0.7891    0.4375    0.7734    0.5703    0.7813

Vectors B
     0     0     0
     1     1     1

Vectors C
   -0.3438    0.0625   -0.3438    0.1328   -0.2422    0.1406

Skalars D
    0.0234    0.2266    0.5078

Impulse responses

x = [1 zeros(1,2*N-1)];
hq = zeros(3,2*N); Hq = zeros(3,2*N);
for k=1:3
    [hq(k,:),S] = ssr_filter(ssrq(k),x);   % filtering
    Hq(k,:) = fft(hq(k,:));
end
Hq = Hq(:,1:N);
[b,a] = sos2tf(SOS,G);
[H,w] = freqz(b,a,N);

Graphics - Frequency responses

FIG1 = figure('Name','lab3_6 : Frequency responses of cauer lowpass and qunatized system',...
    'NumberTitle','off');
subplot(1,2,1),plot(w/pi,abs(H),w/pi,abs(Hq(1,:).*Hq(2,:).*Hq(3,:))), grid
xlabel('\Omega / \pi \rightarrow'), ylabel('|H(e^{j\Omega)}| \rightarrow')
axis([0 1 0 1]);
subplot(1,2,2),plot(w/pi,20*log10(abs(H)),w/pi,20*log10(abs(Hq(1,:).*Hq(2,:).*Hq(3,:)))), grid
xlabel('\Omega / \pi \rightarrow'), ylabel('|H(e^{j\Omega})| in dB \rightarrow')
axis([0 1 -80 0]);
FIG2 = figure('Name','lab3_6 : Frequency responses of quantized 2nd order blocks ',...
    'NumberTitle','off');
subplot(3,2,1),plot(w/pi,abs(H1/MAX1),w/pi,abs(Hq(1,:))), grid
xlabel('\Omega / \pi \rightarrow'), ylabel('|H_1(e^{j\Omega)}| \rightarrow')
subplot(3,2,2),plot(w/pi,20*log10(abs(H1/MAX1)),w/pi,20*log10(abs(Hq(1,:)))), grid
xlabel('\Omega / \pi \rightarrow'), ylabel('|H_1(e^{j\Omega})| in dB \rightarrow')
subplot(3,2,3),plot(w/pi,abs(H2/MAX2),w/pi,abs(Hq(2,:))), grid
xlabel('\Omega / \pi \rightarrow'), ylabel('|H_2(e^{j\Omega)}| \rightarrow')
subplot(3,2,4),plot(w/pi,20*log10(abs(H2/MAX2)),w/pi,20*log10(abs(Hq(2,:)))), grid
xlabel('\Omega / \pi \rightarrow'), ylabel('|H_2(e^{j\Omega})| in dB \rightarrow')
subplot(3,2,5),plot(w/pi,abs(H3/MAX3),w/pi,abs(Hq(3,:))), grid
xlabel('\Omega / \pi \rightarrow'), ylabel('|H_3(e^{j\Omega)}| \rightarrow')
subplot(3,2,6),plot(w/pi,20*log10(abs(H3/MAX3)),w/pi,20*log10(abs(Hq(3,:)))), grid
xlabel('\Omega / \pi \rightarrow'), ylabel('|H_3(e^{j\Omega})| in dB \rightarrow')