Page 220 - DSP Integrated Circuits
P. 220
5.5 Scaling of Signal Levels 205
program IIR_filter_scaling;
const
aOl = 1; all = 2; a21 = 1; bll = 1.49139; b21 = 0.8997958;
a02 = l; a!2 = 1.006442; a22 = 1; b!2 = 1.305644; b22 = 0.9595307;
a03 = 1; a!3 = 1.890926; a23 = 1; b!3 = 1.617856; b23 = 0.9617549;
a04=l; a!4 = 2; a24 = 1; b!4 = 1.357826; b24 = 0.8956455;
var
x, y, F3two, F5two, F7two, Fytwo : Double;
v, u : array[1..10] of Double;
i: integer;
begin
F3two := 0; F5two := 0; F7two := 0; Fytwo := 0;
for i := 1 to 10 do
begin
v[i] := 0;{ zero all delay elements }
u[i] := 0;
end;
x := 1; (* The input is an impulse sequence*)
for i := 0 to 500 do {The significant part of the impulse response}
begin {is assumed to be shorter than 500 samples }
{Difference equations }
u[3] := aOl * x + all * v[l] + a21 * v[2] + bll * v[3] + b21 * v[4];
u[5] := a02 * u[3] + a!2 * v[3] + a22 * v[4] + b!2 * v[5] + b22 * v[6];
u[7] := a03 * u[5] + a!3 * v[5] + a23 * v[6] + b!3 * v[7] + b23 * v[8];
u[9] := a04 * u[7] + a!4 * v[7] + a24 * v[8] + b!4 * v[9] + b24 * v[10];
v[2] := v[l];' {Update the delay elements }
v[l] := x;
v[4] := v[3];
v[3]:= u[3];
v[6] := v[5];
v[5]:= u[5];
v[8] := v[7];
v[7] := u[7];
v[10] := v[9];
v[9] := u[9];
x := 0; { Reset x after the first sample to get an impulse sequence }
F3two := FStwo + u[3] * u[3]; { Calculate the squared L 2-norms }
FStwo := F5two + u[5] * u[5];{ for the critical nodes }
F7two := F7two + u[7] * u[7];
Fytwo := Fytwo + u[9] * u[9];
end;
writeln(sqrt(F3two), sqrt(F5two), sqrt(F7two), sqrt(Fytwo): 10 : 6);
end.
Box 5.1 Program for scaling signal levels in the filter in Example 4.5
Next, coefficients 002? ai2> an d «22 are scaled by dividing by || F$ \\2/\\ FQ \\2 =
5.560767/1.892948 = 2.937622. The scaled coefficients are