typedef struct resdesc
{
float out1, out2; /* filter state variables */
float a1, b1, b2; /* filter coefficients */
} resdesc;
static void Avoid_Underflow(resdesc *o)
{
/* clamp state variables */
if (o->out1>-0.0000000001f
&& o->out1<0.0000000001f)
o->out1 = 0.0f;
if (o->out2>-0. 0000000001f
&& o->out2<0.0000000001f)
o->out2 = O.Of;
}
/* assumes coefficients are constant throughout block */
void Resonator(resdesc *f , int n, float *out,
int stride, float *in, int istride )
{
float ym;
int j;
j=0;
for(j=0;j<n;++j)
{
ym = f->b1 * f->out1 + f->b2 * f->out2
+ f->a1 * in[j*istride];
f->out2 = f->out1;
f->out1 = ym;
out[j*stride] = ym;
}
Avoid_Underflow (f);
}
/* End of File */