Störende frequenz entfernen

  • Ich möchte mich der Frage von Paolo anschließen, sie aber entsprechend meinem Problem abwandeln.


    Eine alte Tonbandaufnahme soll verbessert und digital konserviert werden. Sie zeigt eine Resonanzanhebung von ca. 10 dB bei 212 Hz Mittenfrequenz, die entweder durch Resonanz des Raumes oder des Mikrofons hineingekommen ist. Ich möchte die Resonanzanhebung korrigieren. Das Kerbfilter ist für meine Zwecke in direkter Verwendung nicht geeignet, da ich keine völlige Unterdrückung der Resonanzfrequenz haben möchte, sondern nur eine Abschwächung. (Man könnte sich behelfen, in dem man zum Ergebnis der Anwendung des Kerbfilters das Originalsignal mit geeigneter Amplitude wieder beimischte.) Außerdem kann man die Güte des Kerbfilters nicht einstellen und damit nicht die 3 dB-Bandbreite der "Kerbe".


    Im Prinzip wäre der Equalizer das Werkzeug der Wahl. Diesen kann man jedoch wegen seiner graphischen Bedienung nicht frequenzgenau einstellen.


    Angenommen, ich würde Nyquist-Programmierung lernen, könnte ich mir dann mein Wunschfilter selber definieren?


    Vielen Dank für Hinweise.


    Gruß von lidocorc

  • Zitat


    Angenommen, ich würde Nyquist-Programmierung lernen, könnte ich mir dann mein Wunschfilter selber definieren?


    Antwort: in jedem Fall JA :) Da ich aber aus eigener Erfahrung weiss, dass Nyquist keine Sache ist, die man in 5 Minuten lernt schreibe ich Dir hier mal, wie das Kerbfilter funktioniert.


    Vorgeschichte: das Kerbfilter hat eigentlich auch einen Regler für den Gütefaktor, der auf Grund eines Fehlers im Audacity Nyquist Interface aber nicht angezeigt wird (Regler mit deutschen Umlauten werden nicht mehr angezeigt, warum das so ist weiss ich nicht).


    Neues Kerbfilter (Datei im Anhang ganz unten): 'Filtergüte' (mit 'ü') heisst jetzt 'Q-Faktor' (ohne 'ü'). Ich habe bei der Gelegenheit auch einen Lautstärkeregler mit eingebaut, mit dem das Verhältnis des Originalsignals (DRY) zum gefilterten Signal (WET) von 0 bis -20dB einstellbar ist. Ein Filter mit weniger als -20dB Gesamtanteil hört sowieso niemand mehr (behaupte ich jetzt mal so aus Erfahrungswerten). Falls das doch nicht reicht, kann das nochmal geändert werden. Die Gesamtlautstärke (Originalsignal plus gefiltertes Signal) bleibt dabei (theoretisch) gleich.


    [line]
    [m]
    ;nyquist plug-in
    ;version 1
    ;type process
    ;name "Kerbfilter..."
    ;action "Kerbfilter..."
    ;info "enfernt einzelne Frequenzen"
    ;control freq "Frequenz" real "Hz" 50 20 10000
    ;control q "Q-Faktor" real "Q" 1.00 0.01 10.00
    ;control vol "DRY/WET" real "dB" 0.0 -20.0 0.0


    ;; Format der 'control' Zeilen:
    ;; control <variableName> "Text_links" <variableTyp> "Text_rechts" <AnfangsWert> <Minimum> <Maximum>
    ;;
    ;; <Anfangswert> = Wert des Reglers beim ersten Start des Plugins
    ;; <Minimum> = Linksanschlag
    ;; <Maximum> = Rechtsanschlag


    (setf notch-vol (db-to-linear vol)) ; Lautstärke des Effektsignals
    (setf sound-vol (- 1.0 notch-vol)) ; Lautstärke des Originalsignals

    (defun notch-filter (sound)
    (notch2 sound freq q))
    ; 'notch2' siehe Nyquist Manual

    (defun effect-mixer (sound)
    (sum (scale sound-vol sound)
    ; Originalanteil
    (scale notch-vol (notch-filter sound)))) ; Effektanteil


    ;; 's' ist der Audacity sound (der markierte Teil der Tonspur)
    (if (arrayp s) ; wenn es sich um eine Stereotonspur handelt
    (vector
    (effect-mixer (aref s 0))
    ; jeden der beiden Kanäle einzeln bearbeiten
    (effect-mixer (aref s 1)))
    (effect-mixer s))
    ; bei Monotonspuren geht's auch direkt
    [/m]
    [line]


    Das Nyquist Plugin (die '.ny' Datei) ist eine ganz normale Textdatei, die mit jedem Texteditor gelesen (und geändert) werden kann.

  • @ edgar:
    herzlicher Dank für das verbesserte Kerbfilter. Ich werde es sogleich ausprobieren.


    Wenn in "Nyquist" so viele Möglichkeiten stecken, dann wächst meine Neigung deutlich, mehr darüber zu wissen - auch wenn 5 min nicht ganz ausreichen werden, bis ich die ersten Schritte damit gehen kann.


    Gruß von lidocorc

  • Die (Vor-)Freude währte nur kurz, denn das Kerbfilter tut auf meinem Rechner nicht, was es soll. Es hat fast keine abschwächende Wirkung für die "Kerb"-frequenz.


    Prüfmethode: Ich erzeuge eine Tonspur mit einem 100 Hz-amplitudenmodulierten 500 Hz-Träger, der die zwei Seitenfrequenzen 400 Hz und 600 Hz hat.


    Auf dieses Signal wird das Kerbfilter angewendet. (Parameter sind: Q-Faktor = 10, Frequenz = 500 Hz, Dry/Wet = -20 dB.)
    Sowohl nach Gehör als auch mit der Audacity-Frequenzanalyse zeigt sich fast keine Änderung am Klang bzw. an der Tonspur.


    Ich habe das Kerbfilter sowohl in Verbindung mit Version 1.3.4 als auch mit 1.2.6 verwendet und komme zum selben negativen Ergebnis. Woran mag der Fehler liegen?


    Vergleichsweise habe ich das "Notch filter" von David R. Sky probiert. Es beseitigt die Trägerfrequenz vollständig und dämpft die Seitenbänder entsprechend dem eingestellten Q-Wert.


    Habe heute meine Kenntnisse in Filtertheorie wieder aufgefrischt. Da Kerbfilter auf die Nyquist-Prozedur "notch2" zurückgreifen und diese wiederum auf die Prozedur "biquad", so ist es für meine Aufgabenstellung ein Umweg, notch2 zu verwenden, um anschließend einen Teil des Original-Signals wieder zu addieren. Eleganter wäre es, wenn man aus den Eingabeparametern gleich die passenden Koeffizienten für das biquadratische Filter berechnet. Mixen ist dann überflüssig. Die biquad-Koeffizienten für Kerbfilter findet man im Web, z.B. "Cookbook formulae for audio EQ biquad filter coefficients" von Robert Bristow-Johnson. Sie müssen nur leicht modifiziert werden für nicht vollständige Unterdrückung der Mittenfrequenz. Ich bleibe am Ball und werde einmal (bald?) eine entsprechendes Nyquist-Plug-in schreiben.


    Gruß von lidocorc

  • Oben schreibst Du: ... das Kerbfilter ist für meine Zwecke in direkter Verwendung nicht geeignet, da ich keine völlige Unterdrückung der Resonanzfrequenz haben möchte, sondern nur eine Abschwächung von ca. 10 dB bei 212 Hz Mittenfrequenz.


    Hier unten schreibst Du: ... Parameter sind: Q-Faktor = 10, Frequenz = 500 Hz, Dry/Wet = -20 dB ... es zeigt sich fast keine Änderung am Klang bzw. an der Tonspur ... Vergleichsweise habe ich das "Notch filter" von David R. Sky probiert. Es beseitigt die Trägerfrequenz vollständig und dämpft die Seitenbänder entsprechend dem eingestellten Q-Wert.


    Ich dachte Du wolltest keine vollständige Entfernung, sondern nur eine Abschwächung um 10dB, die mit Dry/Wet = -10dB auch funktioniert. Ausmessen kannst Du das nur mit einem Rauschspektrum. Dry/Wet = -20 dB bedeutet, dass das Originalsignal um maximal -20dB (= max. 10%) verändert wird, oder wie ich oben geschrieben habe: "ein Filter mit -20dB Gesamtanteil hört sowieso niemand mehr". Das ist also genau der Effekt, den ich vorhergesagt hatte. Irgendwie verstehe ich das nicht so richtig, was Du da schreibst.


    Das 'Kerbfilter' (Originalversion) ist übrigens nichts anderes als David's 'Notch Filter' mit deutscher Beschriftung der Schieberegler (der Rest das Codes ist identisch).


    Wenn Du noch eine Biquad-Lösung findest wäre ich da natürlich schon dran interessiert.

  • So, jetzt herrscht wieder Freude.


    @edgar
    Dein Filter ist anders zu bedienen, als ich es im ersten Moment erwartete. Stellt man dry/wet = - 10 dB ein, so habe ich erwartet, dass die Kerbe im Spektrum -10 dB tief ist. Sie ist aber -3,3 dB tief. (Bei [-0,5dB; -1dB; -2dB; -5dB; -10dB] ist sie [-24,6dB; -19,1dB; -13,7dB; -7,1dB; -3,3dB] tief. Delogarithmiert man diese Zahlen, so sieht man, dass die Summe jedes Wertepaars 1 ergibt. Damit war die Erklärung für das Programmverhalten gefunden.)


    Ich habe nun die vom Benutzer zu steuernde Variable 'vol' nicht (delogarithmiert) der Variable 'notch-vol', sondern 'sound-vol' zugewiesen.


    (setf sound-vol (db-to-linear vol))
    (setf notch-vol (- 1.0 sound-vol))


    Jetzt funktioniert's so, wie ich es naiv erwartet habe. Darum nochmal mein Dank an dich, Edgar, für die Mühe.


    Als einem Neuling in 'Nyquist' gebt mir bitte noch eine kurze Auskunft: Was ist der Unterschied zwischen Kommentaren, die hinter doppeltem Semikolon stehen und solchen die hinter einfachem stehen? Sind letztere etwa keine Kommentare (wie im Datei-Header)?


    Beiläufig noch eine Beobachtung: Audacity merkt sich die Eingabeparameter der Plugins bis zu ihrem nächsten Aufruf. Aber nicht genau. Stelle ich eine Filterfrequenz von 440 Hz ein und wende das Filter an, dann steht beim nächsten Aufruf in der Editierzeile für die Frequenz 439. Das ist sehr merkwürdig.

  • Zitat

    ...dein Filter ist anders zu bedienen, als ich es im ersten Moment erwartete...


    Ich muss auch dazu sagen, dass ich das Filter nicht für ein 'Meisterwerk' oder irgendsowas halte sondern ich habe es mehr oder weniger 'auf die Schnelle zusammengefummelt'. Die Werte stimmen auch messtechnisch nicht 100%, das weiss ich.


    Da es sich um eine Mikrofonaufnahme mit Raumakustikproblemen handelt (Resonanz bei 200Hz = vermutlich zu niedrige Deckenhöhe des Raumes) und höchstwahrscheinlich keine Nadelimpulsanalyse des Raums der Mikrofonaufstellung gemacht wurde, so dass sich das Laufzeitverhalten des Raumes selbst höchstwahrscheinlich nicht rekonstruiert werden kann (die 200Hz Resonanz steckt auch in allen Hallanteilen und kann mit einem Equalizer allenfalls verbessert, aber nicht beseitigt werden) macht es meiner Meinung nach sowieso nicht viel Sinn das Filter auf fünfundzwanzig Nachkommastellen genau zu berechnen, sondern es ist wahrscheinlich sinnvoller 'ein paar Regler zuviel' einzubauen (oder halt so, wie es für dich am einfachsten zu bedienen ist) und auszuprobieren, mit welcher Kombination das beste Ergebnis erreicht werden kann.


    Zitat

    ... was ist der Unterschied zwischen Kommentaren, die hinter doppeltem Semikolon stehen und solchen die hinter einfachem stehen ? ...


    Für den Interpreter und die Ausführung des Programms macht es keinen Unterschied ob ein, zwei oder noch mehr Strichpunkte (Semikola?) hintereinander stehen, alles nach dem *ersten* Semikolon hält Lisp sowieso für einen Kommentar. Die unterschiedliche Anzahl von bis zu vier Strichpunkten hintereinander dient eigentlich mehr dazu zu kennzeichnen, was eine Überschrift oder ein einfacher Kommentar oder einfach nur eine Erklärung ist (je weniger Strichpunkte, desto unwichtiger). Das hilft nur den Code leichter zu lesen. Es gibt auch irgendwo eine Diskussion (CMU AI Repository oder ähnlich) wieviel Strichpunkte für was verwendet werden sollen, ich selber schreibe das aber ganz einfach so, wie ich es am leichtesten lesen kann (das ist meiner Meinung nach am wichtigsten).


    Zitat

    ... Audacity merkt sich die Eingabeparameter der Plugins bis zu ihrem nächsten Aufruf, aber nicht genau ...


    Das ist leider richtig. Das ist aber ein Audacity-Nyquist-Interface Problem (ich habe den Verdacht, dass sich Audacity die Werte der Reglerstellung aus den Pixelwerten der Grafikoberfläche errechnet). Mich hat das auch schon geärgert. Noch viel ärgerlicher ist, dass sich der Nyquist Interpreter interne Lisp Variablen nicht bis zum nächsten Plugin-Aufruf merken kann. Für alles, was 'gespeichert' werden soll musst Du einen Regler erfinden. Es gab vor einem halben Jahr (zum etwa hundertsten Mal) die Diskussion ob es Nyquist in Audacity nicht erlaubt sein sollte externe Dateien lesen und schreiben zu können (nicht alle Funktionen, die in Dannenbergs Manual beschrieben sind funktionieren auch in Audacity). Ich muss mal mit der CVS Version ausprobieren, ob sich da mittlerweile was getan hat. Was aber auf jeden Fall mittlerweile richtig funktioniert ist, dass wenn Du in das Textfeld neben dem Regler einen Zahlenwert mit der Tastatur reinschreibst, der Zahlenwert auch korrekt an Nyquist übergeben wird.

  • Also ich glaube diesmal bin ich es gewesen, der auf der Leitung stand. Was mir heute im Laufe des Tages erst aufgefallen ist:


    Im Plugin Header darf nur *ein* Semikolon [Strichpunkt] am Anfang der Zeile stehen, weil diese Zeilen von Audacity ausgewertet werden. Der Nyquist Interpreter hingegen hält alles, was nach dem ersten Semikolon bis zum Ende der Zeile steht für einen Kommentar und ignoriert es einfach. In einem Nyquist Kommentar *ausserhalb* des Plugin Headers können auch mehrere Strichpunkte hintereinander verwendet werden.


    Diese und andere Weisheiten (?) zum Thema 'Audacity und Nyquist' findest Du auf der Seite, die ich heute Mittag zusammengetippt habe:


    http://www.audacity-forum.de/d…l/audacity-nyquist-de.htm

  • Falls noch was fehlt (und das tut es mit Sicherheit) bitte Bescheid geben.


    Halbe Stunde später: Ich wusste es doch, siehe auch http://www.shellworld.net/~davidsky/ny-help.htm


    Nochmal einen Tag später: Korrektur - nachdem ich Davids Seite auf 'lesbar' umkonvertiert hatte bin ich fast der Meinung, dass er da was verwechselt hat. Die von David unter 'Nyquist version_3 Plugins' beschriebenen Funktionen gehen bei mir auch in den 'version_2' Plugins und sind auf meiner deutschen Seute auch schon enthalten.