Implementation of Zoelzer's parametric equalizer filters, with some modifications by the author.
The formula for the low shelf filter is:
omega = 2*pi*f/sr
K = tan(omega/2)
b0 = 1 + sqrt(2*V)*K + V*K^2
b1 = 2*(V*K^2 - 1)
b2 = 1 - sqrt(2*V)*K + V*K^2
a0 = 1 + K/Q + K^2
a1 = 2*(K^2 - 1)
a2 = 1 - K/Q + K^2
The formula for the high shelf filter is:
omega = 2*pi*f/sr
K = tan((pi-omega)/2)
b0 = 1 + sqrt(2*V)*K + V*K^2
b1 = -2*(V*K^2 - 1)
b1 = 1 - sqrt(2*V)*K + V*K^2
a0 = 1 + K/Q + K^2
a1 = -2*(K^2 - 1)
a2 = 1 - K/Q + K^2
The formula for the peaking filter is:
omega = 2*pi*f/sr
K = tan(omega/2)
b0 = 1 + V*K/2 + K^2
b1 = 2*(K^2 - 1)
b2 = 1 - V*K/2 + K^2
a0 = 1 + K/Q + K^2
a1 = 2*(K^2 - 1)
a2 = 1 - K/Q + K^2
imode (optional, default: 0) -- operating mode
0 = Peaking
1 = Low Shelving
2 = High Shelving
kc -- center frequency in peaking mode, corner frequency in shelving mode.
kv -- amount of boost or cut. A value less than 1 is a cut. A value greater than 1 is a boost. A value of 1 is a flat response.
kq -- Q of the filter (sqrt(.5) is no resonance)
asig -- the incoming signal
Here is an example of the pareq opcode. It uses the files pareq.orc and pareq.sco.
Example 1. Example of the pareq opcode.
/* pareq.orc */
sr = 44100
kr = 4410
ksmps = 10
nchnls = 2
instr 15
ifc = p4 ; Center / Shelf
kq = p5 ; Quality factor sqrt(.5) is no resonance
kv = ampdb(p6) ; Volume Boost/Cut
imode = p7 ; Mode 0=Peaking EQ, 1=Low Shelf, 2=High Shelf
kfc linseg ifc*2, p3, ifc/2
asig rand 5000 ; Random number source for testing
aout pareq asig, kfc, kv, kq, imode ; Parmetric equalization
outs aout, aout ; Output the results
endin
/* pareq.orc */
/* pareq.sco */
; SCORE:
; Sta Dur Fcenter Q Boost/Cut(dB) Mode
i15 0 1 10000 .2 12 1
i15 + . 5000 .2 12 1
i15 . . 1000 .707 -12 2
i15 . . 5000 .1 -12 0
e
/* pareq.sco */