Pourquoi ne pouvez-vous pas simplement faire la moyenne des échantillons d'ADC pour obtenir plus de résolution d'un ADC?

8

J'essaie d'obtenir plus de 10 bits de précision de mon Arduino ADC mais je ne peux pas vraiment comprendre la théorie derrière cela. Une note d'application Atmel souvent citée ( http://www.atmel.com/Images/doc8003.pdf ) dit que

Il est important de se rappeler que la moyenne normale n'augmente pas la résolution de la conversion. La décimation, ou interpolation, est la méthode de calcul de la moyenne, combinée à un suréchantillonnage, qui augmente la résolution

Ensuite, ce qu'ils proposent pour la «décimation», c'est de déplacer le point décimal. Ce qui revient à diviser par deux la lecture binaire pour chaque endroit où vous le déplacez, vous pouvez donc aussi diviser la valeur de base 10 par 2 ou 4 ou 8 ou ce que vous avez. Est-ce que je comprends mal la décimation?

Plumpie
la source
"Combiné avec un suréchantillonnage, ce qui augmente la résolution" - je pense qu'ils disent que pour avoir plus de résolution, vous devez prendre plus d'échantillons. (Par opposition à quoi, je ne sais pas. Peut-être qu'ils pensent que quelqu'un sera assez stupide pour faire la moyenne du même échantillon avec lui-même encore et encore?)
user253751
Dans le domaine du DSP (Digital Signal Processing), le terme "décimation" désigne un algorithme régulier de suppression (suppression) d'échantillons s'ils ne changent pas beaucoup (lors d'un surampasage bien au-dessus de la limite du signal de Nyquist, ou après un filtre de lissage). Le terme vient d'une pratique dans la Rome antique (?) De tuer chaque, disons, troisième soldat d'un régiment qui a échoué sur un champ de bataille.
Ale..chenski
Et je ne vois pas où l'article Atmel suggère de déplacer des points décimaux, bien que cela puisse faire partie de l'algorithme de calcul de moyenne.
Ale..chenski

Réponses:

7

J'ai jeté un œil à la note et c'est en effet une affirmation étrange (ou une façon confuse de dire ce qu'ils signifient réellement).

Peut-être que ce qu'ils signifient en fait, c'est que si vous voulez obtenir plus de résolution, vous ne pouvez pas diviser / décaler le nombre par la suite à la même échelle qu'un échantillon unique car (en arithmétique entière) cela jetterait les bits que vous avez gagnés.

Si vos échantillons ADC sont bruyants , vous pouvez bien sûr les diviser pour obtenir une valeur moins bruyante à l'échelle d'origine.


L'autre chose à laquelle j'ai pensé à partir de votre question était le fait que pour faire un suréchantillonnage correctement, vous devez utiliser un filtre passe-bas efficace, et une moyenne mobile simple n'est pas aussi bonne à être un filtre passe-bas qu'une FIR correctement conçue. (ou IIR) - mais cela ne semble pas être pris en charge par le texte de la note.

Kevin Reid
la source
Un filtre passe-bas ou un filtre à moyenne mobile ne filtrera pas le bruit 1 / f, ce qui est principalement la raison pour laquelle les bits inférieurs sont bruyants, si les filtres le faisaient, je serais sans emploi
Voltage Spike
16

Si vous demandez à quelqu'un de mesurer une planche de 45,2 cm au centimètre près, il répondra (ou devrait) répondre à 45. Si vous demandez ensuite de le mesurer à nouveau, il répondra à nouveau à 45. Répétez l'exercice 8 fois de plus et la moyenne de toutes les mesures devrait être exactement 45. Peu importe combien de fois on échantillonne l'entrée, on se retrouvera avec une valeur de 45. La moyenne de toutes ces lectures serait, bien sûr, 45 (même si la planche mesure 45,2 cm de long).

Si vous avez demandé à la personne d'ajuster l'appareil de mesure de manière à lire 0,45 cm de long avant la première mesure, 0,35 cm de long avant la seconde, 0,05 cm de long avant le cinquième, 0,05 cm de court avant le sixième, etc. jusqu'à 0,45 cm de court avant le dixième, alors deux des mesures indiqueraient 46 et les huit autres indiqueraient 45. La moyenne de toutes serait 45,2.

Dans la pratique, il est difficile de biaiser si précisément les choses. Si l'on ajuste au hasard l'appareil de mesure avant chaque mesure pour lire quelque part entre 0,5 cm de long et 0,5 cm de court, alors environ 1/5 des mesures lirait 46 et les 45 autres, mais parce que les ajustements sont aléatoires, la fraction réelle pourrait être plus élevée ou plus bas. Prendre dix mesures n'apporterait pas un chiffre significatif de précision, mais une moyenne d'environ 100 le ferait.

Je ne suis pas sûr de bien comprendre la justification du document pour la distinction entre la moyenne et le décalage à droite. Il faut être conscient que la précision apparente obtenue en faisant la moyenne peut dépasser le niveau de précision significatif, mais d'après mon expérience, la question de savoir quand et combien de décalage à droite doit être déterminée par les limites de la plage numérique du processeur. Travailler avec des nombres agrandis autant qu'ils peuvent l'être sans provoquer de débordement minimisera généralement les effets des erreurs d'arrondi, à condition que l'on n'attache pas une importance indue à de petites quantités de bruit.

Soit dit en passant, dans l'usage d'origine, "décimer" une armée, c'était tuer 1/10 des soldats qui s'y trouvaient. Décimer les données d'un ADC, c'est en jeter une partie. Le préfixe commun avec l'expression "point décimal" n'implique pas une association.

supercat
la source
14

La réponse courte est le bruit, et ce n'est pas nécessairement le bruit qui compte, mais le type de bruit . L'autre problème est les effets non linéaires comme l'INL qui jettent la valeur moyenne

Tout d'abord sur le bruit:

Si nous devions échantillonner une distribution gaussienne, cela ressemblerait à ceci:

entrez la description de l'image ici

La ligne rouge est plus proche de la distribution thermique réelle (moyenne dans le temps) et l'histogramme bleu représente de nombreux échantillons d'ADC. Si nous devions échantillonner en continu cette distribution, nous obtiendrions de meilleures statistiques et nous pourrions trouver la valeur moyenne ou la moyenne avec une meilleure précision (ce qui est généralement ce qui était après, oui, je réalise que les signaux se déplacent, il y a filtrage et signal sur bruit). en fonction du contenu en fréquence mais considérons simplement le cas DC où le signal ne bouge pas pour l'instant).

μ=1nje=1nXje

Le problème est le bruit de scintillement ou le bruit 1 / f, il déplace la moyenne gaussienne et provoque la décomposition des statistiques, car la distribution n'est plus gaussienne.

Il s'agit d'un modèle médiocre, mais vous pourriez considérer qu'il ressemble à quelque chose comme ça INL est également un problème car il peut introduire quelques bits d'erreur qui jette également la moyenne.

μ=1nje=1nXje+error

C'est probablement déroutant, regardons le domaine temporel comme indiqué ci-dessous

Dans l'image du haut, vous pouvez voir un signal avec un bruit gaussien, il serait facile de "tracer une ligne" au milieu et de trouver la moyenne. Plus vous disposez d'un échantillon d'un signal comme celui-ci, meilleure est la précision et la connaissance de la moyenne.

Dans l'image inférieure, vous pouvez voir à quoi ressemble le bruit de scintillement, la moyenne ne va pas aider ici.

Le problème est que la plupart des appareils électroniques ont un bruit de scintillement, pas les résistances (en supposant qu'il n'y a pas d'influence de la température ambiante) mais les transistors et les circuits intégrés le font. Il existe des amplificateurs appelés amplificateurs à découpage qui surmontent ces effets.

Une autre chose à savoir est qu'il existe des ADC (linéaire a un nouveau noyau SAR) où les ingénieurs ont travaillé pour éliminer les effets du bruit 1 / f (et d'autres effets non linéaires des ADC comme INL) à un niveau beaucoup plus faible que le bit ADC. valeur. Vous pouvez utiliser un suréchantillonnage important et obtenir des valeurs 32 bits à partir d'un cœur 14 bits.

Source: EDN- 1 / f Bruit - la bougie vacillante entrez la description de l'image ici

Pic de tension
la source
Très intéressant mais je ne pense pas que la note d'application faisait référence au bruit de scintillement
Plumpie
Tous les bons points; un simple filtre de moyenne est un SINC (tous les coefficients sont les mêmes) mais il ne peut jamais converger complètement (citation plus tard - en utilisant le téléphone en ce moment).
Peter Smith
6

Ensuite, ce qu'ils proposent pour la «décimation», c'est de déplacer le point décimal.

pas exactement. la partie de la décimation fait valoir que, à mon avis, à juste titre, la «moyenne» normale de plusieurs échantillons, mais en conservant la largeur de bit, ne conserve pas autant d'informations. Donc, si vous effectuez une moyenne des lectures ADC de m n bits, la moyenne résultante est toujours une lecture adc de n bits.

L'approche proposée consiste, pour le moins, à faire la moyenne des lectures ADC à n bits afin que la moyenne résultante ait une largeur de bit plus élevée. Par exemple, la somme de 4 lectures adc 10 bits et la division de la somme par 2 donne une lecture adc 11 bits.

J'ai pensé que cela a toujours été la façon dont le suréchantillonnage a été fait de manière professionnelle. Cette simple moyenne des gens sur le net est largement considérée comme la mauvaise approche.

l'autre point que pour réduire le bruit, le suréchantillonnage n'est efficace que s'il y a du bruit est le bon. Si vous aviez un ADC 10 bits conçu par Dieu (c'est-à-dire que chaque lecture est la vraie lecture absolue, sans variation), le suréchantillonnage n'aurait pas fonctionné.

les circuits particuliers vers la fin de l'article sur l'utilisation d'un pwm pour ajouter du bruit sont incorrects: la broche ajoutant du bruit doit avoir un condensateur de blocage CC. et un point moins important est qu'il ne doit pas être une broche PWM. Une broche GPIO normale fonctionnerait.

dannyf
la source
> Cette simple moyenne des gens sur le net est largement considérée comme la mauvaise approche. pas si vous les faites comme flotteurs
Plumpie
4

Tout d'abord, un ADC est seulement aussi bon que sa référence de tension. Si votre arduino utilise le + 5V comme référence, vous pouvez oublier tout type de précision, car le régulateur + 5V est plutôt bruyant, de faible précision comme 1-5%, et sa tension de sortie dépendra de la quantité de courant tirée de à la fois au moment de la mesure et également au cours des dernières millisecondes.

Donc, si vous avez besoin d'exactitude ou de précision, veuillez sélectionner une référence de tension qui correspond à vos besoins. Si vous n'avez pas besoin d'une précision absolue sur la tension, ce sera moins cher, car vous n'en aurez besoin que pour être stable, au lieu d'être précis et stable.

Je n'ai pas testé le SAR ADC à l'intérieur de l'arduino. J'ai de l'expérience avec celui d'AT90PWM3B qui est un proche parent. C'est assez bien. Avec une tension d'entrée constante, vous obtenez la même lecture ADC, encore et encore, avec 1 LSB fluctuant si la tension est entre les valeurs. Je ne peux pas espérer un meilleur résultat d'un ADC SAR. (J'ai utilisé une référence de tension externe de bonne qualité)

Donc, le bruit n'est pas un problème ici ...

En fait, le bruit est votre ami ...

Supposons que la tension que vous souhaitez mesurer tombe sur la valeur ADC 100.1

Vous effectuez 10 mesures, mais comme l'ADC est bon, vous en obtenez 100 à chaque fois!

Vous avez donc besoin d'un peu de bruit sur votre signal, comme un LSB de bruit, pour vous assurer que si vous mesurez 100,1, vous obtiendrez 100 fois neuf sur dix et 101 fois sur dix. Il sera donc en moyenne à 100,1, vous avez l'idée?

S'il provient d'un capteur, vous aurez généralement assez de bruit gratuitement.

peufeu
la source
De bons points sur toutes les façons dont je perds à la fois l'exactitude et la précision avec ma méthode actuelle. J'ai un tl431 (shunt réglable en précision) et je vais essayer de le brancher.
Plumpie
Les régulateurs de tension linéaires ont des temps de réponse dans la gamme MHz et sont donc assez stables dans la gamme de fréquences de l'ADC.
JimmyB
Ensuite, vous souhaiterez peut-être mesurer uniquement les tensions par rapport au même Vcc (potentiomètre, capteurs de type diviseur de tension).
JimmyB
LDO avec réponse "Dans la gamme MHz" ???? Envoyez les fiches homme, j'aimerais en rencontrer un! Très probablement, l'arduino est livré avec un 1117 minable ou similaire, qui a une réponse transitoire lente du chien ... L'utilisation de l'alimentation comme référence n'est pas destinée à la précision de toute façon.
peufeu
4

Ce qui vous manque, c'est le sens de «décimation».

À proprement parler, la "décimation" est une réduction à 1/10. Autrement dit, de 10 réduire à 1.

La "décimation" telle qu'elle est utilisée dans l'échantillonnage perd son sens strict. Plutôt que 1/10, cela signifie «réduire en nombre».

Cela signifie que vous faites la moyenne d'un certain nombre d'échantillons et que vous réduisez le nombre d'échantillons du même nombre.

Par exemple, si vous échantillonnez à 1000 Hz et que vous échantillonnez en moyenne 4 échantillons, vous ne conservez que la moyenne. À la fin, vous n'avez que 250 échantillons par seconde au lieu de 1000. Vous avez perdu la résolution temporelle, mais gagné un bit de résolution de tension.

Pour chaque facteur de 4, vous gagnez 1 bit. Moyenne et décimale de 4, et passez d'une résolution de 10 bits à 11 bits de résolution.

Un autre facteur de 4 (4 * 4 = 16 au total) vous fait passer de 10 bits à 12 bits. Un autre facteur de 4 vous permet d'obtenir une résolution de 13 bits.

Mais, notez que vous suréchantillonnez maintenant d'un facteur 64. Votre taux d'échantillonnage effectif diminue du même facteur. En utilisant l'exemple du taux d'échantillonnage de 1000 Hz, vous êtes à environ 15 échantillons effectifs par seconde.

C'est la décimation, et c'est le nombre d'ADC à bit élevé qui obtiennent leur haute résolution. Ils échantillonnent à un taux élevé, moyen (ou utilisent un filtre passe-bas numérique) et déciment.

À l'extrême, vous disposez d'un ADC à un seul bit (un simple comparateur) qui suréchantillonne de plusieurs millons pour donner une profondeur de bits effective de 16 bits.

Une chose que vous devez garder à l'esprit pour que cela fonctionne est que vous avez besoin d'un bruit dans votre signal approximativement égal à la plus petite valeur que votre ADC puisse mesurer. Pour un CAN 10 bits utilisant une tension de référence de 5 V, ce serait un bruit d'environ 5 mV crête à crête.

La moyenne du bruit est l'origine des gains de bits. Imaginez que vous ayez un signal (DC) qui se situe exactement entre la valeur de 512 comptes ADC et 513 comptes ADC. En l'absence de bruit, la valeur mesurée sera toujours la même - la moyenne vous donnera la même valeur que les échantillons.

Ajoutez du bruit à peu près à la plus petite valeur mesurable, et cela semble très différent. Bien que le signal lui-même ne change pas, les valeurs mesurées "oscilleront" autour de la valeur réelle du signal. La moyenne est maintenant différente de celle des échantillons, et plus vous utilisez d'échantillons, plus vous vous rapprochez de la valeur réelle du signal


J'ai utilisé cette technique avec un Arduino (qui utilise un processeur Atmel avec un ADC 10 bits) pour obtenir une meilleure résolution pour certaines mesures que je faisais.

Je l'ai eu jusqu'à 13 bits, mais j'ai trouvé que j'en avais besoin de plus. J'aurais pu opter pour un autre facteur de 4, mais cela aurait pris trop de temps pour chaque échantillon et ne m'aurait obtenu qu'un bit de plus.

Les expériences de suréchantillonnage ont montré que ce que je faisais pouvait fonctionner (j'ai obtenu des résultats reconnaissables mais bruyants) sans avoir à dépenser du temps et de l'argent pour obtenir un meilleur ADC. Avec la preuve de concept, je pouvais aller de l'avant et obtenir ce meilleur ADC - et obtenir cette preuve ne m'a coûté que quelques lignes de code et un peu de temps.

J'ai trouvé que j'avais besoin d'au moins 16 bits. Cela aurait signifié une moyenne de 4096 échantillons.
Cela représente environ une demi-seconde en utilisant l'échantillonnage le plus rapide possible avec le logiciel Arduino.

Comme j'avais besoin de 14400 mesures, le cycle complet aurait pris 2 heures.

Je ne suis pas si patient, et les choses que je mesurais ne resteraient pas constantes aussi longtemps. J'ai dû passer à l'utilisation d'un ADC qui utilise un taux de suréchantillonnage beaucoup plus élevé en interne et qui fournit des échantillons de résolution plus élevée à un taux inférieur.

Comme pour beaucoup de choses, la décimation est un compromis qui peut vous offrir de meilleures performances dans une direction (profondeur de bits) tout en vous coûtant les performances dans une autre direction (taux d'échantillonnage).

JRE
la source
3
Puisque vous prenez le temps de réfléchir à ce que signifie la décimation : Strictement, cela signifie une réduction de 1/10, en gardant 9/10 des articles.
pipe
2

Vous pouvez donc étudier la théorie, mais je peux vous dire qu'en pratique, seul un modèle simple compte. Vous pouvez faire la moyenne, tant que votre signal est dans le bruit. La composante moyenne du bruit sera alors mise à zéro, tandis que le signal restera. De cette façon, vous obtiendrez une résolution au détriment de la bande passante.

Si vous avez par exemple un adc 16 bits et que ses quatre derniers bits sont bruyants, vous pouvez les filtrer et y obtenir le signal. Mais si vous avez juste un peu de bruit, il n'y a pas grand-chose à faire, donc vous n'obtiendrez pas beaucoup de nouvelles informations.

Si vous avez besoin d'une résolution très élevée (et d'une faible bande passante), regardez comment fonctionne l'ADC sigma-delta. Ils ont un signal à haut débit de 1 bit qui est ensuite filtré jusqu'à une certaine bande passante avec une résolution plus élevée, parfois 20 bits et plus.

Gregory Kornblum
la source
2

Pourquoi tu ne peux pas? Vous pouvez , mais vous devez considérer toutes les sources d'erreur et de bruit pour vous assurer que votre plan fonctionne.

La moyenne permet d'améliorer la résolution en réduisant l'erreur d'écart type, σ. Le critère à respecter est que le bruit gaussien doit juste dépasser l'erreur de quantification. La spécification à définir est l'erreur totale et les erreurs de quantification ou de résolution ne contribuent qu'une petite partie du budget d'erreur total.

Par exemple, si vous vouliez améliorer la résolution de 2 bits, mais que votre bruit était déjà de 3 bits, vous devez considérer comment réduire le bruit de 2 + 3 = 5 bits tout en augmentant la résolution de 2 bits en même temps.

  • Cela pourrait être une solution numérique avec une moyenne> 25 échantillons avec le coût de la latence ou une solution analogique par filtrage de rejet de bruit, équilibrant les signaux pour rejeter le bruit de mode commun et / ou protégeant mieux le signal avec la moyenne numérique.

Où n est le ou les bits de résolution supplémentaires souhaités, le décalage vers la droite d'un nombre binaire (ou décimation) x1 est égal à / 2.

Pour faire la moyenne, cela signifie que σ du bruit est réduit de X pour x échantillons mais aussi que la latence est augmentée de x échantillons de temps, donc un suréchantillonnage est nécessaire pour réduire la latence.

Notez que le terme "décimation" s'applique à la fois aux valeurs décimales et aux nombres décimaux codés binaires. Vous pouvez visualiser si vous avez un compteur qui lit des valeurs entières, puis en moyenne 10 résultats, vous divisez par 10 pour obtenir une amélioration avec une décimale supplémentaire, mais le σ du bruit est seulement réduit de 1/10=1/3.3 pour x échantillons mais aussi que la latence augmente de x échantillons de temps, donc un suréchantillonnage est nécessaire pour réduire la latence,

Foversunempljeng=4nFNyqujest

Cependant, le bruit à ce taux d'échantillonnage,Fs doit être juste suffisant pour trembler +/- 1 bit sur certains des échantillons x, pour obtenir la meilleure amélioration de la résolution.

  • Par exemple, si le BW est de 10 kHz, FNyqujest= 20 kHz
  • et si vous souhaitez convertir une résolution de 10 bits en 12 bits, alors n = 2 L'augmentation de la résolution de 10 bits à 12 bits nécessite la somme de 16 valeurs de 10 bits. Une somme de 16 valeurs de 10 bits génère un résultat de 14 bits où les deux derniers bits ne devraient pas contenir d'informations précieuses.

Une erreur de quantification excessive ou un bruit aléatoire trop important nécessitera plus de moyenne pour réduire l'erreur et plus de moyenne augmentera la latence du résultat.

Pour optimiser un ADC pour la vitesse et l'erreur, il faut définir le budget d'erreur total et la résolution disponible (bits), le SNR souhaité ou l'erreur absolue pour tout signal donné dans toute la plage de mesure. La définition de toutes les sources d'erreur au début peut sembler difficile, mais nécessaire, y compris;

Ex: erreur de gain, erreur de décalage, erreur de quantification, erreur de bruit CM, erreur de bruit DM, bruit Vref ou erreur de décalage, bruit environnemental, etc., erreur de latence (provenant de la moyenne)

Déterminez ensuite le nombre de bits de résolution supplémentaires dont vous avez besoin pour atteindre le budget d'erreurs de conception ci-dessus une fois que toutes les autres sources d'erreur ont été réduites.

La même chose s'applique à la moyenne (pour les signaux lents) et au suréchantillonnage de la bande passante du signal et à la décimation pour l'ADC en temps réel.

Cela ne corrigera pas les erreurs de gain ou de décalage et si le bruit aléatoire est insuffisant, du bruit doit être ajouté pour tramer le signal. Idéalement, toutes les autres sources de bruit et d'erreur ne dépassent pas 1 bit, de sorte que l'écart type ou le tremblement n'est que de +/- 1 valeur sur le nombre d'échantillons. Cependant, il doit y avoir suffisamment de bruit pour que la même lecture ne soit pas obtenue par des échantillons successifs dans les deux méthodes.

Tony Stewart Sunnyskyguy EE75
la source
1

La théorie sous-jacente peut être tirée, sous forme abrégée, de cette phrase l'article de Wikipedia sur le suréchantillonnage :

Cependant, le SNR augmente de sqrt (N) (...). La somme du bruit non corrélé augmente son amplitude de sqrt (N), tandis que la somme d'un signal cohérent augmente sa moyenne de N. Par conséquent, le SNR (ou signal / bruit) augmente de sqrt (N). Dans l'exemple, cela signifie qu'avec N = 256, la plage dynamique augmente de 8 bits et le contenu du "signal cohérent" augmente de N, mais le bruit change d'un facteur sqrt (N) = sqrt (256 ) = 16 dans l'exemple (à ne pas confondre avec une augmentation de 16 bits), donc le SNR change d'un facteur 16.

Donc, à condition que votre signal corresponde à certains critères (comme être suffisamment lent et avoir un faible bruit), vous augmentez en fait un bit pour 4 échantillons. Ensuite, pour tous les 4 échantillons résultants, vous pouvez obtenir "join" puis à nouveau pour former un autre échantillon, de plus haute résolution, de sorte qu'à la fin, vous obtenez log_4 (n) bits pour chaque n échantillons que vous lisez sur votre ADC.

Quant à la partie décimation, ce n'est pas vraiment une moyenne, surtout si l'on considère que nous parlons ici d'entiers (échantillons ADC). Par exemple, si vous avez des échantillons 1, 1, 3et 2, votre moyenne serait la suivante:

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

Puisque vous faites la moyenne avec des mathématiques entières, votre "résultat mathématique" de 1,75 sera arrondi à 1. Si vous multipliez ensuite par 2, vous obtiendrez 2 .

Maintenant, si vous le décimez avec:

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

Votre résultat sera 3. Vous pouvez affirmer que cela revient à diviser par 2, mais vous ne pouvez certainement pas affirmer que 3 est la moyenne de 1, 1, 3 et 2 . Regarde la différence?

Maintenant, vous pourriez être tenté de tout résumer et de ne pas jeter le dernier bit. Mais rappelez-vous que ce bit est du bruit: vous ne pouvez pas vraiment l'utiliser.

Ronan Paixão
la source
J'ai l'impression que si l'amplitude du bruit augmente avec sqrt (N) et que le signal cohérent augmente avec N, alors le SNR devra augmenter avec N / sqrt (N) et non sqrt (N)
Plumpie
@Plumpie Vérifiez à nouveau vos calculs: N/sqrt(N) = sqrt(N).
Ronan Paixão
1

Il semble que tout le monde ait déjà couvert la partie théorique de votre question, mais puisque vous utilisez un Arduino, vous voudrez peut-être lire mes aventures en essayant d'améliorer la résolution de l'ADC avec cette technique:

Amélioration de la résolution Arduino ADC avec tramage et suréchantillonnage

Le caractère du bruit est une partie critique de l'histoire, et il s'avère que vous pouvez générer un tramage raisonnablement bon en pulsant simplement une broche avec une résistance pendant que vous lisez l'ADC de manière asynchrone. Ce n'est pas parfait, et vous obtenez un petit décalage de synchronisation qui varie en fonction du nombre d'échantillons / bits supplémentaires que vous essayez d'atteindre. J'accepterais également la critique selon laquelle cette technique dépend de la mauvaise stabilisation du rail dans l'Arduino, donc est vraiment une conception défectueuse, plutôt que de suivre les bonnes pratiques. Mais c'est très simple à faire.

Ed Mallon
la source