Warum können Sie nicht einfach ADC-Samples mitteln, um eine höhere Auflösung von einem ADC zu erhalten?


8

Ich versuche, mehr als 10 Bit Präzision von meinem Arduino ADC zu erhalten, aber ich kann die Theorie dahinter nicht wirklich herausfinden. Eine oft zitierte Atmel-Anwendungsnotiz ( http://www.atmel.com/Images/doc8003.pdf ) besagt dies

Es ist wichtig zu beachten, dass eine normale Mittelwertbildung die Auflösung der Konvertierung nicht erhöht. Dezimierung oder Interpolation ist die Mittelungsmethode, die in Kombination mit Überabtastung die Auflösung erhöht

Dann schlagen sie für 'Dezimierung' den Dezimalpunkt vor. Was bedeutet, dass Sie den Binärwert für jede Stelle, an der Sie ihn verschieben, halbieren, sodass Sie den Basiswert 10 genauso gut durch 2 oder 4 oder 8 teilen können oder was Sie haben. Verstehe ich Dezimierung falsch?


"Kombiniert mit Oversampling, was die Auflösung erhöht" - ich denke, sie sagen, dass man mehr Samples nehmen muss, um mehr Auflösung zu haben. (Im Gegensatz zu was, ich weiß es nicht. Vielleicht denken sie, dass jemand dumm genug ist, die gleiche Stichprobe immer und immer wieder mit sich selbst zu
mitteln

Im Bereich DSP (Digital Signal Processing) bedeutet der Begriff "Dezimierung" einen regulären Algorithmus zum Entfernen (Löschen) von Abtastwerten, wenn sie sich nicht stark ändern (wenn sie weit über der Signal-Nyquist-Grenze überstempeln oder nach einem Glättungsfilter). Der Begriff stammt aus einer Praxis im alten Rom (?), Jeden dritten Soldaten in einem Regiment zu töten, das auf einem Schlachtfeld versagt hat.
Ale..chenski

Und ich sehe nicht, wo der Atmel-Artikel vorschlägt, Dezimalstellen zu verschieben, obwohl dies Teil des Mittelungsalgorithmus sein könnte.
Ale..chenski

Antworten:


7

Ich habe mir die Notiz angesehen und das ist in der Tat eine seltsame Behauptung (oder eine verwirrende Art zu sagen, was sie tatsächlich bedeuten).

Vielleicht bedeuten sie tatsächlich den Punkt, dass Sie, wenn Sie mehr Auflösung erhalten möchten, die Zahl danach nicht auf dieselbe Skala wie eine einzelne Stichprobe teilen / verschieben können, da dies (in ganzzahliger Arithmetik) die gewonnenen Bits wegwerfen würde.

Wenn Ihre ADC-Samples verrauscht sind , können Sie natürlich teilen, um einen weniger verrauschten Wert auf der ursprünglichen Skala zu erhalten.


Die andere Sache, an die ich nur bei Ihrer Frage gedacht habe, war der Punkt, dass Sie ein effektives Tiefpassfilter verwenden müssen, um ein Oversampling richtig durchzuführen, und ein direkter gleitender Durchschnitt ist nicht so gut als Tiefpassfilter wie eine richtig gestaltete FIR (oder IIR) Filter - aber das scheint vom Text der Notiz nicht unterstützt zu werden.


Ein Tiefpassfilter oder ein Filter mit gleitendem Durchschnitt filtert kein 1 / f-Rauschen heraus, was der Hauptgrund dafür ist, dass die unteren Bits verrauscht sind, wenn die Filter dies tun würden, wäre ich arbeitslos
Voltage Spike

16

Wenn Sie jemanden bitten, eine 45,2-cm-Platte auf den nächsten Zentimeter genau zu messen, würde (oder sollte) er 45 beantworten. Wenn Sie dann darum bitten, sie erneut zu messen, würde er 45 erneut antworten. Wiederholen Sie die Übung noch 8 Mal und der Durchschnitt aller Messungen sollte genau 45 betragen. Unabhängig davon, wie oft man die Eingabe abtastet, ergibt sich ein Wert von 45. Der Durchschnitt aller dieser Messwerte wäre natürlich 45 (obwohl das Brett 45,2 cm lang ist).

Wenn Sie die Person das Messgerät so einstellen lassen, dass es vor der ersten Messung 0,45 cm, vor der zweiten 0,35 cm, vor der fünften 0,05 cm, 0,05 vor der sechsten usw. usw. bis zu 0,45 cm kurz vor der ersten Messung anzeigt am zehnten würden dann zwei der Messungen 46 und die anderen acht 45 anzeigen. Der Durchschnitt von allen wäre 45,2.

In der Praxis ist es schwierig, die Dinge so genau zu beeinflussen. Wenn man die Messvorrichtung vor jeder Messung zufällig so einstellt, dass sie irgendwo zwischen 0,5 cm lang und 0,5 cm kurz liegt, würde ungefähr 1/5 der Messungen 46 und der Rest 45 anzeigen, aber da die Einstellungen zufällig sind, könnte der tatsächliche Anteil höher sein oder niedriger. Das Durchführen von zehn Messungen würde nicht zu einer signifikanten Genauigkeit führen, aber ein Durchschnitt von etwa 100 würde dies tun.

Ich bin mir nicht sicher, ob ich die Gründe des Papiers für die Unterscheidung zwischen Mittelwertbildung und Rechtsverschiebung richtig verstehe. Man muss bedenken, dass die scheinbare Präzision, die durch Mittelwertbildung erreicht wird, das sinnvolle Maß an Präzision überschreiten kann, aber meiner Erfahrung nach sollte die Frage, wann und wie viel nach rechts verschoben werden sollte, von den Grenzen des numerischen Bereichs des Prozessors bestimmt werden. Wenn Sie mit Zahlen arbeiten, die so weit wie möglich vergrößert sind, ohne einen Überlauf zu verursachen, werden die Auswirkungen von Rundungsfehlern im Allgemeinen minimiert, vorausgesetzt, man misst kleinen Rauschmengen keine übermäßige Bedeutung bei.

Im ursprünglichen Sprachgebrauch bedeutete das "Dezimieren" einer Armee übrigens, 1/10 der darin befindlichen Soldaten zu töten. Um die Daten von einem ADC zu dezimieren, müssen Sie einen Teil davon verwerfen. Das gemeinsame Präfix mit der Phrase "Dezimalpunkt" impliziert keine Assoziation.


14

Die kurze Antwort lautet Rauschen, und es ist nicht unbedingt das Rauschen, das zählt, sondern die Art des Rauschens . Das andere Problem sind nichtlineare Effekte wie INL, die den Durchschnittswert beeinträchtigen

Zuerst zu Noise:

Wenn wir eine Gaußsche Verteilung abtasten würden, würde sie ungefähr so ​​aussehen:

Geben Sie hier die Bildbeschreibung ein

Die rote Linie liegt näher an der tatsächlichen Wärmeverteilung (gemittelt über die Zeit) und das blaue Histogramm repräsentiert viele ADC-Proben. Wenn wir diese Verteilung kontinuierlich abtasten würden, würden wir bessere Statistiken erhalten und könnten den Durchschnittswert oder Mittelwert mit besserer Genauigkeit ermitteln (was normalerweise der Fall ist. Ja, ich erkenne, dass sich Signale bewegen, es gibt Filterung und Signal-Rausch-Verhältnis abhängig vom Frequenzinhalt, aber betrachten wir nur den DC-Fall, in dem sich das Signal vorerst nicht bewegt).

μ=1nich=1nxich

Das Problem ist Flimmerrauschen oder 1 / f-Rauschen, es verschiebt den Gaußschen Mittelwert und führt dazu, dass die Statistik zusammenbricht, da die Verteilung nicht mehr Gaußsch ist.

Dies ist ein schlechtes Modell, aber Sie könnten davon ausgehen, dass es so aussieht. INL ist auch ein Problem, da es einige Fehler verursachen kann, die auch den Mittelwert beeinträchtigen.

μ=1nich=1nxich+errÖr

Das ist wahrscheinlich verwirrend. Schauen wir uns den Zeitbereich wie unten gezeigt an

Im oberen Bild sehen Sie ein Signal mit Gaußschem Rauschen. Es wäre einfach, eine Linie durch die Mitte zu ziehen und den Mittelwert zu finden. Je mehr Abtastwerte Sie von einem solchen Signal haben, desto genauer und besser wissen Sie über den Mittelwert Bescheid.

Im unteren Bild sehen Sie, wie Flimmergeräusche aussehen. Die Mittelwertbildung hilft hier nicht weiter.

Das Problem ist, dass die meisten Elektronikgeräte ein Flimmerrauschen haben, Widerstände nicht (vorausgesetzt, es gibt keinen Einfluss von der Raumtemperatur), aber Transistoren und ICs. Es gibt Verstärker, sogenannte Chopping-Verstärker, die diese Effekte überwinden.

Eine andere Sache zu wissen ist, dass es ADCs gibt (linear hat einen neuen SAR-Kern), bei denen die Ingenieure daran gearbeitet haben, die Auswirkungen von 1 / f-Rauschen (und anderen nichtlinearen Effekten von ADCs wie INL) auf ein Niveau zu eliminieren, das viel niedriger als das ADC-Bit ist Wert. Sie können starkes Oversampling verwenden und 32-Bit-Werte aus einem 14-Bit-Kern herausholen.

Quelle: EDN-1 / f Noise - die flackernde Kerze Geben Sie hier die Bildbeschreibung ein


Sehr interessant, aber ich glaube nicht, dass sich der Anwendungshinweis auf Flimmergeräusche bezog
Plumpie

Alles gute Punkte; Ein einfacher Mittelungsfilter ist ein SINC (alle Koeffizienten sind gleich), kann jedoch niemals vollständig konvergieren (späteres Zitieren - jetzt mit dem Telefon).
Peter Smith

6

Dann schlagen sie für 'Dezimierung' den Dezimalpunkt vor.

nicht genau. Der Dezimierungsteil davon argumentiert, dass meiner Ansicht nach die normale "Mittelung" mehrerer Abtastwerte, aber die Beibehaltung der Bitbreite, nicht so viele Informationen enthält. Wenn Sie also m n-Bit-ADC-Messwerte mitteln, ist der resultierende Durchschnitt immer noch ein n-Bit-ADC-Messwert.

Der vorgeschlagene Ansatz besteht, gelinde gesagt, darin, n-Bit-ADC-Messwerte zu mitteln, so dass der resultierende Durchschnitt eine höhere Bitbreite aufweist. Wenn Sie beispielsweise 4 10-Bit-ADC-Messwerte summieren und die Summe durch 2 teilen, erhalten Sie einen 11-Bit-ADC-Messwert.

Ich dachte, das war immer die Art und Weise, wie Oversampling professionell durchgeführt wurde. Diese einfache Mittelung durch Leute im Netz wird allgemein als der falsche Ansatz verstanden.

Der andere Punkt, dass zur Reduzierung des Rauschens eine Überabtastung nur dann wirksam ist, wenn Rauschen vorhanden ist, ist der richtige. Wenn Sie einen von Gott entworfenen 10-Bit-ADC hätten (dh jeder Messwert ist der absolut wahre Messwert ohne Variation), hätte ein Oversampling nicht funktioniert.

Die spezielle Schaltung gegen Ende des Artikels über die Verwendung eines PWM zum Hinzufügen von Rauschen ist falsch: Der Pin, der Rauschen hinzufügt, sollte einen DC-Sperrkondensator haben. und ein weniger wesentlicher Punkt ist, dass es kein PWM-Pin sein muss. Ein normaler GPIO-Pin würde funktionieren.


> Diese einfache Mittelung durch Leute im Internet wird allgemein als der falsche Ansatz verstanden. nicht, wenn Sie sie als Floats
mitteln

4

Erstens ist ein ADC nur so gut wie seine Spannungsreferenz. Wenn Ihr Arduino die + 5V als Referenz verwendet, können Sie jede Art von Präzision vergessen, da der + 5V-Regler ziemlich verrauscht ist, eine geringe Genauigkeit von 1-5% aufweist und seine Ausgangsspannung von der Menge des entnommenen Stroms abhängt es, sowohl zum Zeitpunkt der Messung als auch in den letzten Millisekunden.

Wenn Sie also Genauigkeit oder Präzision benötigen, wählen Sie bitte eine Spannungsreferenz aus, die Ihren Anforderungen entspricht. Wenn Sie keine absolute Genauigkeit der Spannung benötigen, ist diese billiger, da sie nur stabil sein muss, anstatt genau und stabil.

Ich habe den SAR ADC im Arduino nicht getestet. Ich habe Erfahrung mit dem in AT90PWM3B, der ein enger Verwandter ist. Es ist ziemlich gut. Bei einer konstanten Eingangsspannung erhalten Sie immer wieder den gleichen ADC-Wert, wobei 1 LSB schwankt, wenn die Spannung zwischen den Werten liegt. Ich kann kein besseres Ergebnis von einem SAR ADC erwarten. (Ich habe eine hochwertige externe Spannungsreferenz verwendet)

Lärm ist hier also kein Problem ...

In der Tat ist Lärm dein Freund ...

Angenommen, die zu messende Spannung fällt auf den ADC-Wert 100.1

Sie machen 10 Messungen, aber da der ADC gut ist, erhalten Sie jedes Mal 100!

Sie benötigen also ein wenig Rauschen in Ihrem Signal, wie z. B. ein LSB Rauschen, um sicherzustellen, dass Sie bei einer Messung von 100,1 neun von zehn und 101 von zehn erhalten. Also wird es durchschnittlich 100,1 sein, kommt die Idee?

Wenn es von einem Sensor kommt, haben Sie normalerweise genug Rauschen umsonst.


Gute Punkte in Bezug auf alle Arten, wie ich mit meiner aktuellen Methode sowohl Genauigkeit als auch Präzision verliere. Ich habe einen tl431 (präzise einstellbarer Shunt) herumliegen und ich werde versuchen, ihn anzuschließen.
Plumpie

Lineare Spannungsregler haben Reaktionszeiten im MHz-Bereich und sind daher im Frequenzbereich des ADC ziemlich stabil.
JimmyB

Dann möchten Sie möglicherweise nur Spannungen relativ zu demselben Vcc messen (Potentiometer, Sensoren vom Typ Spannungsteiler).
JimmyB

LDOs mit der Antwort "Im MHz-Bereich" ???? Senden Sie die Datenblätter Mann, ich würde gerne einen treffen! Höchstwahrscheinlich kommt der Arduino mit einem miesen 1117 oder ähnlichem, der eine langsame Einschwingreaktion des Hundes hat ... Die Verwendung des Netzteils als Referenz ist sowieso nicht für Präzision gedacht.
Peufeu

4

Was Sie vermissen, ist die Bedeutung von "Dezimierung".

Genau genommen ist "Dezimierung" eine Reduzierung auf 1/10. Das heißt, von 10 auf 1 reduzieren.

"Dezimierung", wie sie bei der Stichprobe verwendet wird, verliert die strenge Bedeutung. Anstelle von 1/10 bedeutet dies "Reduzierung der Anzahl".

Dies bedeutet, dass Sie eine bestimmte Anzahl von Stichproben mitteln und die Anzahl der Stichproben um dieselbe Anzahl reduzieren.

Wenn Sie beispielsweise mit 1000 Hz und durchschnittlich 4 Samples abtasten, behalten Sie nur den Durchschnitt bei. Am Ende haben Sie nur 250 Samples pro Sekunde anstelle von 1000. Sie haben die Zeitauflösung verloren, aber ein bisschen Spannungsauflösung gewonnen.

Für jeden Faktor 4 erhalten Sie 1 Bit. Durchschnitt und Dezimierung um 4 und von 10 Bit Auflösung auf 11 Bit Auflösung.

Ein weiterer Faktor von 4 (4 * 4 = 16 insgesamt) bringt Sie von 10 Bit auf 12 Bit. Ein weiterer Faktor von 4 bringt Sie auf 13 Bit Auflösung.

Beachten Sie jedoch, dass Sie jetzt um den Faktor 64 überabtasten. Ihre effektive Abtastrate sinkt um denselben Faktor. Am Beispiel einer Abtastrate von 1000 Hz sind Sie auf etwa 15 effektive Abtastwerte pro Sekunde reduziert.

Dies ist eine Dezimierung, und es ist, wie viele High-Bit-ADCs ihre hohe Auflösung erhalten. Sie tasten mit hoher Rate, Durchschnitt (oder verwenden ein digitales Tiefpassfilter) und dezimieren.

Am äußersten Ende haben Sie einen Einzelbit-ADC (einen einfachen Komparator), der mehrere Millon-mal überabtastet, um eine effektive Bittiefe von 16 Bit zu erhalten.

Eine Sache, die Sie beachten müssen, damit dies funktioniert, ist, dass Sie Rauschen in Ihrem Signal benötigen, das ungefähr dem kleinsten Wert entspricht, den Ihr ADC messen kann. Bei einem 10-Bit-ADC mit einer 5-V-Referenzspannung wäre dies ein Rauschen von etwa 5 mV von Spitze zu Spitze.

Durch die Mittelung des Rauschens kommen die Bitverstärkungen tatsächlich her. Stellen Sie sich vor, Sie haben ein Signal (DC), das genau zwischen dem Wert von 512 ADC-Zählungen und 513 ADC-Zählungen liegt. Ohne Rauschen ist der gemessene Wert immer der gleiche. Durch Mittelwertbildung erhalten Sie den gleichen Wert wie bei den Proben.

Fügen Sie Rauschen mit dem kleinsten messbaren Wert hinzu, und es sieht ganz anders aus. Obwohl sich das Signal selbst nicht ändert, "wackeln" die gemessenen Werte um den wahren Wert des Signals. Der Durchschnitt unterscheidet sich jetzt von den Samples. Je mehr Samples Sie verwenden, desto näher kommen Sie dem tatsächlichen Wert des Signals


Ich habe diese Technik mit einem Arduino (der einen Atmel-Prozessor mit einem 10-Bit-ADC verwendet) verwendet, um eine bessere Auflösung für einige von mir durchgeführte Messungen zu erhalten.

Ich habe es auf 13 Bit gebracht, aber festgestellt, dass ich mehr brauchte. Ich hätte einen weiteren Faktor von 4 wählen können, aber das hätte für jede Probe zu lange gedauert und mir nur noch ein bisschen mehr gebracht.

Die Experimente mit Oversampling zeigten, dass das, was ich tat, funktionieren konnte (ich bekam erkennbare, aber verrauschte Ergebnisse), ohne Zeit und Geld aufwenden zu müssen, um einen besseren ADC zu erhalten. Mit Proof of Concept konnte ich diesen besseren ADC erhalten - und dieser Proof kostete mich nur ein paar Codezeilen und ein wenig Zeit.

Ich fand, ich brauchte mindestens 16 Bits. Das hätte einen Durchschnitt von 4096 Proben bedeutet.
Das ist ungefähr eine halbe Sekunde mit der schnellstmöglichen Abtastung, die mit der Arduino-Software möglich ist.

Da ich 14400 Messungen benötigte, hätte der gesamte Lauf 2 Stunden gedauert.

Ich bin nicht so geduldig und die Dinge, die ich gemessen habe, würden nicht so lange konstant bleiben. Ich musste auf einen ADC umsteigen, der intern eine viel höhere Oversampling-Rate verwendet und Samples mit höherer Auflösung bei einer niedrigeren Rate liefert.

Wie bei so vielen Dingen ist Dezimierung ein Kompromiss, mit dem Sie eine bessere Leistung in eine Richtung (Bittiefe) erzielen und gleichzeitig die Leistung in eine andere Richtung (Abtastrate) kosten können.


3
Da Sie sich Zeit nehmen, um herauszufinden, was Dezimierung bedeutet: Streng genommen bedeutet dies eine Reduzierung um 1/10, wobei 9/10 der Elemente erhalten bleiben .
Pipe

2

Sie können also die Theorie studieren, aber ich kann Ihnen sagen, dass in der Praxis nur ein einfaches Modell von Bedeutung ist. Sie können mitteln, solange sich Ihr Signal im Rauschen befindet. Dann wird der Durchschnitt der Rauschkomponente auf Null gesetzt, während das Signal erhalten bleibt. Auf diese Weise erhalten Sie eine Auflösung auf Kosten der Bandbreite.

Wenn Sie zum Beispiel einen 16-Bit-ADC haben und die letzten vier Bits verrauscht sind, können Sie sie filtern und das Signal dort empfangen. Wenn Sie jedoch nur ein bisschen laut sind, gibt es nicht viel zu durchschnittlich, sodass Sie nicht viele neue Informationen erhalten.

Wenn Sie eine wirklich hohe Auflösung (und niedrige Bandbreite) benötigen, schauen Sie, wie Sigma-Delta-ADC funktioniert. Sie haben ein 1-Bit-Signal mit hoher Rate, das dann mit einer höheren Auflösung, manchmal 20 Bit und mehr, auf eine gewisse Bandbreite heruntergefiltert wird.


2

Warum kannst du nicht? Sie können , aber Sie müssen alle Fehler- und Rauschquellen berücksichtigen, um sicherzustellen, dass Ihr Plan funktioniert.

σ

Beispiel: Wenn Sie die Auflösung um 2 Bit verbessern möchten, Ihr Rauschen jedoch bereits 3 Bit betrug, müssen Sie überlegen, wie Sie das Rauschen um 2 + 3 = 5 Bit reduzieren und gleichzeitig die Auflösung um 2 Bit erhöhen können.

  • Dies könnte eine digitale Lösung mit einer Mittelung von> 25 Abtastwerten mit Latenzkosten oder eine analoge Lösung durch Rauschunterdrückungsfilterung, Ausgleichssignale zur Unterdrückung von Gleichtaktrauschen und / oder bessere Abschirmung des Signals zusammen mit digitaler Mittelung sein.

Wenn n das gewünschte zusätzliche Auflösungsbit ist, ist die Verschiebung einer Binärzahl (oder Dezimierung) x1 nach rechts gleich / 2.

σx

σ1/.10=1/.3.3

fÖverseinmplichnG=4nfN.yquichst

fs

  • fN.yquichst= 
  • und wenn Sie eine 10-Bit-Auflösung in 12-Bit konvertieren möchten, ist n = 2. Um die Auflösung von 10-Bit auf 12-Bit zu erhöhen, müssen 16 10-Bit-Werte summiert werden. Eine Summe von 16 10-Bit-Werten erzeugt ein 14-Bit-Ergebnis, bei dem nicht erwartet wird, dass die letzten beiden Bits wertvolle Informationen enthalten.

Ein zu großer Quantisierungsfehler oder zu viel zufälliges Rauschen erfordert eine stärkere Mittelung, um den Fehler zu verringern, und eine stärkere Mittelwertbildung erhöht die Latenz des Ergebnisses.

Um einen ADC auf Geschwindigkeit und Fehler zu optimieren, müssen das Gesamtfehlerbudget und die verfügbare Auflösung (Bits), das gewünschte SNR oder der absolute Fehler für jedes gegebene Signal innerhalb des gesamten Messbereichs definiert werden. Die Definition aller Fehlerquellen mag zunächst schwierig, aber notwendig erscheinen, einschließlich:

zB Verstärkungsfehler, Offsetfehler, Quantisierungsfehler, CM-Rauschfehler, DM-Rauschfehler, Vref-Rauschen oder Offsetfehler, Umgebungsrauschen usw., Latenzfehler (aus Mittelwertbildung)

Bestimmen Sie dann, wie viele weitere Auflösungsbits Sie benötigen, um das oben genannte Budget für Entwurfsfehler zu erreichen, nachdem alle anderen Fehlerquellen minimiert wurden.

Gleiches gilt für die Mittelung (für langsame Signale) und die Überabtastung der Signalbandbreite sowie für die Dezimierung für Echtzeit-ADC.

Dies korrigiert keine Verstärkungs- oder Offsetfehler und wenn nicht genügend zufälliges Rauschen vorhanden ist, muss Rauschen hinzugefügt werden, um das Signal zu zittern. Im Idealfall überschreiten alle anderen Rausch- und Fehlerquellen 1 Bit nicht, sodass die Standardabweichung oder das Dithering nur +/- 1 Wert über der Anzahl der Abtastwerte beträgt. Es muss jedoch ausreichend Rauschen vorhanden sein, damit bei beiden Methoden nicht durch aufeinanderfolgende Abtastungen der gleiche Messwert erhalten wird.


1

Die Theorie dahinter kann in Kurzform diesem Satz im Wikipedia-Artikel über Oversampling entnommen werden :

Das SNR erhöht sich jedoch um sqrt (N) (...). Das Summieren von unkorreliertem Rauschen erhöht seine Amplitude um sqrt (N), während das Summieren eines kohärenten Signals seinen Durchschnitt um N erhöht. Infolgedessen erhöht sich das SNR (oder Signal / Rauschen) um sqrt (N). In dem Beispiel bedeutet dies, dass bei N = 256 der Dynamikbereich um 8 Bit zunimmt und der Inhalt des "kohärenten Signals" um N zunimmt, das Rauschen sich jedoch um den Faktor sqrt (N) = sqrt (256) ändert ) = 16 im Beispiel (nicht zu verwechseln mit einer Erhöhung um 16 Bit), daher ändert sich das SNR um den Faktor 16.

Vorausgesetzt, Ihr Signal entspricht bestimmten Kriterien (z. B. langsamer genug und rauscharm), erhöhen Sie tatsächlich ein Bit für jeweils 4 Samples. Dann können Sie für jeweils 4 resultierende Samples erneut "Join" erhalten, um ein weiteres Sample mit höherer Auflösung zu bilden, sodass Sie am Ende log_4 (n) Bits für jeweils n Samples erhalten, die Sie auf Ihrem ADC lesen.

Der Dezimierungsteil ist nicht wirklich gemittelt, insbesondere wenn Sie berücksichtigen, dass es sich hier um Ganzzahlen handelt (ADC-Beispiele). Zum Beispiel, wenn Sie Proben 1, 1, 3und 2, würde Ihr Durchschnitt sein:

int result = (1+1+3+2)/4;

Da Sie mit ganzzahliger Mathematik mitteln, wird Ihr "mathematisches Ergebnis" von 1,75 auf 1 abgerundet. Wenn Sie dann mit 2 multiplizieren, erhalten Sie 2.

Nun, wenn Sie es dezimieren mit:

int result = (1+1+3+2)>>1;

Ihr Ergebnis wird sein 3. Sie können argumentieren, dass dies dasselbe ist wie das Teilen durch 2, aber Sie können sicherlich nicht argumentieren, dass 3 der Durchschnitt von 1, 1, 3 und 2 ist . Sieh den Unterschied?

Jetzt könnten Sie versucht sein, einfach alles zusammenzufassen und nicht das letzte Stück wegzuwerfen. Aber denken Sie daran, dass dieses Bit Rauschen ist: Sie können es nicht wirklich verwenden.


Ich habe das Gefühl, wenn die Rauschamplitude mit sqrt (N) und das kohärente Signal mit N zunimmt, muss das SNR mit N / sqrt (N) und nicht mit sqrt (N)
zunehmen

@Plumpie Überprüfen Sie Ihre Mathematik noch einmal : N/sqrt(N) = sqrt(N).
Ronan Paixão

1

Es hört sich so an, als hätten alle bereits den theoretischen Teil Ihrer Frage behandelt, aber da Sie ein Arduino verwenden, möchten Sie vielleicht meine Abenteuer durchlesen, um die Auflösung des ADC mit dieser Technik zu verbessern:

Verbesserung der Arduino ADC-Auflösung durch Dithering & Oversampling

Der Charakter des Rauschens ist ein kritischer Teil der Geschichte, und es stellt sich heraus, dass Sie ein einigermaßen gutes Dithering erzeugen können, indem Sie einfach einen Pin mit einem Widerstand darauf pulsieren, während Sie den ADC asynchron lesen. Es ist nicht perfekt und Sie erhalten einen kleinen Synchronisationsversatz, der abhängig von der Anzahl der zusätzlichen Samples / Bits variiert, die Sie erreichen möchten. Ich würde auch die Kritik akzeptieren, dass diese Technik von der schlechten Schienenstabilisierung im Arduino abhängt, also wirklich fehlerhaft konstruiert, anstatt bewährten Praktiken zu folgen. Aber es ist sehr einfach zu tun.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.