# Coefficient Scaling of IIR filter to obtain unity gain response

I am designing a 2nd order IIR digital filter :

My tf equation with coefficients is

b = [0 1.209e09]
a= [9.2175   -2.6952    1.0000]
sys=tf(b,a,0.1,'Variable','z^-1')
bode(sys)


I have couple of questions :

1. How to get unity scaling .. as a formula... so that i can always multiply it with the 'sys' tf.
2. I usually seen that coefficients are less than 1 , is there a way i can make them so ?
3. My coefficients are calculated from some adaptive filter optimization algorithm, so they keep on changing, is there a way i can reduce the filter to filter coefficients changes to a a minimum.?

It's important to specify at which frequency you want unity gain. But assuming you mean DC ($$\omega=0$$), because that filter has a low pass characteristic, the DC gain of an IIR filter is given by

$$G_{DC}=\frac{\sum_kb[k]}{\sum_ka[k]}\tag{1}$$

It's also common to normalize the denominator coefficients such that $$a[0]=1$$. In your example that would give

a = [1.00000 -0.29240 0.10849]

and

b = [0.00000 131163547.59967]

Finally, normalizing by the DC gain $$(1)$$ will give you a filter with unity gain at DC. This leaves the denominator coefficients unchanged, and the new normalized numerator coefficients are given by

b = [0.00000 0.81609]

• Thankyou so much :) – BandW Jun 23 '20 at 9:01
b = [0 1.209e09]
a= [9.2175   -2.6952    1.0000]

% original -----------------------
sys = tf(b,a,0.1,'Variable','z^-1');

% fixes --------------------------
sys=sys/dcgain(sys);

% scale coefficients by b(2)
sys1=tf(b/b(2),a/b(2),0.1,'Variable','z^-1')
sys1=sys1/dcgain(sys1);

bode(sys,'-', sys1,'--')


Which results:

Transfer function 'sys' from input 'u1' to output ...

           1.209e+09 z^-2
y1:  -------------------------
9.217 - 2.695 z^-1 + z^-2


Transfer function 'sys1' from input 'u1' to output ...

                         z^-2
y1:  -------------------------------------------
7.624e-09 - 2.229e-09 z^-1 + 8.271e-10 z^-2

• can you please write the code how you did it... how did you get y1 ? also now we very small coefcients.. is that correct ?.. also pole (z-2) is not 1 anymore – BandW Jun 22 '20 at 15:00
• Updated the code. Hope it helps.... . – Juha P Jun 22 '20 at 17:05
• Thankyou so much :) – BandW Jun 23 '20 at 9:01