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?
> 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.
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.
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.
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?
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!
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).
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.
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!
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.
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.
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.
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
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.
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.
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.
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
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?
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!