+static double
+calc_peq(Aeq* self, int i, double omega) {
+ double complex H = 0.0;
+ double complex z = cexp(I * omega);
+ double complex zz = cexp(2. * I * omega);
+ double complex zm = z - 1.0;
+ double complex zp = z + 1.0;
+ double complex zzm = zz - 1.0;
+
+ double A = pow(10.0, self->v_g[i]/40.0);
+ double g = self->v_filter[i].g;
+ double k = self->v_filter[i].k * A;
+ double m1 = k * (A * A - 1.0) / A;
+
+ H = (g*k*zzm + A*(g*zp*(m1*zm) + (zm*zm + g*g*zp*zp))) / (g*k*zzm + A*(zm*zm + g*g*zp*zp));
+ return cabs(H);
+}
+
+static double
+calc_lowshelf(Aeq* self, double omega) {
+ double complex H = 0.0;
+ double complex z = cexp(I * omega);
+ double complex zz = cexp(2. * I * omega);
+ double complex zm = z - 1.0;
+ double complex zp = z + 1.0;
+ double complex zzm = zz - 1.0;
+
+ double A = pow(10.0, self->v_g[0]/40.0);
+ double g = self->v_filter[0].g;
+ double k = self->v_filter[0].k;
+ double m0 = self->v_filter[0].m[0];
+ double m1 = self->v_filter[0].m[1];
+ double m2 = self->v_filter[0].m[2];
+
+ H = (A*m0*zm*zm + g*g*(m0+m2)*zp*zp + sqrt(A)*g*(k*m0+m1) * zzm) / (A*zm*zm + g*g*zp*zp + sqrt(A)*g*k*zzm);
+ return cabs(H);
+}
+
+static double
+calc_highshelf(Aeq* self, double omega) {
+ double complex H = 0.0;
+ double complex z = cexp(I * omega);
+ double complex zz = cexp(2. * I * omega);
+ double complex zm = z - 1.0;
+ double complex zp = z + 1.0;
+ double complex zzm = zz - 1.0;
+
+ double A = pow(10.0, self->v_g[5]/40.0);
+ double g = self->v_filter[5].g;
+ double k = self->v_filter[5].k;
+ double m0 = self->v_filter[5].m[0];
+ double m1 = self->v_filter[5].m[1];
+ double m2 = self->v_filter[5].m[2];
+
+ H = ( sqrt(A) * g * zp * (m1 * zm + sqrt(A)*g*m2*zp) + m0 * ( zm*zm + A*g*g*zp*zp + sqrt(A)*g*k*zzm)) / (zm*zm + A*g*g*zp*zp + sqrt(A)*g*k*zzm);
+ return cabs(H);
+}