So I scaled f when using the filter iteration:
Code: Select all
void LadderFilter::Process(float *input, float *output, int count)
{
float in;
float t1, t2, t3, t4;
float tf = f * 0.7f;
for(int i = 0; i < count; i++)
{
in = *input - feedbackLevel * 4.0f * out4;
t1 = tf * in + (1.0f - tf) * out1;
t2 = tf * t1 + (1.0f - tf) * out2;
t3 = tf * t2 + (1.0f - tf) * out3;
t4 = tf * t3 + (1.0f - tf) * out4;
in = *input - feedbackLevel * 4.0f * t4;
out1 = f * in + (1.0f - f) * out1;
out2 = f * out1 + (1.0f - f) * out2;
out3 = f * out2 + (1.0f - f) * out3;
out4 = f * out3 + (1.0f - f) * out4;
*output = out4;
input++;
output++;
}
}
