www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Quantisierung

Autor: Sigmund Kreuzer (sigmundk)
Datum: 07.05.2008 22:48

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: 07.05.2008 23:48

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: 08.05.2008 08:48

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: 08.05.2008 13:05

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: 08.05.2008 16:26

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
Datum: 08.05.2008 16:51

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: 08.05.2008 16:59

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: 08.05.2008 17:05

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

Der Fachbegriff: Midtread.
\Delta_{Midtread} = 2 \times x_{max} / (2^n-1)

Der andere Fall ist Midrise.
\Delta_{Midrise} = 2 \times x_{max} / 2^n
Autor: die ??? (Gast)
Datum: 08.05.2008 17:06

Edit: für bipolare natürlich, unipolar ist der Faktor 2 durch 1 zu
ersetzen.
Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite
Datum: 08.05.2008 17:30

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: 08.05.2008 18:05

> 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
Datum: 08.05.2008 18:12

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
Datum: 08.05.2008 18:18

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: 08.05.2008 19:36

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 Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos verwenden, Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel






webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net