{"id":506,"date":"2021-07-21T09:40:28","date_gmt":"2021-07-21T08:40:28","guid":{"rendered":"https:\/\/avionicsduino.com\/?p=506"},"modified":"2025-09-26T22:14:10","modified_gmt":"2025-09-26T21:14:10","slug":"les-techniques-de-filtrage-numerique-dun-signal","status":"publish","type":"page","link":"https:\/\/avionicsduino.com\/index.php\/fr\/les-techniques-de-filtrage-numerique-dun-signal\/","title":{"rendered":"Les techniques de filtrage num\u00e9rique d&rsquo;un signal"},"content":{"rendered":"\n<p style=\"font-size:10px\"><em>(Derni\u00e8re mise \u00e0 jour le 25\/12\/2021)<\/em><\/p>\n\n\n\n<p>En mati\u00e8re de traitement du signal, la fonction d&rsquo;un filtre est de supprimer certaines parties du signal, comme par exemple le bruit.<\/p>\n\n\n\n<p>La lecture p\u00e9riodique d&rsquo;un capteur par un microcontr\u00f4leur fournit une s\u00e9rie de valeurs au cours du temps, \u00e0 une fr\u00e9quence d\u00e9termin\u00e9e par le programme. Quels que soient le capteur, le microcontr\u00f4leur, le programme ou la fr\u00e9quence d&rsquo;\u00e9chantillonnage, le signal obtenu est perturb\u00e9 par ce qu&rsquo;on appelle le bruit de mesure. Ce bruit peut \u00eatre li\u00e9 \u00e0 des interf\u00e9rences ext\u00e9rieures ou \u00e0 l&rsquo;in\u00e9vitable d\u00e9faut de pr\u00e9cision du capteur. <\/p>\n\n\n\n<p>On rappelle que la pr\u00e9cision d&rsquo;un capteur traduit la dispersion des mesures autour d&rsquo;une valeur moyenne. Son exactitude traduit la plus ou moins grande proximit\u00e9 de cette valeur moyenne avec la valeur r\u00e9elle que l&rsquo;on mesure. Dans la figure n\u00b01 ci-dessous, la courbe bleue repr\u00e9sente le signal \u00e0 mesurer, tandis que la courbe rouge correspond \u00e0 la mesure bruit\u00e9e de ce signal par un capteur. On remarque que la mesure faite par ce capteur est entach\u00e9e d&rsquo;une nette impr\u00e9cision. Mais elle a une bonne exactitude puisque la r\u00e9partition des diff\u00e9rentes mesures est centr\u00e9e sur la valeur r\u00e9elle du signal.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/07\/signal_bruite-1024x576.png\" alt=\"\" class=\"wp-image-552\" style=\"width:1024px;height:576px\" srcset=\"https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/07\/signal_bruite-1024x576.png 1024w, https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/07\/signal_bruite-300x169.png 300w, https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/07\/signal_bruite-768x432.png 768w, https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/07\/signal_bruite-1536x864.png 1536w, https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/07\/signal_bruite-1200x675.png 1200w, https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/07\/signal_bruite.png 1920w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><figcaption class=\"wp-element-caption\">Fig. 1 : Signal en bleu, et sa mesure bruit\u00e9e en rouge<\/figcaption><\/figure>\n\n\n\n<p>Le signal bruit\u00e9 de la figure n\u00b0 1 est tr\u00e8s caract\u00e9ristique de la probl\u00e9matique rencontr\u00e9e en avionique. Qu&rsquo;il s&rsquo;agisse de la pression statique, de la temp\u00e9rature des culasses, du d\u00e9bit carburant, de la tension du bus principal, de l&rsquo;angle d&rsquo;inclinaison de l&rsquo;avion, du taux de mont\u00e9e ou du r\u00e9gime moteur, les grandeurs mesur\u00e9es \u00e9voluent g\u00e9n\u00e9ralement assez lentement. Le bruit de mesure a une fr\u00e9quence nettement plus importante, qui est celle de la fr\u00e9quence d&rsquo;\u00e9chantillonnage. La technique de lissage des courbes va donc faire appel \u00e0 un filtre passe-bas. C&rsquo;est-\u00e0-dire un filtre qui supprime les fr\u00e9quences \u00e9lev\u00e9es. Le but du filtre est de corriger les mesures en temps r\u00e9el. Cela permet de se rapprocher le plus possible de la courbe id\u00e9ale correspondant au signal non bruit\u00e9. Et d&rsquo;afficher des valeurs stables et pr\u00e9cises.<\/p>\n\n\n\n<p>Pour atteindre ce but, deux techniques de filtre passe-bas sont utilis\u00e9es dans les programmes de ce site. Le filtre \u00e0 moyenne glissante et le filtre \u00e0 r\u00e9ponse impulsionnelle infinie (IIR filter en anglais, pour Infinite Impulse Response filter). Le sketch \u00e0 t\u00e9l\u00e9charger ci-dessous illustre ces deux techniques. Il fonctionne sur toutes les cartes Arduino et Teensy. Dans le cadre de ce site web qui se veut avant tout pratique, il est hors de notre propos de pr\u00e9senter les th\u00e9ories math\u00e9matiques complexes du filtrage des signaux. Le lecteur qui le souhaite pourra par exemple consulter <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Filtre_num%C3%A9rique\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"Filtre num\u00e9rique Wikipedia\">ce site<\/a> et bien d&rsquo;autres.<\/p>\n\n\n\n<div class=\"wp-block-file\"><a href=\"https:\/\/avionicsduino.com\/wp-content\/uploads\/2022\/01\/Filtres_MoyenneGlissante_et_IIR.zip\">T\u00e9l\u00e9charger Filtres Moyenne Glissante et IIR<\/a><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Le filtre \u00e0 moyenne glissante <\/h3>\n\n\n\n<p>Il consiste, pour chaque mesure, \u00e0 faire le calcul de la moyenne arithm\u00e9tique de la valeur actuelle et des N mesures pr\u00e9c\u00e9dentes. Cela suppose de garder en m\u00e9moire ces N mesures pr\u00e9c\u00e9dentes. On parle aussi de filtre \u00e0 r\u00e9ponse impulsionnelle finie, car ce filtre est bas\u00e9 sur un nombre fini de valeurs du signal d&rsquo;entr\u00e9e. De fa\u00e7on g\u00e9n\u00e9rale, plus le nombre N est grand, meilleure est la qualit\u00e9 du lissage. Mais plus la m\u00e9moire utilis\u00e9e pour stocker les derni\u00e8res valeurs est importante. Et plus on va voir appara\u00eetre un retard de la courbe filtr\u00e9e par rapport au signal (d\u00e9phasage). Ce retard est facile \u00e0 estimer. Il est \u00e9gal au produit de la p\u00e9riode d&rsquo;\u00e9chantillonnage par N\/2. Si on \u00e9chantillonne la grandeur \u00e0 mesurer par exemple toutes les 50 ms, et qu&rsquo;on fait une moyenne glissante sur 20 \u00e9chantillons, le retard sera de  500 ms. <\/p>\n\n\n\n<p>La figure n\u00b0 2 montre l&rsquo;effet de ce filtre sur le m\u00eame signal que celui de la figure n\u00b0 1, pour diff\u00e9rentes valeurs de N. Si on souhaite utiliser ce type de filtre, il faut adapter le nombre N \u00e0 l&rsquo;amplitude du bruit : plus le bruit est important, plus N doit \u00eatre grand pour un bon lissage, mais plus le d\u00e9phasage sera net. Un inconv\u00e9nient de ce filtre tr\u00e8s efficace est la complexit\u00e9 (toute relative) de l&rsquo;algorithme qui l&rsquo;impl\u00e9mente. L&rsquo;id\u00e9al est toujours de traiter un signal le moins bruit\u00e9 possible. Il est parfois possible d&rsquo;am\u00e9liorer la qualit\u00e9 du signal en changeant de mod\u00e8le de capteur. Ou en agissant sur les interf\u00e9rences ext\u00e9rieures (blindage, boucles de masse, longueur des c\u00e2bles, etc.). <\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/07\/signal_bruite_filtres_moyenne_glissante-1024x576.png\" alt=\"\" class=\"wp-image-557\" style=\"width:1024px;height:576px\" srcset=\"https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/07\/signal_bruite_filtres_moyenne_glissante-1024x576.png 1024w, https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/07\/signal_bruite_filtres_moyenne_glissante-300x169.png 300w, https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/07\/signal_bruite_filtres_moyenne_glissante-768x432.png 768w, https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/07\/signal_bruite_filtres_moyenne_glissante-1536x864.png 1536w, https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/07\/signal_bruite_filtres_moyenne_glissante-1200x675.png 1200w, https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/07\/signal_bruite_filtres_moyenne_glissante.png 1920w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><figcaption class=\"wp-element-caption\">Fig. 2 : M\u00eame signal bruit\u00e9 que sur la figure n\u00b01. On a ajout\u00e9 des filtres par moyenne glissante sur les 10 derni\u00e8res mesures en vert, les 20 derni\u00e8res en jaune, et les 30 derni\u00e8res en bleu. On voit la qualit\u00e9 du lissage s&rsquo;am\u00e9liorer et le d\u00e9phasage augmenter.<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"> Le filtre \u00e0 r\u00e9ponse impulsionnelle infinie <\/h3>\n\n\n\n<p>C&rsquo;est un filtre r\u00e9cursif : pour chaque mesure, on fait intervenir dans son filtrage la valeur filtr\u00e9e pr\u00e9c\u00e9dente, assortie d&rsquo;un coefficient C, selon l&rsquo;\u00e9quation :<\/p>\n\n\n\n<p>Valeur filtr\u00e9e = valeur filtr\u00e9e pr\u00e9c\u00e9dente * (1 &#8211; C) + valeur actuelle * C<\/p>\n\n\n\n<p>On parle de r\u00e9ponse impulsionnelle infinie car toutes les valeurs pr\u00e9c\u00e9dentes, depuis le d\u00e9but du filtrage, ont en th\u00e9orie une influence sur les futures valeurs filtr\u00e9es. En pratique, cette influence devient rapidement n\u00e9gligeable avec le temps, sauf si le coefficient C est exag\u00e9r\u00e9ment faible. Pour nos applications courantes en avionique, C est g\u00e9n\u00e9ralement compris entre 0,1 et 0,02. Les avantages de ce filtre sont la simplicit\u00e9 de sa programmation et son \u00e9conomie en ressources m\u00e9moire. Une seule valeur a besoin d&rsquo;\u00eatre m\u00e9moris\u00e9e entre chaque \u00e9chantillon. Comme pour le filtre \u00e0 moyenne glissante, un d\u00e9phasage appara\u00eet. Il est d&rsquo;autant plus important que le coefficient de filtrage diminue, avec comme corollaire une am\u00e9lioration du filtrage. On voit sur la figure n\u00b0 3 le m\u00eame signal bruit\u00e9 que sur les figures pr\u00e9c\u00e9dentes, trait\u00e9 par ce filtre r\u00e9cursif \u00e0 r\u00e9ponse impulsionnelle infinie, avec diff\u00e9rentes valeurs du coefficient C.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/07\/signal_bruite_filtres_IIR-1024x576.png\" alt=\"\" class=\"wp-image-596\" style=\"width:1024px;height:576px\" srcset=\"https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/07\/signal_bruite_filtres_IIR-1024x576.png 1024w, https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/07\/signal_bruite_filtres_IIR-300x169.png 300w, https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/07\/signal_bruite_filtres_IIR-768x432.png 768w, https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/07\/signal_bruite_filtres_IIR-1536x864.png 1536w, https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/07\/signal_bruite_filtres_IIR-1200x675.png 1200w, https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/07\/signal_bruite_filtres_IIR.png 1920w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><figcaption class=\"wp-element-caption\"> Fig. 3 : M\u00eame signal bruit\u00e9 que sur les figures n\u00b01 et 2. On a ajout\u00e9 des filtres IIR avec les coefficients suivants : 0,2 en rouge, 0,1 en bleu, et 0,06 en vert. Comme pour le filtre \u00e0 moyenne glissante, on voit la qualit\u00e9 du filtrage s&rsquo;am\u00e9liorer et le d\u00e9phasage augmenter quand on diminue le coefficient. <\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Comparaison entre ces deux filtres<\/h3>\n\n\n\n<p>Sur la figure n\u00b0 4, on a fait figurer toujours le m\u00eame signal bruit\u00e9, mais avec un filtrage par moyenne glissante sur 30 \u00e9chantillons et un filtrage IIR avec un coefficient \u00e0 0,06.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/07\/Comparaison_des_filtres-1024x576.png\" alt=\"\" class=\"wp-image-599\" style=\"width:1024px;height:576px\" srcset=\"https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/07\/Comparaison_des_filtres-1024x576.png 1024w, https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/07\/Comparaison_des_filtres-300x169.png 300w, https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/07\/Comparaison_des_filtres-768x432.png 768w, https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/07\/Comparaison_des_filtres-1536x864.png 1536w, https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/07\/Comparaison_des_filtres-1200x675.png 1200w, https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/07\/Comparaison_des_filtres.png 1920w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><figcaption class=\"wp-element-caption\">Fig. 4 : M\u00eame signal bruit\u00e9 que les figures pr\u00e9c\u00e9dentes. Comparaison du filtre IIR avec un coefficient de 0,06 (courbe verte) et du filtre \u00e0 moyenne glissante sur 30 \u00e9chantillons (courbe bleue).<\/figcaption><\/figure>\n\n\n\n<p>Que peut-on conclure de cette comparaison ? Pour ce signal tr\u00e8s bruit\u00e9, la figure n\u00b0 4 semble montrer un (tr\u00e8s) petit avantage pour le filtre \u00e0 moyenne glissante (courbe bleue). Le d\u00e9phasage des deux courbes est sensiblement identique, mais d&rsquo;une part la courbe bleue est un peu mieux liss\u00e9e, mais surtout son amplitude est identique \u00e0 celle du signal non bruit\u00e9, alors que l&rsquo;amplitude de la courbe verte est un peu \u00ab\u00a0rabot\u00e9e\u00a0\u00bb. Le sketch en t\u00e9l\u00e9chargement plus haut permet de faire toutes les simulations que l&rsquo;on souhaite pour comparer ces deux filtres. On peut faire varier le nombre d&rsquo;\u00e9chantillons pris en compte pour la moyenne glissante, le coefficient pour le filtre IIR, et m\u00eame l&rsquo;amplitude du bruit, en augmentant ou diminuant son \u00e9cart-type.<\/p>\n\n\n\n<p>Le lecteur motiv\u00e9 pourra essayer d&rsquo;autres filtres, en les rajoutant dans le m\u00eame sketch. Par exemple, le filtre de Kalman, pour lequel il existe des biblioth\u00e8ques pour Arduino et Teensy, <a href=\"https:\/\/github.com\/dwrobel\/TrivialKalmanFilter\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"Trivial Kalman Filter\">ici<\/a> ou <a href=\"https:\/\/github.com\/denyssene\/SimpleKalmanFilter\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"Simple Kalman Filter\">l\u00e0<\/a>.<\/p>\n\n\n\n<p>De fa\u00e7on g\u00e9n\u00e9rale, pour choisir un filtre adapt\u00e9 et pour en r\u00e9gler les param\u00e8tres, la connaissance du signal \u00e0 filtrer est importante. Un enregistrement en conditions r\u00e9elles (en vol) ou simul\u00e9es (en voiture) de ce signal sur une carte micro SD permet ensuite, \u00e0 t\u00eate repos\u00e9e, de tester diff\u00e9rents filtres. Soit avec un tableur comme Excel, soit en \u00ab\u00a0rejouant\u00a0\u00bb le signal sur Arduino ou Teensy, et en observant les courbes sur le traceur s\u00e9rie de l&rsquo;IDE Arduino.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>(Derni\u00e8re mise \u00e0 jour le 25\/12\/2021) En mati\u00e8re de traitement du signal, la fonction d&rsquo;un filtre est de supprimer certaines parties du signal, comme par exemple le bruit. La lecture p\u00e9riodique d&rsquo;un capteur par un microcontr\u00f4leur fournit une s\u00e9rie de valeurs au cours du temps, \u00e0 une fr\u00e9quence d\u00e9termin\u00e9e par le programme. Quels que soient &hellip; <a href=\"https:\/\/avionicsduino.com\/index.php\/fr\/les-techniques-de-filtrage-numerique-dun-signal\/\" class=\"more-link\">Continuer la lecture<span class=\"screen-reader-text\"> de &laquo;&nbsp;Les techniques de filtrage num\u00e9rique d&rsquo;un signal&nbsp;&raquo;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"class_list":["post-506","page","type-page","status-publish","hentry"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/avionicsduino.com\/index.php\/wp-json\/wp\/v2\/pages\/506","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/avionicsduino.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/avionicsduino.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/avionicsduino.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/avionicsduino.com\/index.php\/wp-json\/wp\/v2\/comments?post=506"}],"version-history":[{"count":41,"href":"https:\/\/avionicsduino.com\/index.php\/wp-json\/wp\/v2\/pages\/506\/revisions"}],"predecessor-version":[{"id":5040,"href":"https:\/\/avionicsduino.com\/index.php\/wp-json\/wp\/v2\/pages\/506\/revisions\/5040"}],"wp:attachment":[{"href":"https:\/\/avionicsduino.com\/index.php\/wp-json\/wp\/v2\/media?parent=506"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}