#### Bluebirdglory

##### Newbie level 1

**lpf hpf**

Hi everybody,

Im a Software Engineering student and im supposed to make a Parametric Equlizer which can plot the graph of Peaking filter and LPF and HPF. by now i could have get plot the peaking filter by using the coefficients a0,a1,a2,b0,b1,b2 (biquad) and then finding the magnitude response directly, i have coded it in VB which l will attach it at the end, but now the problem is , when i want to do the same thing for LPF and HPF (using the corespondant values ) i just can have the curve for 1st and 2nd order, but i need to plot the 3rd and 4th order as well. any ne know how can i solve it ?

b0 = 1.0

b1 = 0.0

b2 = 0.0

a0 = 1.0

a1 = 0.0

a2 = 0.0

GainDb = inputG

F0 = inputF

myQ = inputQ

gain = 10 ^ (Abs(GainDb) * 0.05)

Fs = 48000

order = inputQ / 6

w0 = Tan(PI * F0 / Fs)

iden = 0.0

w2 = w0 * w0

myQ = myQ * (PI * F0 / Fs) / w0

If TrackGain.Enabled Then 'for peak EQ

If GainDb <= 0.0 Then

iden = 1.0 / (1.0 + (1.0 / myQ * w0) + w2)

b2 = iden * (1.0 - (gain / myQ * w0) + w2)

b1 = iden * 2.0 * (w2 - 1.0)

b0 = iden * (1.0 + gain / myQ * w0 + w2)

a2 = iden * (1.0 - (1.0 / myQ * w0) + w2)

a1 = iden * 2.0 * (w2 - 1.0)

Else

iden = 1.0 / (1.0 + (gain / myQ * w0) + w2)

b2 = iden * (1.0 - (1.0 / myQ * w0) + w2)

b1 = iden * 2.0 * (w2 - 1.0)

b0 = iden * (1.0 + (1.0 / myQ * w0) + w2)

a2 = iden * (1.0 - (gain / myQ * w0) + w2)

a1 = iden * 2.0 * (w2 - 1.0)

End If

a0 = 1.0

peakCalcPlot()

Else ' for LPF and HPF '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

If order <> 2 Then

iden = 1.0 / (w0 + 1.0)

If isHPF Then

y1(1) = iden

y1(0) = -iden

x1(1) = iden * (w0 - 1.0)

Else

y1(1) = iden * w0

y1(0) = y1(1)

x1(1) = iden * (w0 - 1.0)

End If

x1(0) = 1.0

End If

If order >= 2 Then

If (order = 2) Then

iden = 1.0 / (1.0 + 1.4142135623731 * w0 + w2)

x2(2) = iden * (1.0 - 1.41421354F * w0 + w2) ' /* Q=1/sqrt(2) */

Else

iden = 1.0 / (1.0 + 1.0 * w0 + w2) '/* Q=1 */

x2(2) = iden * (1 - 1 * w0 + w2)

End If

x2(1) = iden * 2.0 * (w2 - 1.0)

x2(0) = 1.0

If isHPF Then

y2(2) = iden

y2(1) = iden * (-2)

y2(0) = iden

Else

y2(2) = iden * w2

y2(1) = iden * 2.0 * w2

y2(0) = iden * w2

End If

End If

b0 = 1.0

b1 = 0.0

b2 = 0.0

'b3 = 0.0

a0 = 1.0

a1 = 0.0

a2 = 0.0

If order = 1 Then

b0 = y1(0)

b1 = y1(1)

b2 = 0

'b3 = 0

a0 = 1

a1 = x1(1)

a2 = 0

ElseIf order = 2 Then

b0 = y2(0)

b1 = y2(1)

b2 = y2(2)

'b(3) = 0

a0 = 1

a1 = x2(1)

a2 = x2(2)

ElseIf order = 3 Then

b0 = y1(0) * y2(0)

b1 = y1(0) * y2(1) + y1(1) * y2(0)

b2 = y1(0) * y2(2) + y1(1) * y2(1)

a0 = 1

a1 = x1(1) + x2(1)

a2 = x2(2) + x1(1) * x2(1)

Else

b0 = y1(0) * y2(0)

b1 = y1(0) * y2(1) + y1(1) * y2(0)

b2 = y1(0) * y2(2) + y1(1) * y2(1)

a0 = 1

a1 = x1(1) + x2(1)

a2 = x2(2) + x1(1) * x2(1)

End If

LPHPCalcPlot()

End If

End Sub

Private Sub peakCalcPlot()

'Calculate the curve values

For i As Integer = 0 To Graph(myKey).ptsArray.Length - 1

iExp = (10 * (10 ^ ((i + first20) / (gWidth / 3.0))))

yAxisValue = 0.0

omega = 2 * PI * iExp / Fs

cosW0 = Cos(omega)

cos2W0 = Cos(2.0 * omega)

num = (b0 ^ 2) + (b1 ^ 2) + (b2 ^ 2) + (2.0 * cosW0 * ((b0 * b1) + (b1 * b2))) + (2.0 * cos2W0 * b0 * b2)

den = 1.0 + (a1 ^ 2) + (a2 ^ 2) + (2.0 * cosW0 * (a1 + (a1 * a2))) + (2.0 * cos2W0 * a2)

yAxisValue = (Abs(num / den))

Graph(myKey).ptsArray(i).X = i

Graph(myKey).ptsArray(i).Y = 3 * (10 * Log10((yAxisValue))) + gHeightCenter

Next i

End Sub

actually i useed the following formulas to calculate a0.....b2 since the standard formulas didn work for me i used to got the formulas from :

LPF: H(s) = 1 / (s^2 + s/Q + 1)

b0 = (1 - cos(w0))/2

b1 = 1 - cos(w0)

b2 = (1 - cos(w0))/2

a0 = 1 + alpha

a1 = -2*cos(w0)

a2 = 1 - alpha

HPF: H(s) = s^2 / (s^2 + s/Q + 1)

b0 = (1 + cos(w0))/2

b1 = -(1 + cos(w0))

b2 = (1 + cos(w0))/2

a0 = 1 + alpha

a1 = -2*cos(w0)

a2 = 1 - alpha

but i dono why these formulas dosen work ,,, and also i think if i want to have 3rd and 4th order i need the value of a3,a4,b3,b4 as well, am i correct?