EQ, Biquad

Download

     Disclaimer...

23   desc:EQ, Biquad, v1.0.1
24  
25   slider1:0<0,7,1{Low-Pass,High-Pass,Bandpass,Notch,All-Pass,Peak,Low-Shelf,High-Shelf}>Type
26   slider2:0<-18,18,0.1>Boost/Cut
27   slider3:1000<20,20000,1>Frequency
28   slider4:2<.25,10,0.1>Q
29   slider5:0<-20,12,0.1>Output Gain
30  
31  
32   @init
33   a0=1;
34   a1=-1.66365511325602; // LUFS 44k prefileter
35   a2=0.71259542807323;
36   b0=1.53084123005035;
37   b1=-2.65097999515473;
38   b2=1.16907907992159;
39  
40   x=0;
41   x1=0;
42   x2=0;
43   y=0;
44   y1=0;
45   y2=0;
46  
47   mFreq = 1000.0;
48   mType = 0;
49   mBoost = 0.0;
50   mSR = srate;
51   mBW = 2.0;
52   mGain = 0.0;
53  
54  
55   @slider
56   mType = slider1;
57   mBoost = slider2;
58   mFreq = slider3;
59   mQ = slider4;
60   mGain = slider5;
61   gain = pow( 10.0, mGain / 20.0 );
62  
63   A = sqrt( pow( 10.0, mBoost / 20.0 ));
64   omega = 2.0 * $pi * mFreq / mSR;
65   sn = sin( omega );
66   cs = cos( omega );
67   alpha = sn / ( 2 * mQ );
68   beta = sqrt(A) / mQ;
69  
70   // LPF
71   mType == 0 ? (
72   b0 = (1 - cs) / 2.0;
73   b1 = 1 - cs;
74   b2 = (1 - cs) / 2.0;
75   a0 = 1 + alpha;
76   a1 = -2 * cs;
77   a2 = 1 - alpha;
78   );
79  
80   // HPF
81   mType == 1 ? (
82   b0 = (1 + cs) / 2.0;
83   b1 = -(1 + cs);
84   b2 = (1 + cs) / 2.0;
85   a0 = 1 + alpha;
86   a1 = -2 * cs;
87   a2 = 1 - alpha;
88   );
89  
90   // BP
91   mType == 2 ? (
92   b0 = alpha;
93   b1 = 0;
94   b2 = -alpha;
95   a0 = 1 + alpha;
96   a1 = -2 * cs;
97   a2 = 1 - alpha;
98   );
99  
100   // NOTCH
101   mType == 3 ? (
102   b0 = 1;
103   b1 = -2 * cs;
104   b2 = 1;
105   a0 = 1 + alpha;
106   a1 = -2 * cs;
107   a2 = 1 - alpha;
108   );
109  
110   // APF
111   mType == 4 ? (
112   b0 = 1.0 - alpha;
113   b1 = -2.0 * cs;
114   b2 = 1.0 + alpha;
115   a0 = 1.0 + alpha;
116   a1 = -2.0 * cs;
117   a2 = 1.0 - alpha;
118   );
119  
120   // PEAK
121   mType == 5 ? (
122   b0 = 1.0 + ( alpha * A );
123   b1 = -2.0 * cs;
124   b2 = 1.0 - ( alpha * A );
125   a0 = 1.0 + ( alpha / A );
126   a1 = -2.0 * cs;
127   a2 = 1.0 - ( alpha / A );
128   );
129  
130   // LSHELF
131   mType == 6 ? (
132   b0 = A * ((A + 1) - (A - 1) * cs + beta * sn);
133   b1 = 2 * A * ((A - 1) - (A + 1) * cs);
134   b2 = A * ((A + 1) - (A - 1) * cs - beta * sn);
135   a0 = (A + 1) + (A - 1) * cs + beta * sn;
136   a1 = -2 * ((A - 1) + (A + 1) * cs);
137   a2 = (A + 1) + (A - 1) * cs - beta * sn;
138   );
139  
140   // HSHELF
141   mType == 7 ? (
142   b0 = A * ((A + 1) + (A - 1) * cs + beta * sn);
143   b1 = -2 * A * ((A - 1) + (A + 1) * cs);
144   b2 = A * ((A + 1) + (A - 1) * cs - beta * sn);
145   a0 = (A + 1) - (A - 1) * cs + beta * sn;
146   a1 = 2 * ((A - 1) - (A + 1) * cs);
147   a2 = (A + 1) - (A - 1) * cs - beta * sn;
148   );
149  
150   // precompute the coefficients //
151   q0 = b0 / a0;
152   q1 = b1 / a0;
153   q2 = b2 / a0;
154   q3 = a1 / a0;
155   q4 = a2 / a0;
156  
157  
158   @sample
159   x2 = x1;
160   x1 = x;
161   x = spl0;
162   y2 = y1;
163   y1 = y;
164   y = q0*x + q1*x1 + q2*x2 - q3*y1 - q4*y2;
165   spl0 = y * gain;
166  

Download