About allpass filter algorithms
Posted: Mon Jan 10, 2011 4:22 am
Hi,
I am now developing dsp libraries (called freeverb3) and coding some dsp processings.
Some allpass algorithms in some implementations are different from each other.
It seems that the figure on the SpimSemi's site
is the corrent signal flow, but some figures on some sites draw strange pictures like this.
http://www.gersic.com/dspwiki/index.php ... erberation
shows the same strange allpass filter figure.
In addition, the original freeverb's allpass filter's code looks strage
I think that the correct algorithm is like this:
The original code in the freeverb source seems to be just an 1st order IIR plus minus feedforward loop.
The site on NATIONAL INSTRUMENTS shows some optimized version of allpass filter.
http://zone.ni.com/reference/en-XX/help ... e_allpass/
I would like to know why there are so many implementations, some of which seems strange.
Thank you.
Teru
I am now developing dsp libraries (called freeverb3) and coding some dsp processings.
Some allpass algorithms in some implementations are different from each other.
It seems that the figure on the SpimSemi's site
is the corrent signal flow, but some figures on some sites draw strange pictures like this.
http://www.gersic.com/dspwiki/index.php ... erberation
shows the same strange allpass filter figure.
In addition, the original freeverb's allpass filter's code looks strage
Code: Select all
inline float allpass::process(float input)
{
float output;
float bufout;
bufout = buffer[bufidx];
undenormalise(bufout);
output = -input + bufout;
buffer[bufidx] = input + (bufout*feedback);
if(++bufidx>=bufsize) bufidx = 0;
return output;
}
Code: Select all
inline float process(float input)
{
float output;
float bufout = buffer[bufidx];
undenormalise(bufout);
buffer[bufidx] = input + bufout * feedback;
output = bufout - buffer[bufidx] * feedback;
bufidx ++; if(bufidx >= bufsize) bufidx = 0;
return output;
}
The site on NATIONAL INSTRUMENTS shows some optimized version of allpass filter.
http://zone.ni.com/reference/en-XX/help ... e_allpass/
I would like to know why there are so many implementations, some of which seems strange.
Thank you.
Teru