Bienvenue !
![]() (aux fans du langage Pascal aussi !) Technique
Autres trucs
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 ![]()
| Connexion...
![]() [ Devenir membre ] ![]() ![]() ![]() Record connectés :
![]() Le 01/12/2024 @ 13:20 Webmaster - Infos
Ip : 3.138.178.145 Recherche
Nouvelles des Amis
D'où venez-vous ?
|