mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Freeverb Kammfilter Implementierung verstehen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Solocan Z. (solocan)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe Schwierigkeiten, zu verstehen, was für ein mathematisches 
Modell genau hinter der Kammfilterimplementierung von Freeverb steht. 
Laut Beschreibung soll es ein Kammfilter mit Tiefpass sein. Unten ist 
die Originalimplementierung:
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;
}
https://ccrma.stanford.edu/~jos/pasp/Lowpass_Feedback_Comb_Filter.html

Daraus leite ich den Regelkreis im Anhang ab. Doch ich verstehe nicht, 
was dieser Konstrukt in der Rückkopplung beabsichtigt. Irgendwie muss es 
eine Art Tiefpass sein, aber so einen Tiefpass kenn ich nicht.

Versteht das jemand?

Viele Grüße

Autor: Bonzo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich auch nicht!

Normal ist, dass die hohen Frequenzen im Hall zuerst abnehmen. Deshalb 
bauen alle Tiefpässe ein. Der andere Punkt ist, dass viele das 
Verzögerungsglied, das nur deshalb drin sitzt, weil man das delay haben 
will, in Verbindung mit der Rückkoppelung als Tiefpass auffassen. Das 
muss aber nicht so sein. Es gibt diese Filter auch als Allpass.

Noch genauer:

Die Allpass-Ketten sorgen für die Verzögerung und weitere zusätzliche 
Tiefpässe in den Rückkoppelungen für die Frequenzanpassung.

Um Deine Ableitung dort einzuordnen, müsste man noch wissen, wie 
"feedback" belegt wird und wann. Das fehlt irgendwie in der Bechreibung.

Autor: Bonzo (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
So kann das aussehen. Es ist aber empfehlenswert die Rückkoppelung 
gering zu halten und pro Schleife nur wenige Impulse zu erzeugen und 
dafür mehr Zweige zu nehmen. Sonst kommt ein zu deutlicher Kammfilter 
heraus, d.h. der Hall brummt mit einigen Grundfrequenzen.

Irgendwo hat hier einst jemand ausgeführt, dass die Hallketten eine 
Primzahlänge haben sollen, damit keine Reflektion auf eine andere fällt.

Autor: Solocan Z. (solocan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mir geht's hierbei nicht um die praktische Umsetzung, sondern um das 
mathematische Verständnis.

Im Link steht:
-----
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

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
This structure was introduced for artificial reverberation by Schroeder 
[415] and Moorer [317].
----


Offensichtlich wird hier diese Übertragungsfunktion implementiert. Wie 
komme ich aber von dieser auf diese Implementierung. Kann mir hierbei 
jemand auf die Sprünge helfen?

Autor: Detlef _. (detlef_a)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Struktur in der Rückkopplung ist der einfachste IIR Tiefpass, läuft 
bei Wikipedia unter 'exponentielle Glättung'.

v(n) = u(n)+ d1 v(n-1)
=> V(z)/U(z)= 1/(1-d1 z^(-1))

Das Ding ist nur für |d1|<1 stabil, für negative d1 ist das ein Tiefpass 
mit der Zeitkonstanten 1/d1.

Eine rückgekoppelte Verzögerungsleitung mit M taps macht alle Frequenzen 
der Periodendauer 2*M tot, weil M Abtastwerte auslöschend zurückkommen.

Beides zusammen sollte ein Kammfilter für niedrige Frequenzen sein, 
hängt auch von den Vorzeichen der Konstanten ab.

Wie die Audiophilen das nennen weiß ich nicht :)

Cheers
Detlef

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.