Dithering

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

Dithering (engl. to dither, zittern) bezeichnet eine Methode zur Reduzierung der negativen Auswirkungen von Quantisierungsrauschen, die beim Digitalisieren analoger Werte entsteht. Dabei versucht man, die Fehler über eine größere Anzahl von Datenpunkten zu verteilen und damit den Fehler zu verwischen. Damit klingt z.B. Audio weicher und nicht so kratzig oder ein Bild sieht weicher und weniger körnig aus.

Problem

Wenn analoge Werte z.B. mit einem DA-Wandler gesampelt werden, oder hochaufgelöste digitale Werte mit geringerer Auflösung weiterverarbeitet werden, wird das letzte Bit (LSB) naturgemäß gerundet. Der digitale Wert ist dabei mit einem Fehler von bis zu 0,5 digit behaftet. Diese Rundungen sind meist mathematisch präzise, wodurch ein Wert von 0,4 permanent auf 0 und ein Wert von 0,6 immer auf 1 gerundet wird. Ändern sich sich frequenzbedingt die analogen Werte während einer längeren Zeitdauer nicht genügend, entstehen dadurch mehrere falsche Wert hintereinander, zudem können minimale Änderungen im Analogsignal um den 0,5 - Punkt herum seltsame Muster generieren, die man als digitales Rauschen bezeichnet. Kumulieren diese Werte nun zu stark, so prägen sie in das Rekonstruktionsfilter, welches jeder DA-Wandlung nachgeschaltet sein muss, niederfrequente Schwingungen auf, die unterhalb der Nyquistfrequenz liegen und zu unerwünschten Signalanteilen führen.

Lösung

Anstatt wie üblich 0,5 zum Wert zu addieren und den Restvektor abzuschneiden, wird ein kontinuierliches Rauschen mit einer Amplitude kleiner als 1 auf den Wert gegeben. Damit werden Werte > 0,5 statistisch eher aufgerundet und Werte unterhalb von 0,5 eher abgerundet. Bei der späteren Filterung entsteht damit, wie bei einer PWM, ein analoger Zwischenwert, den man nicht digital hätte abbilden können.

Beispiel 1

Im einfachsten Fall nutzt man bei Aufnahmen eine Wechselspannung in der Größenordnung des letzten Bits, die der halben Abtastfrequenz entspricht. Die Quantisierung wird damit gewissermassen "durchtunnelt". Digital kann man vor der Ausgabe auf dem DAC einfach die Wertefolge {0 / 0,5} abwechselnd addieren. Der theoretische Zwischenwert 0,5 führt dann jeweils zu einem 01010101 Muster.

Beispiel 2

Die nachfolgenden Schaubilder zeigen einen oberwellenbehafteten Sinus mit ca. 1/100 der Abtastfrequenz, der infolge geringer Aussteuerung nur mit 4 Bit codiert wird. Das hier sehr einfach gehaltene Rekonstruktionsfilter bildet Bögen und adaptiert auf die Treppen[1]. Mit künstlichem Verrauschen gelingt eine wesentlich bessere Rekonstruktion des Signals (blau), obwohl es in der digitalen Repräsentation (orange) zunächst viel unsauberer aussieht, als im linken Beispiel. Mit einem guten Filter lässt sich das Rauschen weiter eliminieren, während die gröberen Bögen im linken Bild Frequenzanteile weit unterhalb der Samplefrequenz darstellen und z.B. bei Audio hörbare Artefakte beisteuern. Die Phasenverschiebung ist bei beiden rekonstruierten Wellen ähnlich.

Beispiel 3

Die nachfolgenden Schaubilder zeigen den Effekt des Dithering bei einer 1-Bit-Wandlung. Der Pegel wird von oben nach unten und rechts nach links kontinuierlich von 0 auf 1.0 erhöht. Der eigentliche Sinus wird mit diesem Signal überlagert und vom 1-Bit-Wandler entsprechend gerundet. Diese 2D-Bild visualisiert den 1-dimenionalen Fall eines Sinussignal etwas besser, da sich durch den Sinus-Quadrat einfach zu beobachtende Schnitte von Halbkugeln bilden.


Beispiel 4

Verbesserte Ansteuerung mit verrauschtem Sinus (4 Punkte):

Fazit

Durch das Dithering lassen sich durch das letzte Bit (ähnlich der PWM) quasi analoge Zwischenwerte und Zeitverläufe darstellen. Je geringer die abzubildende Frequenz = Änderung des Wertes, desto besser wird sie dargestellt. Der Extremfall der Gleichspannung wird praktisch 100%ig richtig abgebildet.

Massgeblich ist, dass das Rauschen oberhalb der Grenzfrequenz des Rekonstruktionsfilters liegt. Dies ist anschaulich der Fall, da es sich um Rechteckimpulse handelt, deren grosser Oberwellenanteil weit jenseits der Filtergrenzfrequenz liegt. Beispiel: Audio-Dither@24kHz (48k/2). Gemäss LaPlace liegen 60% der Information jenseits von 48kHz, während die Grundwelle selber noch im Unhörbaren liegt.

Anwendungen

Analog-Digital-Wandler

Bei hochwertigen AD-Convertern wird per Schaltung ein künstliches Rauschen addiert, das unabhängig vom Eingangssignalpegel in der Grössenordnung des LSB liegt, um schon am Eingang das digitale Quantisierungsrauschen zu reduzieren, das bei der Wandlung entsteht. Moderne AD-Wandler nutzen u.a. derartige Verfahren, in dem sie z.B. auch die Abtastphase variieren, was ähnliche Effekte bewirkt.

Schaltung eines einfachen deterministischen Rauschgenerators

Eine Möglichkeit, bei einfachen AD-Applikationen die Auflösung zu erhöhen, ist somit, dem zu sampelnden Signal ein Rauschen zu überlagern und es mit überhöhter Abtastfrequenz zu samplen. Im nebenstehenden Bild ist ein in realer Logik aufgebauter Signalgenerator gezeigt, der mit einem R2R-DAC arbeitet und ein zum Nullpunkt symmetrisches deterministisches Signal mit entsprechendem Oberwellenspektrum addiert. Das Signal wird einfach dem zu sampelnden Signal durch additives Mischen, z.B. mittles Widerstände überlagert. Damit ist Sicherzustellen, dass der Pegel im Bereich von exakt der Amplitude liegt, die im konkreten Fall 1 digital = das LSB entspricht. Um bei symmetrischem Betrieb, den Offset im Signal zu beseitigen und damit das Berechnen zu vereinfachen, kann gfs ein OPV mit BIAS-Korrektur nachgeschaltet werden.


Kurvenverlauf des erzeugten Signals

Der Generator lehnt sich an das bekannte Verfahren der invertierten Bits an, nutzt aber mit 3 bit nur die unteren 7 Werte. Der Wert 7 würde zusammen mit einer geraden Anzahl von Werten zu einem Problem beim Mittelwert führen. Der mathematische Offset liegt damit immer bei exakt 3,00. Das Rauschen ist durch weiteres Verschieben der Werte und Umkehrung eines Bits dahingehend optimiert, dass ein möglichst gleichmäßiges und gut filterbares Rauschen entsteht. Eine optimale Filterung ergibt sich durch eine Addition von jeweils vielfachen von 7 Werten. Dabei können beliebige 7er-Gruppen verwendet werden, wodurch ein kontinuierliches Prozessieren möglich wird. Man berechnet z.B. den Integerwert der Samples 1...7, dann von 2...8 und so fort und bekommt mit jedem Schritt einen Wert, beim dem das Rauschen schon abgezogen ist, der in konventioneller Weise weiterprozessiert und gefiltert werden kann.


Noise Shaping

Eine besondere Form des ditherns ist das sogenannte noise shaping, bei dem optimierte Rauschmuster auf das Signal angewendet werden. Dadurch entstehen bei Audio z.B. auch Frequenzen im hörbaren Bereich, wodurch sich eigentlich die Signalqualität verschlechtert, aber dadurch können die Frequenzen allgmein besser abgebildet werden und der Rauschanteil, der duch das Quantisieren entsteht, wird in den oberen Frequenzbereich hin verschoben.

Eine Möglichkeit, dies in einem FPGA umzusetzen, beschreibt dieser Artikel: Digitaler Rauschgenerator im FPGA

Bildverbesserung

Um analoge Bilder mit geringerer Auflösung oder gar digital mit 0/1 darzustellen, werden diese mit Ditheralgorithmen bearbeitet, um über die Dichte der Punkte einen analogen Farbeindruck zu erzeugen.

Real Time Dithering

Als besonderen Anwendungsfall kann man bei einer digitalen Ausgabe von Videodaten, die zunächst nur 7 Farben+Schwarz ermöglicht, das dithern einsetzen, um Zwischenwerte zu erzeugen. Bei einer simplen Abwechslung der Farben während der Darstellung des Pixels kann eine Mischfarbe erzeugt werden.

Beispiel für das Digilent Spartan 3E Developmentboard: http://www.mikrocontroller.net/articles/Datei:Vga_test.bit

Weblinks


Fußnoten

  1. Mehrfachausgabe desselben DAC-Wertes aufgrund geringer Frequenz