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

…衆ロ難τιáo~ 提交于 2019-11-29 19:53:01

问题


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.


回答1:


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 }


来源:https://stackoverflow.com/questions/10375359/iir-coefficients-for-peaking-eq-how-to-pass-them-to-vdsp-deq22

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!