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
   215   216   217   218   219   220   221   222   223   224   225