Bienvenue !
Bienvenue les fans de PIC ! (aux fans du langage Pascal aussi !) Technique
Astuces
Comment supporter PMP Documentation générale
Manuels Autres trucs
Comment supporter PMP Coup de coeur du jour
Documentation Hors sujet Recherche
Téléchargements
Les 5 derniers Ajouts
Les 5 plus téléchargés
|
Astuces - Implémenter un filtre passe bas pour les ADC ou toute autre valeur
A fin d'éliminer le bruit ou limiter la réponse à des phénomènes perturbateurs, les acquisitions venant de l'ADC peuvent être traitées par un FPB (Filtre Passe-Bas), qui peut être implémenté sous la forme d'un filtre exponentiel de premier ordre (un pôle) :
Value := (Sample_0 + Sample_1 + ... + Sample_n) div n ? Pour contourner ce problème, on peut utiliser un accumulateur mis à l'échelle, disons : un accumulateur de 32 bits pour des valeurs d'entrée de 16 bits. Exemple: Nous pouvons utiliser des valeurs multipliées par P32 = 65536; c'est optimal car 65536 = (1 shl 16). La formule devient alors : AccValue32 := (AccValue32 * (N - 1) + NewValue32 * P32) div N; Value16 := AccValue32 div P32; Avec N = 16, P32 = 65536 et une nouvelle valeur en entrée sur 16 bits New16, il vient : AccValue32 := (AccValue32 * 15 + (longword(New16) shl 16) shr 4; Value16 := hiword(AccValue32); // La valeur filtrée en sortie sur 16 bits est simplement le mot supérieur de l'accumulateur. A l'initialisation (ou à la première valeur), on fait : AccValue32 := longword(New16) shl 16; Value16 := New16; Il est aisé pour le compilateur d'optimiser la formule avec des décalages et il n'y a plus de phénomènes de plancher ou de plafonnement. Date de création : 2010.08.13 3:44 PM Réactions à cet article
| Connexion...
Membres : 75
[ Devenir membre ] Membre en ligne :
Anonymes en ligne : 24
Total visites: 1705877
Record connectés :
Cumulé : 200
Le 20/10/2024 @ 06:06 Webmaster - Infos
Ip : 3.147.62.5 Recherche
Nouvelles des Amis
D'où venez-vous ?
|