Erhöhung der AD-Auflösung durch oversampling ?

Gast #3363678
Lesenswert?

Hallo zusammen,
mir ist folgender BASCOM code begegnet. Dabei geht es um Erhöhung der 
Auflösung/Genauigkeit durch oversampling. In diesem Fall von 10bit auf 
13bit.

Was programmtechnisch abläuft ist schon klar.

Aber welches Prinzip macht man sich hier zu eigen ?

Wikipedia hab ich schon gelesen. Da geht es vor allem um Frequenzen. 
Weshalb aber die Auflösung höher wird ist nicht ganz klar.


...
Start Adc
Do
Sumx = 0
For N = 1 To 64
X = Getadc(1)
'Power Adcnoise
Sumx = Sumx + X
Next A

'Sx = Bin(sumx)
'Vx = Right(sx , 3)
'C = Val(vx)
C = Sumx / 8
C = C - 3584
C = C * 0.175

Locate 1 , 1
Lcd "X=" ; Fusing(c , "#.##")

Loop
...

Quelle:
http://www.mcselec.com/index.php?option=com_content&task=view&id=325&Itemid=57
(Firma: Raich Gerätebau & Entwicklung) #3363750
Lesenswert?

Wenn ich ein unkorreliertes Signal mittle, dann sinkt das Rauschen auf 
1/Wurzel(Mittelungsanzahl). Dies ist ganz allgemein gültig. Ob du da von 
10 auf 13 Bit Auflösung kommst ist allerdings mehr als fraglich. Mehr 
als 11 stabile Bit's werden wohl nicht drin sein.

Grüsse
Gast #3363758
Lesenswert?

Gebhard Raich schrieb:
> Wenn ich ein unkorreliertes Signal mittle, dann sinkt das Rauschen auf
> 1/Wurzel(Mittelungsanzahl). Dies ist ganz allgemein gültig. Ob du da von
> 10 auf 13 Bit Auflösung kommst ist allerdings mehr als fraglich. Mehr
> als 11 stabile Bit's werden wohl nicht drin sein.

Das ist natürlich Quark. Warum schreibst du das? Mitteilungsbedürfnis?

Hier wurde der Einstieg bereits genannt: 
Beitrag "Re: Erhöhung der AD-Auflösung durch oversampling ?"

Lesen, verstehen, anwenden.
Gast #3363782
Lesenswert?

Hallo da bin ich wieder und etwas schlauer als zuvor.

Danke  M. B.

>Atmel Application Note
>AVR121: Enhancing ADC resolution by oversampling

War richtig Gold wert.

@Gebhard Raich
Solltest Du auch mal lesen.

@alle

Wenn ich mir jetzt daraufhin mein Beispiel 
http://www.mcselec.com/index.php?option=com_content&task=view&id=325&Itemid=57 
nochmal anschaue, sehe ich dass dort kein zusätzliches Rauschsignal (wie 
auch immer) eingekoppelt wird. Hat der Anwender das vergessen ?

Winne
Gast #3363795
Lesenswert?

winne schrieb:
> nochmal anschaue, sehe ich dass dort kein zusätzliches Rauschsignal (wie
> auch immer) eingekoppelt wird. Hat der Anwender das vergessen ?

Das ist ja kein Muss. Nur wenn sich das Signal nicht "stark" genug 
ändert, also 1 LSB, dann musst du ein zusätzliches Störsignal 
einbringen.
Da es sich aber um eine Beschleunigungsmessung handelt, wird da wohl von 
Grund auf genug Rauschen vorhanden sein.
Gast #3363799
Lesenswert?

Beim Oversampling ist auch wichtig, dass das Signal etwas Rauschen 
beinhaltet. Und zwar mehr als eine Quantisierungsstufe und das Rauschen 
muss mittelwertsfrei sein.
Angenommen, das rauschfreie Signal sei für einen Moment konstant und 
liegt irgendwo zwischen Quantisierungsschwellen, dann erhält man einen 
konstanten Messwert. Da bringt Oversampling nichts. Fügt man nun aber 
Rauschen hinzu, dann "springt" der Messwert ab und zu einen Wert nach 
oben oder nach unten. Je öfter der Messwert nach oben springt, desto 
mehr liegt das tatsächliche Signal in der Nähe der oberen 
Quantisierungsschwelle. Je öfter der Messwert nach unten springt, desto 
mehr liegt das tatsächliche Signal in der Nähe der unteren 
Schaltschwelle.

Zahlenbeispiel:
Echter Messwert: 100,3
Eine Messung: 100
Messwerte 4x Oversampling: 100; 101; 100; 100 => Mittelwert 100,25
#3363814
Lesenswert?

Ohne zusätzliches Signal (Rauschen, Dreieck) kriegst Du auch bei einer 
Million Messungen kein zusätzliches Bit Auflösung raus.

Das Rauschen muß absolut gleich verteilt sein, was auf die meisten 
Störquellen (z.B. 50Hz Netzbrumm) nicht zutrifft.
Einfacher ist daher, ein Dreick oder Sägezahn mit einzuspeisen.

Und es erhöht sich auch maximal nur die Auflösung, nie aber die 
Genauigkeit.
(Firma: Raich Gerätebau & Entwicklung) #3363893
Lesenswert?

>Gebhard Raich schrieb:
> Wenn ich ein unkorreliertes Signal mittle, dann sinkt das Rauschen auf
> 1/Wurzel(Mittelungsanzahl). Dies ist ganz allgemein gültig. Ob du da von
> 10 auf 13 Bit Auflösung kommst ist allerdings mehr als fraglich. Mehr
> als 11 stabile Bit's werden wohl nicht drin sein.

>Das ist natürlich Quark. Warum schreibst du das? Mitteilungsbedürfnis?

Aha, wieso denn Davis?
Da steht genau das drin was ich oben formuliert habe. Das alles 
funktioniert auch im analogen Bereich. Das mann da bestenfalls 
theoretisch die Auflösung bis ins Unendliche treiben kann, sollte klar 
sein. Das Problem sind dann korrelierte Störsignale, die's bei einem 
popeligen MC-ADC immer gibt, die alles zunichte machen.Da reicht schon 
das periodische Ausgeben eines Resultats via UART. Auf das ist der 
AVR-Fuzzi nicht eingegangen, bei denen funktionieren ihre MC's immer 
ideal und ohne Störungen.

Grüsse
Gast #3363932
Lesenswert?

Manchmal braucht man, um Meßwerte richtig auf einem Display anzuzeigen, 
etwas Oversampling. Ich machte es dann auch mal so, einfach mehrere 
Werte zu addieren, und später wieder durch die Anzahl Werte zu teilen. 
Die Meßdauer wird aber durch die Anzahl erheblich verlängert. Ich 
erhöhte damit einfach nur die Auflösung.

Man kann das mal so machen. Beispiel: Ich habe eine Küchenwaage, die nur 
ganze Gramm anzeigt. Mit dem Auge sieht man aber, ob ein Gegenstand 
33,2g oder 33,5g oder 33,8g wiegt, denn je nach dem springt die Anzeige. 
Wenn man das über 10 Messungen mittelt, kann man auch die 
Nachkommastelle anzeigen.

Ich machte es in einer Anwendung mehr wegen der Anzeigeoptik, als wegen 
der Genauigkeit. Vorher wurden nur Nachkommawerte 4 und 9 angezeigt, und 
ich wunderte mich, wo denn die anderen Zahlen blieben. Das ist einfach 
unschön.

Na ja, das ganze in meiner Anfangszeit vor 20 Jahren, mit einem 8051-er, 
der einen 10-bit-ADC hat. Für eine durchgängige Anzeige aller 
Zahlenwerte ohne Lücken brauchte ich da 12 bit.
Gast #3363983
Lesenswert?

Peter Dannegger schrieb:

> Das Rauschen muß absolut gleich verteilt sein

Nein, Unsinn, muß es natürlich nicht. Es darf sogar eine diskrete 
Frequenz statt weißen Rauschens sein. Sie darf nur nicht mit der 
Samplefrequenz korrelieren. Also hinreichend weit weg von der 
Samplefrequenz (am besten deutlich oberhalb) und nicht mit dieser auf 
irgendeinem Weg synchronisiert.

Die Gleichverteilung ergibt sich dann (bei hinreichend langer Meßzeit, 
also genau der Fall des vielfach-Oversampling) aus dieser fehlenden 
Korrelation, also aus der Quasiezufälligkeit der Abtastzeitpunkte 
bezogen auf den Momentanwert des periodischen Helpersignals.

Ich fürchte, du hast, als das in der Vorlesung dran war, am Abend vorher 
etwas zu sehr das Studentenleben genossen und deshalb nur die Hälfte der 
Vorlesung mitbekommen...
Gast #3364345
Lesenswert?

Oh, bin ich da wieder in eine esoterische Diskussion
reingekommen?

Da kommt der Glaubenssatz:
> Atmel Application Note
> AVR121: Enhancing ADC resolution by oversampling

Und wer (wie  m.n. (Gast)) nicht voller Ehrfurcht umgehend
jeden Zweifel fallen lässt, muss fortan in der Hölle schmoren
und wird niemals des erhabenen Anblicks von 1 bis 2 Stellen
mehr hinter dem Komma teilhaftig werden, die aber bei günstigen
Umfeld bestenfalls AUFLÖSUNG, aber nicht GENAUIGKEIT
bedeuten...

Ich stelle mir da so bärtige Kerle mit Kapuzen vor,
die schon seit Jahrzehnten ihren Tiny25 samplen lassen,
um endlich von der Spannung eines Weston-Elements die
273ste und 274ste Stelle hinter dem Komma angeben zu
können.

Die Welt wartet darauf!

Das Ergebnis kann ich schon mal verraten: 42
Gast #3364350
Lesenswert?

Schaut mal in die meisten Oszis rein, da sind auch meistens nur 8-Bit 
ADCs drin ;-)
Ganz neue ausgenommen.

Nachteil dabei ist halt, dass die Dynamik kleiner wird.
Beispiel  Rechtecksignal.
Mittelt man z.B da, kann es passieren dass man die Flanken zwar noch gut 
sieht aber das uberschwingen geht durch die Mittelung unter...
#3364503
Lesenswert?

c-hater schrieb:
> Ich fürchte, du hast, als das in der Vorlesung dran war, am Abend vorher
> etwas zu sehr das Studentenleben genossen und deshalb nur die Hälfte der
> Vorlesung mitbekommen...

Nö, ich habs einfach ausprobiert:

ATmega8 genommen, 256 Meßwerte addiert * 3 und dann durch 256 geteilt, 
weil ich bis 3000V messen wollte.
Und dann eine genaue einstellbare Spannungsquelle angeschlossen.
Resultat: Es ließen sich nur Vielfache von 3 stabil anzeigen, also 0V, 
3V, 6V, 9V usw. Zwischenwerte wurden nur kurzzeitig beim Ändern der 
Eingangsspannung angezeigt.

Es mag sein, daß es schlechte ADCs gibt, die intern rauschen, wie sau. 
Der AVR-ADC gehört nicht dazu.
Da ginge es wohl nur mit Verzicht auf Abblockkondensatoren, miese VCC 
und mieses Layout.
Aber ich hab lieber stabile 10Bit, anstatt rumpelige 12Bit, die dann 
effektiv nur auf 8Bit reproduzierbar sind.
Gast #3364596
Lesenswert?

Konkretes Beispiel:

Forderung:
Wasserpegel einer Zisterne 0 - 10 m
Anzeige in 1 mm Schritten.
Genauigkeit +/- 5 mm

Da brauche ich mehr als 11 Bit. (14Bit)

Man kann annehmen, dass bei diesem Beispiel die Genauigkeit und 
(Anzeige)-Interval hier nicht so wichtig sind, oder man könnte das ganze 
auch in dm anzeigen.

Das ist aber nicht üblich. Schon aus dem Wetterbericht sind wir gewohnt 
in mm "zu denken".

Und Schritte zu 4 mm wären "optisch" auch nicht so fein.

Also:
- Erhöhung der Auflösung muss her.
- 1 mm Genauigkeit ist (in diesem Fall) nicht erforderlich.
- 1 mm Auflösung ist üblich und gefordert.
- Einfach nur den Mittelwert berechnen reicht nicht aus.
- Einkoppeln eines Rauschsignals. Egal ob zusätzlich oder 
schaltungsbedingt. ;-)

Wie schon mein Ausbilder vor 30 Jahren sagte: "Miss so genau wie nötig 
und nicht so genau wie möglich."
#3364630
Lesenswert?

MaWin schrieb:
> Du hast vergessen, das Rauschen oder den Sägezahn einzukoppeln also das
> Prinzip nicht verstanden.

Ich wollte nur nochmal verdeutlichen, daß alleine die Mittelwertbildung 
genau 0,0 zusätzliche Bits bringt.

Eh ich da Aufwand treibe mit Dreieckgenerator und Summierverstärker, 
pappe ich lieber gleich nen externen 16Bit ADC ran und habe dann keine 
gelogenen 16Bit, sondern echte.

Es gibt natürlich auch integrierende ADC, wo eine Verlängerung der 
Meßzeit direkt auch die Genauigkeit erhöht.
Das SAR im AVR macht aber genau 10 Schritte und dann ist Ende Gelände.
Gast #3364687
Lesenswert?

> Eh ich da Aufwand treibe mit Dreieckgenerator und Summierverstärker,
> pappe ich lieber gleich nen externen 16Bit ADC ran und habe dann keine
> gelogenen 16Bit, sondern echte.

AVR121: Enhancing ADC resolution by oversampling
Macht das mit 4 Widerständen, zwei kondensatoren und einem Port.
#3364711
Lesenswert?

winne schrieb:
> AVR121: Enhancing ADC resolution by oversampling
> Macht das mit 4 Widerständen, zwei kondensatoren und einem Port.

Oh Gott, wirf Hirn herab.
U_REF zu modulieren ist völlig untauglich.
U_REF wird mit U_EIN multipliziert, d.h. mal ist die Modulation riesig 
(nahe U_REF) und mal fast 0 (nahe GND).

Um auch nur ein Bit mehr Auflösung zu erhalten, müßtest Du bei einer 
Eingangsspannung von 0,5LSB die U_REF zwischen 0V und 5V rampen.
Gast #3364811
Lesenswert?

winne schrieb:
> Bleib mal sachlich und schau dir mal an was von dem Timer-Port letztens
> an Uref ankommt. Das ist bestimmt kein 0 bis Uref "Swing", wie du
> schreibst.

Steht sogar da was da ankommt:
"...appear as a DC with a ripple peak-to-peak value of a few LSB.", 
wobei der Gleichanteil hier uninteressant ist und es um den ripple geht.
#3365048
Lesenswert?

winne schrieb:
> Das ist bestimmt kein 0 bis Uref "Swing", wie du
> schreibst.

Eben!
Um auch kleine Spannungen in Sub-Bits zu teilen, wäre das aber nötig.
Oder anders gesagt, bei kleinen ADC-Werten von z.B. 0..100 hast Du keine 
Subbits mehr.

Der ADC berechnet sich ja zu:

ADC_val = U_ein * (ADC_res / U_ref)

Wie man schön sieht, bleibt bei kleinen U_ein von dem Delta_U_ref nichts 
mehr übrig.
Und damit verschwinden die Subbits und man hat nur noch die 10Bits 
natürliche Auflösung. Auch beim Mittelwert über 1.000.000 Messungen.
#3365134
Lesenswert?

Peter Dannegger schrieb:
> winne schrieb:
>> Das ist bestimmt kein 0 bis Uref "Swing", wie du
>> schreibst.
>
> Eben!
> Um auch kleine Spannungen in Sub-Bits zu teilen, wäre das aber nötig.
> Oder anders gesagt, bei kleinen ADC-Werten von z.B. 0..100 hast Du keine
> Subbits mehr.
>
> Der ADC berechnet sich ja zu:
>
> ADC_val = U_ein * (ADC_res / U_ref)
>
> Wie man schön sieht, bleibt bei kleinen U_ein von dem Delta_U_ref nichts
> mehr übrig.

Etwas weiter rechnen...
1 LSB ~ Vref / 2^n
Bspw. bei 10 Bit und Vref1 4,096 V =  4 mV
bei Vref2 = 4,096 V + 512 mV = 4.5 mV
bei Vref3 = 4,096 V - 512 mV = 3.5 mV

Angenommen die Eingangsspannung wäre 7 mV
mit Vref1 würde der ADC 1 zurück liefern
mit Vref2 auch 1
mit Vref3 liefert er dagegen 2 zurück

Zurückgerechnet mit den jeweiligen LSBs und Mittelwert
(4 mV + 4.5 mV + 7 mV) ~ 5.166 mV
näher am tatsächlichen Wert als mit konstanter Vref1, kommt jetzt noch 
Rauschen des ADCs hinzu und werden mehr Messungen durchgeführt, wird das 
Ergebnis besser.
Gast #3365144
Lesenswert?

Peter Dannegger schrieb:

> Der ADC berechnet sich ja zu:
>
> ADC_val = U_ein * (ADC_res / U_ref)
>
> Wie man schön sieht, bleibt bei kleinen U_ein von dem Delta_U_ref nichts
> mehr übrig.
> Und damit verschwinden die Subbits und man hat nur noch die 10Bits
> natürliche Auflösung. Auch beim Mittelwert über 1.000.000 Messungen.

Es werden doch nur zwei verschiedene Möglichkeiten genannt, wie das 
ganze verrauscht werden kann. Entweder das Eingangssignal mit Hilfe von 
Sägezähn oder zum anderen die Referenzspannung. Welche ich nun 
verrausche ist doch egal, vorrausgesetzt man braucht die 
Referenzspannung für nix anderes mehr.
Gast #3365164
Lesenswert?

Es macht schon einen Unterschied ob das Rauschen zur Ref. Spannung oder 
dem Signal dazukommt. Bei der Ref. Spannung ist der Einfluss bei werden 
nahe 0 sehr klein - da reicht das Rauschen also nicht. Es kann aber je 
nach Aufbau des AD Wandlers eine Art übersprechen des Rauschens von der 
Ref. Spannung geben, so dass auch die kleinen Werte noch etwas davon 
abbekommt - für einen idealen AD gilt das aber nicht.

In Grenzen kann sich durch Oversampling sogar auch die Genauigkeit etwas 
verbessern. Ausreißer bei der Schrittgröße (DNL) werden ggf. etwas 
ausgebügelt und reduziert wenn das Rauschen etwas mehr als 1 LSB ist, 
das geht dann aber auf Kosten zusätzlicher Messzeit.
Gast #3365515
Lesenswert?

Peter Dannegger schrieb:

> Nö, ich habs einfach ausprobiert:
>
> ATmega8 genommen, 256 Meßwerte addiert * 3 und dann durch 256 geteilt,
> weil ich bis 3000V messen wollte.
> Und dann eine genaue einstellbare Spannungsquelle angeschlossen.
> Resultat: Es ließen sich nur Vielfache von 3 stabil anzeigen, also 0V,
> 3V, 6V, 9V usw. Zwischenwerte wurden nur kurzzeitig beim Ändern der
> Eingangsspannung angezeigt.

Und wo genau hast du jetzt das Helpersignal eingespeist?

> Es mag sein, daß es schlechte ADCs gibt, die intern rauschen, wie sau.
> Der AVR-ADC gehört nicht dazu.

Das ist genau der Punkt.

OK, ich sehe jetzt, du hast wohl das ganze Prinzip des Oversampling 
nicht kapiert, also verrate ich dir aus Mitleid einen ganz einfachen 
Trick: Du wählst eine ungewöhnlich hohe Samplefrequenz. (In sinnvollem 
Maße) deutlich oberhalb des Bereiches, in dem Atmel in den Datenblättern 
die Auflösung garantiert....

Das funktioniert zwar tatsächlich, ist aber alles andere als optimal. 
Denn das Signal, was hier als Helper dient, ist leider recht stark mit 
der Samplefrequenz korreliert. Das geht weitaus besser. Aber DEN Trick 
verrate ich dir dann doch nicht. Wo bliebe denn der Entdeckerspaß, wenn 
man alles vorgebetet bekommt?
Persönliche Seite #3365644
Lesenswert?

Wolfgang schrieb:
> Abdul K. schrieb:
>> Les das von MaWin einfach noch einmal, zweimal, dreimal...
>
> Hab ich vorher getan. MaWin sprach von Auflösung.
>
> Du sagst gar nicht, wovon du sprichst. Aus deinen Werten schließe ich
> aber mal, dass du die Verbesserung im SNR meinst.

Es geht natürlich um SNR was synonym zu Auflösung ist. SNR ist es in der 
analog-domain, Auflösung heißt es in der digital-domain.

MaWin hat behauptet, eine Verdopplung der Abtastfrequenz bringt ein Bit. 
Ich behaupte, eine Vervierfachung bringt ein Bit.

Das ist der Grund, warum Oversampling in der Realität schnell 
unwirtschaftlich wird. Echte Wandler nach diesem Prinzip haben 
Modulatoren höherer Ordnung, damit bekommt man mehr Bits für weniger 
Zuwachs an Taktrate. Audio-ADCs haben z.B. gerne einen Modulator 5. 
Ordnung.
#3365791
Lesenswert?

Abdul K. schrieb:
> MaWin hat behauptet, eine Verdopplung der Abtastfrequenz bringt ein Bit.
> Ich behaupte, eine Vervierfachung bringt ein Bit.


SNR = Mittelwert / Standardabweichung bzw.
SNRdb = 6.02 * N + 1.76 dB (N = Anzahl der Bits) oder einer der anderen 
passenden Formeln für das SNR

Shannon-Hartley: C = BW ld(1 + SNR) => SNR = 2^(C/BW) - 1
#3365955
Lesenswert?

Abdul K. schrieb:
> Na wenn es denn so genau sein muß, dann verbessere ich deine Aussage
> auch noch mal ;-)
>
> Die 1,76dB gelten nur für quasi-Rauschsignale. Ich glaube es hat sich
> bislang kein Mathematiker gefunden, der das für andere Signale rechnen
> wollte :-))
> (Eventuell ist diese Aussage auch für die 6,02dB zutreffend)


;)

Falls jemanden die Originalarbeit interessiert
Spectra of Quantized Signals, Bennett, 1948
http://www3.alcatel-lucent.com/bstj/vol27-1948/articles/bstj27-3-446.pdf
#3366529
Lesenswert?

c-hater schrieb:
> Das funktioniert zwar tatsächlich, ist aber alles andere als optimal.

Genau das ist auch meine Erfahrung.
Entweder man treibt zusätzlichen Hardwareaufwand oder das Ergebnis ist 
grausam. Daher lasse ich solche Sperenzchen lieber.

Wenn ich mehr brauche, nehme ich ganz einfach einen besseren ADC und 
lüge mir nicht selber in die Tasche.

Es gab Notlösungen, die mögen vor 20 Jahren mal einen Kostenfaktor 
dargestellt haben, aber sind heutzutage einfach unsinnig.
Gast #3367150
Lesenswert?

Der Zusätzliche Hardware Aufwand für das Oversampling muss nicht 
unbedingt sein. Einige Sensoren bzw. Verstärker rauschen schon genügend, 
oder man hat in der Regel genug 100 Hz Signal mit drauf.

Auch macht man Oversampling nicht nur für mehr Auflösung. Ein anderer 
Grund ist eine einfachere Auslegung des Anti-Aliasing-filters. Ein 
anderer ähnlicher Grund für mehr Abtastwerte ist die Unterdrückung von 
50 Hz und/Oder 100 Hz Störungen. Eine Abtastung und mitteln über ein 
Intervall von 20 ms (oder ein vielfaches) gibt eine gute Unterdrückung 
bei 50 und 100 Hz, und spart so ggf. einen analogen Filter.
Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.