Das Allpassfilter ist ein Frequenzfilter, das alle Frequenzen durchlässt und nur ihre Phasen verschiebt. Diese Phasenverschiebung kann man sich als Verzögerung (Delay) vorstellen.
Die diskrete Übertragungsfunktion H(z) eines Allpassfilters M-ter Ordnung kann als
(1)
beschrieben werden, wobei komplex konjugierte Pol-Nullstelle ist. Zieht man das heraus, erhält man
(2)
Das ist im folgenden Regelkreis veranschaulicht.
Implementierung
Die Implementierung des Allpassfilters ist im Folgenden gezeigt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
/* Main process alpass */ float c_allpass::process(float x){ float y; y=buffer[aptr]-feedback*x; buffer[aptr]=y*feedback+x; /* //Original implementation of Freeverb is not consistent float bufout; y = -x + bufout; buffer[aptr] = x + (bufout*feedback); */ if(++aptr>=bufsize) aptr = 0; return y; } |
Im Freeverb ist eine Kombination aus Feedforward- und feedback-Kammfilter implementiert als eine Allpassfilter-Approximation. Diese wird oben auskommentiert gezeigt.
Schreibe einen Kommentar