I try to understand the implementation of the low-pass comb filter of the Freeverb reverberation algorithm:
https://ccrma.stanford.edu/~jos/pasp/Lowpass_Feedback_Comb_Filter.html
The original implementation is as follows:
inline float comb::process(float input)
{
float output;
output = buffer[bufidx];
filterstore = (output*damp2) + (filterstore*damp1);
buffer[bufidx] = input + (filterstore*feedback);
if(++bufidx>=bufsize) bufidx = 0;
return output;
}
I drew the closed loop of this algorithm:
In the link, it says:
Inspection of comb.h in the Freeverb source shows that Freeverb's ``comb'' filter is more specifically a lowpass-feedback-comb filter (LBCF4.11--§2.6.5). It is constructed using a delay line whose output is lowpass-filtered and summed with the delay-line's input. The particular lowpass used in Freeverb is a unity-gain one-pole lowpass having the transfer function
$\displaystyle H(z) = \frac{1-d}{1-d\,z^{-1}}. $
When $ d=0$ , the LBCF reduces to the feedback comb filter (FBCF) of §2.6.2 in which the feedback was not filtered. The overall LBCF transfer function is then
$ \displaystyle \hbox{LBCF}_{N}^{\,f,\,d} \;= \; \frac{z^{-N}}{1 -f\frac{1-d}{1-d\,z^{-1}}\,z^{-N}}. $
Apparently, this transfer function is implemented here. But can someone tell me, how to derive this implementation out of this transfer function?