Example #1
0
void DspVCF::calculateFilterCoefficients(float f, float q) {
  float r, oneminusr, omega;
  if (f < 0.001f) f = 10.0f;
  if (q < 0.0f) q = 0.0f;
  this->centerFrequency = f;
  this->q = q;
  omega = f * (2.0f * M_PI) / sampleRate;
  if (q < 0.001) oneminusr = 1.0f;
  else oneminusr = omega/q;
  if (oneminusr > 1.0f) oneminusr = 1.0f;
  r = 1.0f - oneminusr;
  coef1 = 2.0f * sigbp_qcos(omega) * r;
  coef2 = - r * r;
  gain = 2 * oneminusr * (oneminusr + r * omega);
}
Example #2
0
static void sigbp_docoef(t_sigbp *x, t_floatarg f, t_floatarg q)
{
    float r, oneminusr, omega;
    if (f < 0.001) f = 10;
    if (q < 0) q = 0;
    x->x_freq = f;
    x->x_q = q;
    omega = f * (2.0f * 3.14159f) / x->x_sr;
    if (q < 0.001) oneminusr = 1.0f;
    else oneminusr = omega/q;
    if (oneminusr > 1.0f) oneminusr = 1.0f;
    r = 1.0f - oneminusr;
    x->x_ctl->c_coef1 = ftofix(2.0f * sigbp_qcos(omega) * r);
    x->x_ctl->c_coef2 = ftofix(- r * r);
    x->x_ctl->c_gain = ftofix(2 * oneminusr * (oneminusr + r * omega));
    /* post("r %f, omega %f, coef1 %f, coef2 %f",
    	r, omega, x->x_ctl->c_coef1, x->x_ctl->c_coef2); */
}