Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

IIR coefficients for peaking EQ, how to pass them to vDSP_deq22?

I have these 6 coefficients for peaking EQ:

b0 = 1 + (α ⋅ A)
b1 = −2⋅ωC
b2 = 1 - (α ⋅ A)
a0 = 1 + (α / A)
a1 = −2 ⋅ ωC
a2 = 1 − (α / A)

With these intermediate variables:

ωc = 2 ⋅ π ⋅ fc / fs
ωS = sin(ωc)
ωC = cos(ωc)
A = sqrt(10^(G/20))
α = ωS / (2Q)

The documentation of vDSP_deq22() states that "5 single-precision inputs, filter coefficients" should be passed but I have 6 coefficients! Also, in what order do I pass them to vDSP_deq22()?

Update (17/05): I recommend everyone to use my DSP class I released on github: https://github.com/bartolsthoorn/NVDSP It'll probably save you quite some work.

like image 849
sougonde Avatar asked Apr 29 '12 19:04

sougonde


1 Answers

A 2nd-order filter can be expressed as the following difference equation (a and b may be interchanged depending on how you've defined them):

a0.y[n] = b0.x[n] + b1.x[n-1] + b2.x[n-2] - a1.y[n-1] - a2.y[n-2]

You can divide through by a0 to get an expression for y[n], and then you only need 5 coefficients.

The documentation I found here specifies the order (see the equation that's given). It looks like the order is:

{ b0/a0, b1/a0, b2/a0, a1/a0, a2/a0 }
like image 146
Oliver Charlesworth Avatar answered Sep 20 '22 04:09

Oliver Charlesworth