mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Digitaler Tiefpass mit veränderbarer Grenzfrequenz


Autor: Tummy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
für ein Audio-Projekt (Subtraktiver Synth) benötige ich ein digitales 
Tiefpassfilter, dessen Grenzfrequenz ich mit einem LFO jedoch modulieren 
will.

Erster Ansatz wäre ein Biquad Tiefpass mit Butterworth Charakteristik 
gewesen.

Ich habe dann jedoch das Problem, dass ich bei einer (sprunghaften) 
Änderung der Grenzfrequenz auch Unstetigkeiten im Ausgangssignal habe 
(Knacken).

Ein einfaches Tiefpassfilter erster Ordung:
tiefpass += (input-tiefpass) * FILTERKOEFFIZIENT;

hat dieses Problem ja nicht. Schalte ich 2 dieser Filter hintereinander, 
bekomme ich keine Butterworth Charakteristik.
Dachte schon an ein State-Variable Filter. Das wird aber unstabil bei f> 
1/8*Abtastfrequenz.

Wie kann ich da weiter kommen?

Autor: Dergute W. (derguteweka)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

Dann mach' halt keine sprunghafte Aenderung der Grenzfrequenz. Kannst ja 
da einen Tiefpass einbauen :-)

Sowas in der Art hab' ich schonmal vorexerziert:

Beitrag "Re: adaptiv IIR Filter Koeffizienten ändern, wie?"


Gruss
WK

Autor: Jürgen S. (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau das hätte Ich nun auch geschrieben, aber aus anderer - 
funktioneller - Sicht: Es macht keinen Sinn, einen Klang derart schnell 
zu ändern und dann zu fordern, dass die Wellen nicht springt. Sie 
springt im Übrigen auch nicht, sondern sondern folgte nur dem 
Eingangssignal, eben hier den sich rasch ändernden Parameter. Das ist 
bei solchen Synthesizern eigentlich gewollt.

Ich sehe auch umsetzungstechnisch nicht, wieso das ein Problem sein 
sollte.

Autor: Christoph db1uq K. (christoph_kessler)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Es gäbe auch noch die halb digitale Lösung mit geschalteten Kapazitäten, 
z.B. LTC1064-2 mit einem einstellbaren Taktgenerator, hier ein DS1077 
über I2C-Bus.
Die Taktfrequenz beträgt umschaltbar das 50- oder 100-fache der 
Grenzfrequenz.

: Bearbeitet durch User
Autor: Christoph db1uq K. (christoph_kessler)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier noch meine Schaltung dazu.
Das ist nicht mehr ganz Stand der Technik, so hätte man das vielleicht 
in den Neunzigern gebaut. Aber die Teile gibt es noch bei RS-Components.

Autor: Jürgen S. (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm, der hat aber ziemliche Phasenverzerrungen. Für Musikanwendungen eher 
nicht so geeignet.

Autor: W.S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tummy schrieb:
> dessen Grenzfrequenz ich mit einem LFO jedoch modulieren
> will.

Ja sag doch erstmal, wie "low" dein LFO ist und was er an Ausgangsform 
denn so herausbringen soll. Ich nehme mal an, Dreieck oder gar Sinus.

Als nächstes wäre ja interessant, auf was für einer HW-Basis das Ganze 
laufen soll. Wenn du genug Rechenleistung hast, dann ist zum einen ein 
FIR auf Basis sin(x)/x mit nicht allzu großem Filterkernel ja kein 
Problem und zum anderen wenn du float oder gar double in HW rechnen 
kannst, ist auch das Berechnen dieses Filterkernels schnell genug, um 
ihn zwischendurch neu zu berechnen - falls das für deine vigilanten 
Audio-Ideen erforderlich ist. Ansonsten machst du ne Vorberechnung aller 
nötigen Kernel und schaltest dazwischen per Zeiger um.

Die Fensterfunktion kannst du ja vorberechnen und speichern.

W.S.

Autor: Christoph db1uq K. (christoph_kessler)
Datum:
Angehängte Dateien:

Bewertung
1 lesenswert
nicht lesenswert
Ich habe keine Erfahrung mit Phasengang und Gruppenlaufzeit, der 
LTC1064-2 soll Butterworth-Charakter haben. Es gibt andere SC-Tiefpässe 
aus der Familie mit steilerer Charakteristik. Hier drei Kurven aus dem 
Datenblatt. Gibt es besseres?

Autor: Jürgen S. (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
W.S. schrieb:
> Ja sag doch erstmal, wie "low" dein LFO ist und was er an Ausgangsform
> denn so herausbringen soll. Ich nehme mal an, Dreieck oder gar Sinus.
Ich glaube, das "lo" ist nicht so das Problem. Eher sind es die Dreiecke 
und Rechtecke, die Sprünge machen. Die aber werden ja üblicherweise 
digital gefiltert, um das gewünschte Verhalten eines Schaltkreises 
nachzubilden, so, wie es die Analogelektronik auch täte.

Die Modulation der Grenzfrequenzen kann auch nicht beliebig schnell 
erfolgen, weil das Gehör das dann nicht mehr als Shaping der Klangkurve 
wahrnimmt, sondern als Frequenzmodulation. Je nach "Aggressivität" kann 
man da Raten bis maximal 20Hz ansetzen, weil sonst Frequenzverschiebung 
gehört wird, was dann eher in Richtung vibrato, flanging und chorus geht 
(subjektiv!).

Die Spünge, die man auf diese Weise erzeugt, können also auch nur in dem 
Spektralbereich liegen, sofern die Abtastrate der Filterberechnung 
passt. Diese sollte nicht wesentlich geringer sein, als die Rate der 
Samplefrequenz.

Ansonsten bleiben die funktionellen Sprünge, die man durch grobe Encoder 
und rechteckige Modulationen, bit crushing etc erzeugt. Diese generieren 
aber gewollte Phasenhopser.

Autor: Tobias N. (technick2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tummy schrieb:
> Erster Ansatz wäre ein Biquad Tiefpass mit Butterworth Charakteristik
> gewesen.

Hast Du eine Lösung für das Problem gefunden?

Autor: Benjamin Sellak (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also die gängigen Filterstrukturen, speziell die BLT-Filter die man aus 
Signaleverarbeitung 101 kennt, sind für dynamisch einstellbare 
Klangbearbeitungsfilter nur so bedingt geeignet, eben wegen den 
Unstetigkeiten der Zustandsvariablen.

Ein gängiger Weg sind VA Filter (virtual analog) oder genauer "Topology 
preserving Transform"-Filter, zu denen das erwähnte State Variable 
Filter gehört. Die Instabilität und die Ungenauigkeit bei hohen 
Frequenzen kriegst du mit 4- oder 8-fach Upsampling in den Griff.
Hier n dickes PDF dazu: 
https://www.native-instruments.com/fileadmin/ni_me...

Wenn dir das zu teuer ist in Sachen Rechenleistung - bleib einfach beim 
Biquadfilter und den gängigen Formeln aus Zölzer/Audio EQ Cookbook/...
Berechne bei großen Parametersprüngen einfach einige Zwischenwerte für 
die Koeffizienten oder lass die Koeffizienten durch ein Glättungsfilter 
laufen (Dabei auf Stabilität achten!). Ich weiss von mindestens zwei 
Pro-Audio-Firmen, deren parametrische EQ's auf genau diese Weise 
implementiert sind.

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.