Forum: Mikrocontroller und Digitale Elektronik Quantisierungsfehler


von Jan R. (Gast)


Lesenswert?

Hi,

habe diesen Beitrag hier im Portal gefunden.
http://www.mikrocontroller.net/articles/Quantisierung

Warum haben die bei 94,7.... auf 95 aufgerundet. das ist doch nicht 
korrekt, die stufe 95 ist nicht erreicht der A/D wandler würde also 94 
Ausgeben.

Welche logik steht dahinter?

von Experte (Gast)


Lesenswert?

> das ist doch nicht korrekt,

So ist es. Du hast recht. Richtig wäre 94.

Willkommen in der Welt der Wikis, dem Paradies für Halbwissen und 
Laber-Sülze.

von Erwin (Gast)


Lesenswert?

Da hast du recht.

Woher soll ein AD-Wandler, oder die Logik dahinter wissen,
ob der Analogwert näher bei

94 * 19,35 mV = 1.835,8 V,
 oder
95 * 19,35 mV = 1.855,4 V
 liegt.

Die Ausgabe des AD-Wandlers ist hier 94 - und damit
muss man den Quantisierungsfehler berechnen.

Der WIKI-Autor erklärt richtig, dass der MITTLERE
Fehler über viele verschiedene Werte etwa halb so groß,
wie die Wandler-Auflösung (19,35 mV) ist.

Aber die Aufrundung an dieser Stelle ist irreführend.

von Achim H. (anymouse)


Lesenswert?

Jan R. schrieb:
> Warum haben die bei 94,7.... auf 95 aufgerundet. das ist doch nicht
> korrekt, die stufe 95 ist nicht erreicht der A/D wandler würde also 94
> Ausgeben.
>
> Welche logik steht dahinter?

Man könnte auch folgendes vertreten (wir reden ja über einen idealen 
Quantisierer, ja?):

Man möchte einen Quantisierer mit möglichst kleiner Abweichung (wie es 
technisch umgesetzt wird, ist eine spätere Frage :) ).
Und das würde bedeuten, dass mir der Quantisieren immer den am nächsten 
gelegenen Wert angibt. Also soll er auch die 94,7 bitte als 95 ausgeben, 
ebenso die 95,3. Die Schaltschwellen wären also bei X,5.

Dann gibt es aber zwei Probleme, nämlich einerseits der letzte Bereich 
müsste die Nummer "256" haben (was in der Idealen Theorie der 
Quantisierung(TM) kein Problem darstellt), und zum zweiten sind die 
beiden Halbbereiche -0,5 .. 0,0 und 256,0 ... 256,5 überflüssig.

Beides kann man lösen, wenn man nun die Schaltschwellen auf die ganzen 
Werte setzt; leider würden dadurch die Fehler zwischen gemessenem und 
tatsächlichem Wert deutlich größer, wenn man weiterhin als angezeigten 
Wert die untere Grenze verwendet ( [0 , 1[ -> 0). Man könnte auch die 
obere Grenze nehmen ( [0 , 1[ -> 1), würde keinen Unterschied machen 
(Null-Menge).

Dies kriegt man aber wieder behoben, wenn man als gemessenen Wert die 
Mitte des Intervalls annimmt. Dann würde man als das erste Intervall als 
"0,5" interpretieren.


Für die gemessenen 94,7 würde der Quantisierer also das 95. Intervall [ 
94 , 95 ] anzeigen. Dies dürfte man aber tatsächlich nicht auf die 95 
aufrunden, aber auch nicht auf die 94 abrunden. Der als "gemessen" 
angezeigte Wert müsste also als "94,5" interpretiert werden -- und damit 
würde man wieder bei den +/- 0,5 LSB bleiben. Das Problem ist nur, dass 
der kleinste angezeigte Wert eigentlich "0,5" für das Intervall [0, 1], 
der größte angezeigte Wert jedoch "255,5" für das Intervall [255, 256] 
wäre.

von Jan R. (Gast)


Lesenswert?

Achim Hensel schrieb:
> Jan R. schrieb:
>> Warum haben die bei 94,7.... auf 95 aufgerundet. das ist doch nicht
>> korrekt, die stufe 95 ist nicht erreicht der A/D wandler würde also 94
>> Ausgeben.
>>
>> Welche logik steht dahinter?
>
> Man könnte auch folgendes vertreten (wir reden ja über einen idealen
> Quantisierer, ja?):
>
> Man möchte einen Quantisierer mit möglichst kleiner Abweichung (wie es
> technisch umgesetzt wird, ist eine spätere Frage :) ).
> Und das würde bedeuten, dass mir der Quantisieren immer den am nächsten
> gelegenen Wert angibt. Also soll er auch die 94,7 bitte als 95 ausgeben,
> ebenso die 95,3. Die Schaltschwellen wären also bei X,5.
>
> Dann gibt es aber zwei Probleme, nämlich einerseits der letzte Bereich
> müsste die Nummer "256" haben (was in der Idealen Theorie der
> Quantisierung(TM) kein Problem darstellt), und zum zweiten sind die
> beiden Halbbereiche -0,5 .. 0,0 und 256,0 ... 256,5 überflüssig.
>
Halt das stimmt doch garnicht.

Wenn du x,5 machst wäre der größte Wert 255 er würde zwar schon bei 
254,5 umschalten aber der Bereich entspräche dann von 254,5 bis 256 was 
für mich ein Problem darstellt. Denn das wäre dann nicht PSV +/- 0,5 
sondern über 1.

Was macht man denn in Wirklichkeit setzt man die schaltschwellen auf X,5 
oder auf x?

von Erwin (Gast)


Lesenswert?

Was wird denn hier seitenweise "geklugscheißert"?

Legt man eine unbekannte Spannung an einen AD-Wandler
und verarbeitet das AD-Ergebnis, WEISS MAN NICHT,
ob Ab- oder Aufrunden besser ist!

Im besten Falle nimmt man an, dass die unbekannte
Spannung genau in der Mitte zwischen den Spannungswerten
liegt, die zum AD-Wert und dem nächst höheren AD-Wert
liegt. Der Fehler ist dann

    ANNAHME +/- 0,5 x Auflösung.

Besser gehts nicht.
Wirklich nicht!

Oder, man weiß es besser und genauer...

Aber dann braucht man den AD-Wandler nicht.
Wirklich nicht!

von Jan R. (Gast)


Lesenswert?

Ich meint aber was andres, man könnte einen flashumsetzer ja so bauen, 
dass er bei 0,5V 1,5V USW. Schaltet, statt 1 2 3 USW. Volt macht man das 
oder schaltet jeder ad wandler  der Welt bei den Geraden zahlen.

Also liegen die schaltschwellen eine A/D Wandlers bei X oder bei X+X/2 ? 
(Im Normalfall, vielleicht gibt es ausnahmen).

von Jan R. (Gast)


Lesenswert?

http://de.wikipedia.org/wiki/Quantisierung_(Signalverarbeitung)

Unter Verarbeitung im Artikel steht l die Werte werden auf die nächste 
quantisierungsstufe auf oder abgefunden, wie macht man das, wenn man 
zwischen den Studien nichts sieht?

Beispiel wider 2-Bit Wandler.

Wider die 4 Volt

Der Wandler hat jetzt seine Schaltschwelle bei 1V 2V.....

Die eingangsspannung ist 0,7V woher soll der Computer jetzt wissen ob er 
auf oder abrunden soll?

Das ginge nur, wenn ich meinen ad Wandler umbauen würde, sodass er bei 
0,5 V  1,5V USW. Schaltschwellen hat.

Mit. Deiner Annahme

00 -->'0,5
01 --> 1,5

Kommen wir nicht weiter, da beimdir die Schaltschwelle weiterhin bei 1V 
sitzt, natürlich ist die mittlere Spannung aber eine auf und Abrundung 
ist somit auch weiterhin nicht möglich.

Eine Lösung wären ein addieren,,der immer 0,5 Volt aufaddiert aber der 
Aufwand wäre jetzt natürlich irre,

Nochmal abgekürzt mein Problem

Wikipedia Artikel sagt bei größer 0,5V wird auf 01 aufgerundent darunter 
auf 00 ------> wie soll das gehen! wenn der ADU nur 0;1;2;3 V erkennt, 
woher soll er wissen, ob das jetzt größer x,5 oder kleiner ist. Wie ist 
das bei Wikipedia gemeint? ------> wie löst man das Problem im Reallife. 
In den Verschiedenen Wandlern? Würden diese die schaltschwellen in der 
Reihenfolge 1;2;3;4 USW. Oder in der Reihenfolge 0,5;1,5 USW haben. 
----> Vielen Dank.

von Erwin (Gast)


Lesenswert?

Kein AD-Wandler macht sich die Mühe, das gesampelte Signal
vielleicht auf- oder abzurunden! Er rundet IMMER (!!!) ab.

Auch nicht, wenn es in Wikipedia mal eine unglückliche
Formulierung gab. - Diese ICs machen das weiter so!

Auch nicht, wenn du jetzt noch jahrelang auf diesem Wikipedia-
Beitrag herumhüpfst! - Das stört diese ICs nicht!

von Kein Name (Gast)


Angehängte Dateien:

Lesenswert?

Da hilft ein Blick ins Datenblatt.

Beim Pic AD-Wandler wird theoretisch immer abgerundet, wie man in der 
Grafik sieht.

Unter Electrical Charakteristics kommt dann aber ganz was anderes:
+-1 LSB Integral Linearity Error
+-1 LSB Differential Linearity Error
+-2 LSB Offset Error
+-1 LSB Gain Error

Wenn im Worst Case der Wert um 5 Bit abweichen kann, kommt es auf die 
Rundung auch nicht mehr an.

... und dann kommt noch die Drift der unteren und oberen 
Referenzspannungen dazu.

von Peter R. (pnu)


Lesenswert?

Ob ab- oder aufgerundet wird, bestimmt zunächst das Wandlerverfahren.

Dazu kommt auch noch, wie weit ein Rauschen an der Rundung beteiligt 
ist. Rauschen führt dazu, dass die Rundungsgrenze in Richtung Mitte des 
Intervalls verschoben wird.

Wenn das Runden durch Verändern von Bits erreicht wird, kann außer dem 
Löschen niederwertiger Bits auch ein anderes Rundungsverfahren 
eingesetzt werden z.B. Mittelwertbildung aus mehreren samples mit 
anschließender Division durch N oder kaufmännisches Runden.

: Bearbeitet durch User
von Anja (Gast)


Lesenswert?

Kein Name schrieb:
> Beim Pic AD-Wandler wird theoretisch immer abgerundet,

Welcher PIC? (das scheint ein Datenblatt eines relativ alten PICs zu 
sein).

Neuere PICs oder z.B. der MCP3021 haben die Schaltschwellen meist bei .5 
spezifiziert:

http://ww1.microchip.com/downloads/en/DeviceDoc/41674B.pdf
Seite 116

http://ww1.microchip.com/downloads/en/DeviceDoc/21805B.pdf
Seite 13

Gruß Anja

von Jan R. (Gast)


Lesenswert?

Kein Name schrieb:
> Da hilft ein Blick ins Datenblatt.
>
> Beim Pic AD-Wandler wird theoretisch immer abgerundet, wie man in der
> Grafik sieht.
>

>

> ... und dann kommt noch die Drift der unteren und oberen
> Referenzspannungen dazu.

Deiner tut doch auch auf der Mitte der Stufen umschalten also in der 
Mitte.

von Jan R. (Gast)


Lesenswert?

Anja schrieb:
> Kein Name schrieb:
>> Beim Pic AD-Wandler wird theoretisch immer abgerundet,
>
> Welcher PIC? (das scheint ein Datenblatt eines relativ alten PICs zu
> sein).
>
> Neuere PICs oder z.B. der MCP3021 haben die Schaltschwellen meist bei .5
> spezifiziert:
>
> http://ww1.microchip.com/downloads/en/DeviceDoc/41674B.pdf
> Seite 116
Dieser AD Wandler bildet tatsächlich den Mittelwert das heißt, unterhalb 
0.5LSB
Wird 0 ausgegeben darüber 1

> http://ww1.microchip.com/downloads/en/DeviceDoc/21805B.pdf
> Seite 13

Dieser A/D Wandler hat seine schaltschwellen nicht bei x,5 LSB sondern 
bei X LSB hier wird immer nur der Mittelwert angenommen, wie Erwin schon 
gesagt hat.
In Wirklichkeit ist aber alles bis 1LSB 0 und alles zwischen 1 und 2 LSB 
1 es wird nur 1.5 Angenommen, um ein LSB +/- 0,5 vorzulügen. Gerundet 
wird hier aber nix.
>

>
> Gruß Anja

von Achim H. (anymouse)


Lesenswert?

Peter R. schrieb:
> Ob ab- oder aufgerundet wird, bestimmt zunächst das Wandlerverfahren.

Noch nicht mal. Ob auf- oder abgerundet wird, bestimmt die Logik hinter 
dem ADC, einschließlich des Anzeigeelements.

Der ADC kann nur sagen, in welchem Bereich die Größe liegt, also 00, 01, 
10, 11. Was oben von Peter R gesagt wurde bestimmt, wo die 
Schaltschwellen liegen, und wie scharf diese eingehalten werden.

Die Logik dahinter (ggf. auch der Mensch dabei) interpretiert diese 
Punkte als Messgröße, macht also aus 00 ein "0 Volt", aus 01 dann "1 
Volt", etc.

--

Man muss also zwischen Eingangsspannung U_in und angezeigter Spannung 
U_disp unterscheiden.

--

Wenn man nun den ADC so beschaltet, dass die Schaltschwellen für 01 bei 
den Eingangsspannungen unten U_in=1V bzw. oben U_in=2V liegen, liefert 
die obige Interpretation einen Wert, der tw. bis zu 1 LSB nach unten 
abweicht, aber kaum nach oben.

Hier gibt es zwei Lösungen:

(1) Die Auswertungslogik wird geändert. Also wird 00 als "0,5 Volt" 
interpretiert, und "11" als "3,5 Volt". Würde aber eine sehr unübliche 
Anzeige benötigen, um immer die 0,5 in der Darstellung zu haben (z.B. 
eine fest auf "5" eingestellte 7-Segmentanzeige).

(2) Man ändert die Schaltschwellen, und verzichtet auf jeweils ein 
halbes LSB Eingangsbereich an den beiden Grenze. Also 00 bleibt "0 
Volt", aber ab U_in=0,5V wird "1 Volt" angezeigt. Dafür lässt man zu, 
dass ab U_in=3,5V kein Messwert mehr angezeigt wird. Hiermit kann man 
schön und genau die vier(!) Spannungsbereiche "0 Volt", "1 Volt", "2 
Volt" und "3 Volt" darstellen. Das kann man etwa erreichen, indem man 
vor dem eigentlichen Wandlungsvorgang zunächt 0,5V von der 
Eingangsspannung abzieht, oder der Wandler etwa durch kontrolliertes 
Rauschen bereits von sich aus die Schaltschwellen auf die 0,5LSB liegt.

Hier geht es aber immer noch um den idealen ADC. Und dieser besitzt 
einen (minimalen) Quantisierungsfehle von 0,5LSB (plus ggf. weitere 
Abweichungen durch eine problematische Interpretation des Ausgabewertes 
:) ). Der technische Baustein ist aber noch eine andere Sache.

von Jan R. (Gast)


Lesenswert?

Achim Hensel schrieb:
> Peter R. schrieb:



>
> (2) Man ändert die Schaltschwellen, und verzichtet auf jeweils ein
> halbes LSB Eingangsbereich an den beiden Grenze. Also 00 bleibt "0
> Volt", aber ab U_in=0,5V wird "1 Volt" angezeigt. Dafür lässt man zu,
> dass ab U_in=3,5V kein Messwert mehr angezeigt wird. Hiermit kann man
> schön und genau die vier(!) Spannungsbereiche "0 Volt", "1 Volt", "2
> Volt" und "3 Volt" darstellen. Das kann man etwa erreichen, indem man
> vor dem eigentlichen Wandlungsvorgang zunächt 0,5V von der
> Eingangsspannung abzieht, oder der Wandler etwa durch kontrolliertes
> Rauschen bereits von sich aus die Schaltschwellen auf die 0,5LSB liegt.

Wenn du noch vom 2Bit ADU ausgehst, wäre die Obergrenze Gäbe es über 3V 
keinen Messwert mehr. Ich hätte also immer 0,5 LSB schritte bis auf die 
letzte Stufe die hätte 1,5 LSB
Außerdem musst du 0,5V auf den Messwert aufaddieren.  Denn wenn du 0,5 
abziehst, würde der ADU erst bei 1,5V auf 01 umschalten. Und erst bei 
3,5 auf 11 das willst du ja nicht, du willst ja, das bei 0,5 Volt 
umgeschaltet wird.
>
> Hier geht es aber immer noch um den idealen ADC. Und dieser besitzt
> einen (minimalen) Quantisierungsfehle von 0,5LSB (plus ggf. weitere
> Abweichungen durch eine problematische Interpretation des Ausgabewertes
> :) ). Der technische Baustein ist aber noch eine andere Sache.

von Achim H. (anymouse)


Lesenswert?

Nachtrag:

Kein Name schrieb:
> Beim Pic AD-Wandler wird theoretisch immer abgerundet, wie man in der
> Grafik sieht.

Und als Eingangsgröße wird nur der Bereich 0,5 LSB bis 1023,5 LSB 
angegeben...

Eine andere Idee kam mir gerade: Vermutlich könnte man das mit dem 
Quantisierungsfehler besser erklären, wenn man einen symmetrischen 
Eingangsbereich verwendet (z.B. -3 .. 3). Dann kann man die Grenzen aus 
dem Koordinatenursprung heraushalten, und sie stören weniger bei der 
Berechnung. Zum zweiten kann man dann die Schwellenwerte ohne große 
Verwirrung auf die 0,5LSB setzen.

von Jan R. (Gast)


Lesenswert?

Achim Hensel schrieb:
> Nachtrag:
>
> Kein Name schrieb:
>> Beim Pic AD-Wandler wird theoretisch immer abgerundet, wie man in der
>> Grafik sieht.
>
> Und als Eingangsgröße wird nur der Bereich 0,5 LSB bis 1023,5 LSB
> angegeben...
>
> Eine andere Idee kam mir gerade: Vermutlich könnte man das mit dem
> Quantisierungsfehler besser erklären, wenn man einen symmetrischen
> Eingangsbereich verwendet (z.B. -3 .. 3). Dann kann man die Grenzen aus
> dem Koordinatenursprung heraushalten, und sie stören weniger bei der
> Berechnung. Zum zweiten kann man dann die Schwellenwerte ohne große
> Verwirrung auf die 0,5LSB setzen.

Was soll dafür übersichtlicher werden? Du hattest einen Denkfehler. 
Rechne 0,5 zum Messwert hinzu statt abzuziehen und die Welt ist ok. Dann 
hast du zwar an der Obergrenze 1,5LSB das ist halt so siehe

http://ww1.microchip.com/downloads/en/DeviceDoc/41674B.pdf Seite 116

von spess53 (Gast)


Lesenswert?


von Jan R. (Gast)


Lesenswert?

Bei Digitalreglern ist der Quantisierungsfwhler ja auch so ne Sache.

Der DA wandler der die Spannung auf die regelstrecke gibt, muss 
auflösender däsein, als der AD im Programm muss für den Sollwert eine 
Toleranz eingestellt werden, dass der Regler nicht schwingt.

Hatte mal nen Drehzahlregler gebaut, wo der AD auflösender war als der 
DA nun hat der Motor geschwungen und gestottert, da der Sollwert 
aufgrund der höheren Auflösungdes DA Wandlers nicht erreichtwerden. Dann 
habe ich 3 Intervalle oder Tolleranz gegeben und das Problem war 
gegessen die Regelung lief. Hätte man das noch ohne Toleranz machen 
können?

von Erwin (Gast)


Lesenswert?

Ach du meine Güte!

Erst dieser Rundungsquatsch im Wiki-Beitrag,
dann diese Grafiken von PIC und MCP.

Also basteln (!) diese Firmen AD-Wandler, die
nicht die Standard-R2R-Übertragungskurve haben:

 Digital
   |
 11|            ---
   |           |
 10|        ---
   |       |
 01|    ---
   |   |
 00|---+---+---+---+--Analog
   0   1   2   3   4

Sondern eine mit Offset von -0,5 LSB:

 Digital
   |
 11|          -----
   |         |
 10|      ---
   |     |
 01|  ---
   | |
 00|---+---+---+---+--Analog
   0   1   2   3   4

Und was ändert das am Quantisierungsfehler?
Grundsätzlich überhaupt nichts!
Wenn diese versetzte Kurve nicht nur Werbe-Schnick-
schnack für Dummies ist, muss man beim Runden eben
alles um 0,5 LSB verschieben.

Das Runden MUSS aber weiterhin vom Programm(-ierer)
gemacht werden, der AD-Wandler kümmert sich nicht
die Bohne darum.
IM BESTEN FALL ist bei diesen Varianten
der AD-Wert auf 0...1 LSB,
oder aber auf +/- 0,5 LSB genau.

- Man hat also IMMER einen Unsicherheitsbereich
von bestenfalls 1 LSB!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.