mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Quantisierung


Autor: Sigmund Kreuzer (sigmundk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wir behandeln in der Schule zur Zeit A/D Umsetzer. Leider ist sich die 
Fachliteratur nicht ganz einig wie man ein Quant berechnet.

Laut einigen Fachbüchern bzw. einen Artikel hier ist ein Quant 
Messbereich/2^n
Siehe http://www.mikrocontroller.net/articles/Quantisierung

In anderen Fachbüchern findet man einen Quant mit Messbereich/((2^n)-1) 
angegeben.


Was ist nun richtig?
Sicher ist die Abweichung in der Praxis zu vernachlässigen, da aber eine 
Schulaufgabe ansteht würde es mich interessieren.
Wir haben heute in der Klasse 3 Stunden darüber diskutiert, leider ohne 
auf eine einheitliche Lösung zu kommen.

Meiner Meinung nach ist die zweite Lößung richtig, weil man z.B. mit 2^8 
= 256 Spannungswerte darstellen kann. Zwischen diesen Werten gibt es 
aber nur 255 Stufen.

Vielen dank für euere Hilfe

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der höchste Ausgabewert des A/D-Umsetzers ist zwar 2^n-1, weil die
Zählung bei 0 beginnt, trotzdem ist ein Quant gleich der
Referenzspannung geteilt durch die Anzahl der möglichen Werte, also
Uref/2^n. Der A/D-Umsetzer liefert bei einer gegebenen
Eingangsspannung Ue folgende Werte:

  0    für     0                <=  Ue  <            Uref/2^n
  1    für            Uref/2^n  <=  Ue  <     2    * Uref/2^n
  2    für     2    * Uref/2^n  <=  Ue  <     3    * Uref/2^n
  3    für     3    * Uref/2^n  <=  Ue  <     4    * Uref/2^n
  .     .      .          .          .        .         .
  .     .      .          .          .        .         .
2^n-2  für  (2^n-2) * Uref/2^n  <=  Ue  <  (2^n-1) * Uref/2^n
2^n-1  für  (2^n-1) * Uref/2^n  <=  Ue  <            Uref

Wegen des <-Zeichens in der letzten Zeile liegt die Referenzspannung
Uref also streng genommen haarscharf außerhalb des Messbereichs. Für
sie müsste der A/D-Umsetzer theoretisch 2^n liefern, was er aber nicht
kann.

Hier gibt's auch noch ein paar Informationen darüber:

  http://www.mikrocontroller.net/articles/AVR-Tutori...

Autor: Thomas Bremer (Firma: Druckerei Beste) (virtupic)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaube, das ist das klassische Problem beim Stufenzählen. Ein n-Bit 
ADC / DAC kann 2^n verschiedene Werte wandeln. Dazischen hat er 2^n-1 
Stufen.

Baue eine Treppe mit vier Stufen, dann brauchst du ein Geländer. 
(Voschrift.) Diese Treppe hat vier senkrechte Kanten - aber fünf 
verschiedene Höhen!

Okay, ich weiß, das ist nicht wirklich hilfreich. Ich würde die 2^n 
nehmen. Es kommt normalerweise auf die Werte an. Und in theroetischen 
Überlegungen / Berechnungen bist du damit auch besser dran.

virtuPIC
/ggadgets for tools & toys

Autor: Unit* (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein Quant eines linearen (!) AD Wandlers ist Messbereich/2^n groß. 
Punkt, aus. n = Auflösung des A/D Wandlers in [bit].

Autor: Sigmund Kreuzer (sigmundk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probier mal M/(2^n) bei folgenden beispiel mit 2 Bit, Messbereich 10V

11b=10V
10b=6,66V
01b=3,33V
00b=0V

Ein Quant ist der Unterschied den das LSB ausmacht -> 3,33V.

Uq=10V/((2^2)-1)=3,33V
Uq=10V/((2^2))=2,25V

Eigentlich kann nur (2^n)-1 stimmen!

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sigmund Kreuzer wrote:
> Probier mal M/(2^n) bei folgenden beispiel mit 2 Bit, Messbereich 10V
>
> 11b=10V
> 10b=6,66V
> 01b=3,33V
> 00b=0V
>
> Ein Quant ist der Unterschied den das LSB ausmacht -> 3,33V.

Du musst dir die Begrenzungen der Stufen überlegen. So könnte eine 
Umsetzung mit M/2^n breiten Stufen aussehen:

00 = 0.0-2.5 V
01 = 2.5-5.0 V
10 = 5.0-7.5 V
11 = 7.5-10  V

Allerdings darfst du einen Wert von "00" dann nicht als "0 V" 
interpretieren, sondern entsprechend der Mitte des Intervalls als "1.75 
V", sonst liegst du bis zu 2.5 V neben dem tatsächlichen Wert. Aus 
diesem Grund wird üblicherweise folgende Kennlinie verwendet, bei der 
die unterste Stufe 1/2 LSB breit ist:

00 = 0.0-1.25 V
01 = 1.25-3.75 V
10 = 3.75-6.25 V
11 = 6.25-10 V

(EDIT 18:11: statt der 1.25 stand da 1.5, und entsprechende Folgefehler)

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bin gerade abgelenkt worden, deswegen überlappt sich mein Betrag mit
dem von Andreas. Trotzdem vielleicht zur Vervollständigung:

@Sigmund:

Du musst berücksichtigen, dass ein bestimmter Digitalwert nicht für
einen einzelnen Spannungwert, sondern für ein ganzes Spannung-
intervall steht. Bei deinem 2-Bit-Umsetzer mit 10V Referenzspannung:

  00b:  0,0V bis unter  2,5V
  01b:  2,5V bis unter  5,0V
  10b:  5,0V bis unter  7,5V
  11b:  7,5V bis unter 10,0V

Alle vier Spannungsintervalle sind gleich groß, nämlich 2,5V,
wunderbar.

Wo liegen nach deiner Theorie die Schwellwerte, an denen der
Digitalwert jeweils auf den nächst höheren springt? Bei 3,33V und
6,66V und 10V? Dann würden die Intervalle folgendermaßen aussehen:

  00b:  0,00V bis unter  3,33V   (Intervallbreite 3,33V)
  01b:  3,33V bis unter  6,66V   (Intervallbreite 3,33V)
  10b:  6,66V bis unter 10,00V   (Intervallbreite 3,33V)
  11b: 10,00V bis       10,00V   (Intervallbreite 0,00V, huch?)

D.h. der höchste Digitalwert wird nur dann ausgegeben, wenn die
Eingangsspannung exakt 10,00V beträgt, was so gut wie nie passiert,
da die Spannung immer ein wenig größer oder kleiner sein wird.


@Andreas:

Du schriebst:
> Üblicherweise verwendet wird allerdings folgende Kennlinie, bei der die
> unterste Stufe 1/2 LSB breit ist:
>
> 00 = 0.0-1.5 V
> 01 = 1.5-4.0 V
> 10 = 4.0-6.5 V
> 11 = 6.5-10 V

Wird das tatsächlich so gemacht? Ich habe immer gedacht, die einzelnen
Spannungsintervalle sind bei linearen ADUs immer gleich groß. Oder
gibt es da Unterschiede zwischen den einzelnen Typen?

Autor: die ??? (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas Schwarz wrote:
> Üblicherweise verwendet wird allerdings folgende Kennlinie, bei der die
> unterste Stufe 1/2 LSB breit ist

Der Fachbegriff: Midtread.

Der andere Fall ist Midrise.

Autor: die ??? (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Edit: für bipolare natürlich, unipolar ist der Faktor 2 durch 1 zu 
ersetzen.

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jein, das mag für Quantisierung in Software gelten, bei ADCs ist die 
Schrittweite trotzdem üblicherweise Vref/2^n.

@yalu: Die meisten machen das so, beim AVR sieht man es auch im 
Datenblatt. In dieser Application Note sind auf Seite 3 beide Varianten 
anschaulich dargestellt: 
http://www.freescale.com/files/microcontrollers/do...

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Die meisten machen das so, beim AVR sieht man es auch im Datenblatt.

In dem Treppendiagramm zur Differential Non-Linearity (DNL) ist mir
das auch schon aufgefallen. Aber da soll ja etwas ganz anderes
demonstriert werden. Wenn die Schwellwerte tatsächlich um 0,5 LSB in
Richtung Null verschoben wären, hätte ich erwartet, dass im Text ein
paar Worte dazu stehen. Oder habe ich da etwas übersehen?

Ich habe mich sowieso schon gefragt, ob ich bei Messungen mit
Mittelung über sehr viele Werte, wo die Auflösung prinzipiell besser
als 1 LSB werden kann, zu dem Ergebnis noch 0,5 LSB hinzuaddieren muss
oder nicht. Bisher bin ich davon ausgegangen, dass ich es muss. Deiner
Meinung nach muss man es also nicht.

Diese Überlegung ist natürlich in sofern etwas müßig, da der
Offset-Fehler je nach Controller-Typ mit typisch 1 bis 2 LSB gößer als
die diskutierte Verschiebung um 0,5 LSB ist.

Ein ADC von Analog, den ich gerade wahllos herausgegriffen habe, hat
diese 1/2-LSB-Compensation übrigens nicht:

  http://www.analog.com/UploadedFiles/Data_Sheets/AD7819.pdf

Um aber wieder auf die ursprünglich Frage zurückzukommen: Auch in den
AVR-Datenblättern taucht bei der Umrechnung der Analogwerte eine 1024
(2^10) in den Formeln auf und keine 1023 (2^10-1).

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
yalu wrote:
> @Andreas:
>
> Du schriebst:
>> 00 = 0.0-1.5 V

Das sollte natürlich 1.25 heißen, habe es oben korrigiert.

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
yalu wrote:
>> Die meisten machen das so, beim AVR sieht man es auch im Datenblatt.
>
> In dem Treppendiagramm zur Differential Non-Linearity (DNL) ist mir
> das auch schon aufgefallen. Aber da soll ja etwas ganz anderes
> demonstriert werden. Wenn die Schwellwerte tatsächlich um 0,5 LSB in
> Richtung Null verschoben wären, hätte ich erwartet, dass im Text ein
> paar Worte dazu stehen. Oder habe ich da etwas übersehen?

So richtig schön wie bei Freescale ist es leider nicht erklärt, aber 
unter "ADC Accuracy Definitions" wird es nebenbei erwähnt:
• Offset: The deviation of the first transition (0x000 to 0x001) 
compared to the ideal transition (at 0.5 LSB).

Autor: Sigmund Kreuzer (sigmundk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
yalu wrote:

> Wo liegen nach deiner Theorie die Schwellwerte, an denen der
> Digitalwert jeweils auf den nächst höheren springt? Bei 3,33V und
> 6,66V und 10V? Dann würden die Intervalle folgendermaßen aussehen:
>
>   00b:  0,00V bis unter  3,33V   (Intervallbreite 3,33V)
>   01b:  3,33V bis unter  6,66V   (Intervallbreite 3,33V)
>   10b:  6,66V bis unter 10,00V   (Intervallbreite 3,33V)
>   11b: 10,00V bis       10,00V   (Intervallbreite 0,00V, huch?)
>
> D.h. der höchste Digitalwert wird nur dann ausgegeben, wenn die
> Eingangsspannung exakt 10,00V beträgt, was so gut wie nie passiert,
> da die Spannung immer ein wenig größer oder kleiner sein wird.


Meine Denkweise geht eigentlich denau den umgekehrten weg D->A
bei 00b soll idealerweise 0V rauskommen bzw. bei 11b = 10V
dann bleibt für 01b = 3,33V und 10b=6,66V
die schaltschwellen liegen bei +-0,5 Quant also
00b = -unendlich bis 1,666
01b = 1,666 bis 4,999
10b = 4,999 bis 8,333
11b = 8,333 bis +unendlich

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.