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