Dithering: Rauschendes Signal zur Verbesserung

Bild

Einleitung


Im ersten Teil dieser Artikelserie werden wir die theoretische Seite des Dithering, ein bisschen Geschichte und ihre Anwendung auf 1D-Signale und Sampling betrachten. Ich werde versuchen, eine Frequenzanalyse von Diskretisierungsfehlern durchzuführen und darüber zu sprechen, wie Dithering hilft, diese zu korrigieren. Grundsätzlich handelt es sich hierbei um einen theoretischen Artikel. Wenn Sie also an praktischeren Anwendungen interessiert sind, warten Sie auf die nächsten Teile.

Das Mathematica-Notizbuch zur Reproduktion der Ergebnisse finden Sie hier und die PDF-Version finden Sie hier .

Was ist Dithering?


Dithering kann als das absichtliche / absichtliche Einbringen von Rauschen in ein Signal beschrieben werden, um großräumige / niedrigauflösende Fehler zu vermeiden, die sich aus der Abtastung oder Unterabtastung ergeben.

Wenn Sie jemals gearbeitet haben mit:

  • Audiosignale
  • 90er Jahre Palette Bildformate

Sie sollten auf Dithering-Optionen gestoßen sein, die dank des Hinzufügens von Rauschen und Artefakten mit niedriger Auflösung die Qualität von Ton und Bild auf magische Weise verbesserten.

Allerdings fand ich auf Wikipedia eine ziemlich überraschende Tatsache darüber, wie Dithering zuerst definiert und verwendet wurde:

... Eine der ersten Anwendungen von Dithering trat während des Zweiten Weltkriegs auf. Bomberflugzeuge verwendeten mechanische Computer, um die Flugbahn von Bomben zu navigieren und zu berechnen. Es ist merkwürdig, dass diese Computer (mit Hunderten von Zahnrädern und Zahnrädern gefüllte Kästen) beim Fliegen an Bord eines Flugzeugs genauer arbeiteten als am Boden. Die Ingenieure stellten fest, dass die vom Flugzeug verursachten Vibrationen den Fehler verringern, der durch klebrige bewegliche Teile verursacht wird. Auf der Erde bewegten sie sich in kurzen ruckartigen Bewegungen, und in der Luft war ihre Bewegung kontinuierlicher. Kleine Vibrationsmotoren wurden in Computer eingebaut, und ihre Vibration wurde "Dither" genannt, vom mittelenglischen Wort "didderen", was "zittern" bedeutet. Wenn Sie heute an ein mechanisches Messgerät klopfen, um dessen Genauigkeit zu erhöhen, wenden Sie Dithering an. Dither wandelt das Digitalisierungssystem in kleinen Mengen im wahrsten Sinne des Wortes erfolgreich in ein analogeres um.

- Ken Polmann, Grundsätze für digitales Audio

Dies ist eine inspirierende und interessante historische Tatsache, und ich verstehe, warum wir dadurch Abweichungen bei Berechnungen und Resonanzen vermeiden können, indem wir die Rückkopplungszyklen mechanischer Schwingungen zufällig unterbrechen.

Aber genug Geschichte, lassen Sie uns zuerst den Dithering-Prozess in 1D-Signalen betrachten, zum Beispiel in Audio.

Sampling durch Dithering eines konstanten Signals


Zunächst analysieren wir das langweiligste Signal der Welt - ein konstantes Signal. Wenn Sie ein wenig über die digitale Verarbeitung von Signalen im Zusammenhang mit Ton wissen, können Sie sagen: Aber Sie haben versprochen, Audio in Betracht zu ziehen, und per Definition gibt es keine konstante Komponente im Ton! (Außerdem wird in Software und in Tonverarbeitungsgeräten der sogenannte Gleichstromversatz absichtlich beseitigt.)

Dies ist wahr, und bald werden wir uns komplexere Funktionen ansehen, aber wir werden wieder von vorne anfangen.

Stellen Sie sich vor, wir führen eine 1-Bit-Abtastung eines normalisierten Gleitkommasignals durch. Dies bedeutet, dass es sich nur um endliche Binärwerte handelt, 0 oder 1.

Wenn das Signal 0,3 ist , ist einfaches Runden ohne Dithering die langweiligste Funktion - nur Null !

Der Fehler ist ebenfalls konstant und gleich 0,3 , daher ist der durchschnittliche Fehler gleich 0,3 . Dies bedeutet, dass wir eine ziemlich große Abweichung in das Signal eingeführt haben und die Information des ursprünglichen Signals vollständig verloren haben.

Wir können versuchen, dieses Signal zu dithern und die Ergebnisse zu betrachten.

In diesem Fall wendet das Dithering (bei Verwendung der Rundungsfunktion) einfach gewöhnliches zufälliges weißes Rauschen an (ein zufälliger Wert für jedes Element, der ein einheitliches Rauschspektrum erzeugt) und fügt dem Signal vor dem Abtasten ein zufälliges Intervall (-0,5, 0,5) hinzu.

quantizedDitheredSignal =
Round [constantSignalValue + RandomReal [] - 0.5] & / @ Range [sampleCount];



Es ist schwer, hier etwas zu sehen, jetzt besteht das Ergebnis der Diskretisierung nur noch aus zufälligen Einsen und Nullen. Mit (erwarteten) vielen Nullen. An sich ist dieses Signal nicht besonders interessant, aber der Fehlerplan und der durchschnittliche Fehler sind ziemlich interessant.


Wie wir erwartet haben, variiert der Fehler auch, aber es ist erschreckend, dass der Fehler manchmal größer wurde (absoluter Wert 0,7)! Das heißt, der maximale Fehler ist leider schlechter geworden, aber das durchschnittliche Rauschen spielt eine Rolle:

Mean [ditheredSignalError]
0,013

Viel besser als der Anfangsfehler von 0,3. Bei einer signifikant großen Anzahl von Abtastwerten tendiert dieser Fehler gegen Null (bis zur Grenze). Der Fehler der konstanten Komponente ist also viel geringer geworden, aber schauen wir uns den Frequenzgraphen aller Fehler an.


Roter Graph / Burst = Frequenzspektrum des Fehlers ohne Dithering (konstantes Signal ohne Frequenzen). Schwarz - mit Dithering unter Verwendung von weißem Rauschen.

Alles wird interessanter! Dies zeigt die erste Schlussfolgerung aus diesem Post- Dithering, die den Abtastfehler / die Abtastabweichung auf mehrere Frequenzen verteilt .

Im nächsten Abschnitt werden wir herausfinden, wie dies uns helfen wird.

Frequenzempfindlichkeit und Tiefpassfilterung


Oben haben wir das Dithering eines abgetasteten konstanten Signals beobachtet:

  • Er erhöhte den maximalen Fehler.
  • Fast nullte der durchschnittliche Fehler.
  • Dem Fehlerfrequenzspektrum wurde konstantes weißes Rauschen (mit vollständiger Abdeckung des Spektrums) hinzugefügt, um den Niederfrequenzfehler zu reduzieren.

An sich ist es für uns nicht sehr nützlich ... Wir ziehen jedoch keine Diskretisierung einer beliebigen mathematischen Funktion / eines beliebigen mathematischen Signals in Betracht. Wir betrachten die Signale, die der Mensch wahrnehmen wird. Offensichtlich ist die menschliche Wahrnehmung begrenzt. Hier einige Beispiele dafür:

  • Unsere Sehschärfe ist begrenzt. Viele Menschen haben Kurzsichtigkeit und ohne Brille sehen sie verschwommene Bilder von entfernten Objekten.
  • Wir nehmen die durchschnittliche Detailskala viel besser wahr als sehr hohe oder sehr niedrige Frequenzen (kleine Details von sehr weichen Verläufen können unsichtbar sein).
  • Unser Gehör arbeitet in einem bestimmten Frequenzbereich (20 Hz - 20 kHz, verschlechtert sich jedoch mit der Zeit) und wir sind am empfindlichsten für den mittleren Bereich - 2 kHz - 5 kHz.

Daher wird jeder Fehler in den Frequenzen, die näher am oberen Bereich der wahrgenommenen Frequenz liegen, viel weniger auffallen.

Darüber hinaus werden unsere Mediengeräte immer besser und bieten ein größeres Oversampling . Zum Beispiel haben wir bei Fernsehern und Monitoren die „Retina“ -Technologie und 4K-Displays (auf denen kein Pixel zu sehen ist). Im Bereich Sound verwenden wir Dateiformate mit einer Abtastrate von mindestens 44 kHz, auch für billige Lautsprecher, die oft nicht abgespielt werden können mehr als 5-10 kHz.

Dies bedeutet, dass wir das wahrgenommene Erscheinungsbild des Signals durch Ausführen seiner Tiefpassfilterung approximieren können. In der Grafik habe ich eine Tiefpassfilterung durchgeführt (das Füllen mit Nullen auf der linken Seite ist ein "Anstieg"):


Rot - Gewünschtes nicht abgetastetes Signal. Grün - diskretes Signal mit Dithering. Blau ist das Tiefpassfilter dieses Signals.

Das Signal fängt an, der ursprünglichen, nicht abgetasteten Funktion viel näher zu kommen!

Leider stellen wir langsam niedrige Frequenzen fest, die im Originalsignal sehr auffällig sind und fehlen. Im dritten Teil der Serie werden wir versuchen, es mit Hilfe von blauem Rauschen zu beheben. In der Zwischenzeit könnte das Diagramm mit einer Pseudorauschfunktion aussehen, deren Inhalt eine viel niedrigere Frequenz aufweist:

Dies ist möglich, weil unsere Pseudozufallsfolge das folgende Frequenzspektrum aufweist:


Aber schauen wir uns nun einfache, konstante Funktionen an. Schauen Sie sich die Sinuswelle an (wenn Sie mit dem Fourier-Theorem vertraut sind, wissen Sie, dass es der Baustein eines periodischen Signals ist!).

Sinus-Sampling


Wenn wir eine Sinuskurve mit 1-Bit-Abtastung abtasten, erhalten wir ein einfaches Rechtecksignal.


Das Rechtecksignal ist sehr interessant, da es sowohl die Grundfrequenz als auch die ungeraden Harmonischen enthält .

Dies ist eine interessante Eigenschaft, die in analogen subtraktiven Synthesizern aktiv genutzt wird, um den Klang von Hohl- / Kupferinstrumenten zu erzeugen. Die subtraktive Synthese nimmt einen komplexen, harmonisch reichen Klang auf und filtert ihn, wobei einige Frequenzen eliminiert werden (Filterparameter variieren mit der Zeit), um den Klängen die gewünschte Form zu geben.

Frequenzspektrum einer Rechteckwelle:


Aber in diesem Beitrag interessieren wir uns mehr für Stichprobenfehler! Lassen Sie uns ein Fehlerdiagramm sowie ein Spektrum von Fehlerhäufigkeiten erstellen:


In diesem Fall ist die Situation viel besser - der durchschnittliche Fehler liegt nahe bei Null! Leider haben wir immer noch viele unerwünschte tiefe Frequenzen, die sehr nahe an unserer Hauptfrequenz liegen (ungerade Multiplikatoren mit abnehmender Größe). Dieses Phänomen wird als Aliasing- oder Dithering-Rauschen bezeichnet. Es treten Frequenzen auf, die im Originalsignal nicht vorhanden waren, und sie sind recht groß.

Selbst eine Tiefpassfilterung kann das Signal nicht wesentlich verbessern. Der Fehler hat viele tiefe Frequenzen:


Diskretisierte Sinus-Tiefpassfilterung


Genauigkeit der abgetasteten Sinuswelle

Lassen Sie uns einen Blick darauf werfen, wie sich die Situation ändert, wenn Dithering hinzugefügt wird. Auf den ersten Blick gibt es fast keine Verbesserungen:


Wenn wir dies jedoch als Bild betrachten, sieht es allmählich besser aus:


Beachten Sie, dass Abtastfehler erneut auf verschiedene Frequenzen verteilt werden:


Es sieht sehr vielversprechend aus! Besonders wenn man bedenkt, dass wir jetzt versuchen können zu filtern:


Dies ist eine leicht verzerrte Sinuswelle, die mit Ausnahme der durch das asymmetrische Filter eingeführten Phasenverschiebung dem Original viel näher kommt als die Version ohne Dithering (ich werde dies hier nicht erklären; ich kann nur sagen, dass das Problem durch Anwendung von symmetrischen Filtern behoben werden kann):


Rot ist die ursprüngliche Sinuswelle. Grün - tiefpassgefiltertes Signal ohne Dithering. Blau - tiefpassgefiltertes Signal mit Dithering.

Die Grafiken beider Fehler bestätigen numerisch, dass der Fehler viel kleiner ist:


Rot - der Fehler des tiefpassgefilterten Signals ohne Dithering. Blau - der Fehler des tiefpassgefilterten Signals beim Dithering.

Betrachten wir zum Schluss kurz ein Signal mit einer besseren Dithering-Funktion, das nur hohe Frequenzen enthält:


Das obere Bild ist eine Funktion des weißen Rauschens. Das untere Bild ist eine Funktion, die höhere Frequenzen enthält.


Eine Version mit Tiefpassfilterung, Dithering und verbesserter Funktion - fast perfekte Ergebnisse, wenn Sie die vom Filter verursachte Phasenverschiebung nicht berücksichtigen!

Zum Schluss ein Vergleich aller drei Fehlerspektren:


Rot - Spektrum des Abtastfehlers ohne Dithering. Schwarz - Spektrum des Abtastfehlers mit weißem Rauschen. Blau - Spektrum des Abtastfehlers beim Dithering mit höheren Frequenzen.

Zusammenfassung


Dies ist der erste Teil der Serie endet. Wichtigste Erkenntnisse:

  • Durch das Dithering wird der Abtastfehler / die Abtastabweichung auf mehrere Frequenzen verteilt, und dies hängt von der Dithering-Funktion ab. Sie konzentrieren sich nicht auf tiefe Frequenzen.
  • Die Wahrnehmung eines Signals (Ton, Bild) funktioniert am besten in ganz bestimmten Frequenzbereichen. Signale werden häufig an den Grenzen des Wahrnehmungsspektrums überabgetastet, wo die Wahrnehmung nicht empfindlich ist. Mit Standard-Audio-Abtastraten können Sie beispielsweise Signale wiedergeben, die die meisten Erwachsenen überhaupt nicht hören können. Aufgrund des vorhergehenden Abschnitts ist die Idee, Dithering- und Verschiebungsfehler in diesen Frequenzbereich zu verwenden, sehr attraktiv.
  • Verschiedene Rauschfunktionen erzeugen unterschiedliche Fehlerspektren, die verwendet werden können, wobei bekannt ist, welches Fehlerspektrum am wünschenswertesten ist.

Im nächsten Teil werden wir uns verschiedene Dithering-Funktionen ansehen - die, die ich in diesem Artikel verwendet habe (die Serie mit dem goldenen Schnitt) und das blaue Rauschen.

Source: https://habr.com/ru/post/de481386/


All Articles