Eclairage à led de vélo 3W+tracker (atmega, ESP32) maker

Pour améliorer le filtrage précédant, il est possible de prendre un filtre d’ordre supérieur.

Mais, les livres pour bien comprendre les filtres numériques ne sont pas très vulgarisé et ils n’ont pas beaucoup d’exemple comme on a pourrait le voir sur le post précèdent :

http://www.f-legrand.fr/scidoc/docimg/numerique/filtre/filtrenum/filtrenum.html
il y a sur ce lien, sur le filtage avec Arduino
http://www.f-legrand.fr/scidoc/docimg/sciphys/arduino/filtrage2/filtrage2.html

Mais la vulgarisation n’est pas simple, car il y de nombreuses méthodes pour déterminer les coefficients d’un filtre numérique à partir d’un gabarit désiré ou à partir d’un filtre analogique.
Evidemment, il y a des softs qui déterminent les coefficients assez facilement tel que :
Matlab filterBuilder pour
Mathcad Plus avec des fonctions spécifiques
des soft en C Web Page Under Construction
Je n’ai pas réussi à faire fonctionner ce lien
jayduino - Arduino stuff written by me

Pas mieux avec celui la
http://t-filter.engineerjs.com/

Je n’ai pas de trouver de tuto sur le forum en anglais, ni en francais ????

Autant, le faire par soi meme....avec mathcad c'est assez facile
Mais pourquoi pas faire les calculs du filtre avec Excel, IDE arduino....
les calculs avec les complexes vont etre plus penible...mais why not....

Le calcul mathématique d’un butterworth numérique quel que soit son ordre va être présenté.
Dans le lien suivant, un article présente la méthode bilinéaire mais avec un filtre de coupure de 1 rad/s ???????? Ce qui n’aide pas à la compréhension.

Quelques soient l’ordre du filtre butterWorth, il n’y a pas de gain positif, le lien dans Wikipédia présente bien ce filtre analogique et il est très facile de déterminer la courbe d’atténuation avec Mathcad.
Nous allons prendre une fréquence de coupure de 10hz et une fréquence d’échantillonnage de 100Hz


Puis de déterminer les pôles du filtre pour les transformer en zéro du filtres numérique


Enfin de vérifier, l’atténuation du filtre avec les coefficients déterminés, la courbe de fréquence est tracé. On retrouve bien une atténuation de 0.707 ou de -3db à la fréquence de coupure.

Plus, l’écart entre la fréquence d’échantillonnage et la fréquence de coupure est grande, plus l’ordre N du filtre pourra être grand. mais plus le gain devra etre petit et la résolution des zeros devront etre precis.
pour bien tester le filtre numerique, il faut générer un signal sinusoïdal en entrée et voir en sortie l’atténuation pour chaque fréquence testée

sinon, en utilisant, la décomposition de série de fourriers d’un signal carré, L’amplitude de l’ondulation sera égale à l’équation suivante exemple avec une frèquence de coupure de 1hz.

Si on utilise, un ordre 1, alors l’ondulation theorique sera de 14%

Si on utilise un ordre 3, ondulation sera de 0.1%

Maintenant, il reste à implanter dans l’Arduino.
Evidement les coefficients a(z) sont en float car il faut une certaine précision.
Quel est le temps de calcul de l’Arduino en fonction de l’ordre ?
Mais ce sera pour plus tard.