FFT versus filtre Pass-band

a marqué ce sujet comme résolu.

Bonjour, Néophyte, j’ai utilisé la FFT rapide de la librairie Arduino pour détecter des frelons asiatiques en vol stationnaire devant une ruche. Grâce à un premier enregistrement fait à Nice, j’ai déterminé la fréquence de 230Hz +-10% comme la celle du Frelon asiatique et pour valider le vol stationnaire, j’ai attendu qu’il y ait 5 détections du 230Hz en moins de 5 secondes, puis j’ai donc fabriquer 10 enregistreurs avec prise de photo sur la base d’un Esp32Cam avec un microphone sur le port A0, et je les ai envoyés à 10 apiculteurs en France. J’ai eu la joie de recevoir des photos de Frelons asiatiques détectés et photographiés depuis 5 sites : Limoges, Nice, Toulouse, Caen et Castelnaudary. Fort de cette première réussite, nous avons voulu simplifier la fabrication et faire un détecteur basé sur deux filtres électroniques encadrant la fréquence 230H. Et là aucun succès !!!! Aucune détection !!! Pourquoi ? Oui la question est brutale ; pourquoi un système de filtre pass-band ne détecte pas ce que la FFT détecte sur la même fréquence ? Auriez-vous un début d’explication ?

Salut,

Sans plus de détails, c’est compliqué de trouver un début de réponse sans faire trop de suppositions.

Ni la FFT, ni un filtre ne fait de détection en tant que tel, c’est-à-dire dire « présent » ou « absent ». Quel traitement est fait ensuite sur les résultats de la FFT ou du filtre ?

Salut,

J’ai quand même quelque chose qui m’interpelle dans ton message, tu dis utiliser deux filtres. Quelles sont leur mode (passe haut, passe bas) et leur fréquence de coupure ? Sont-ils montés en série ?

Là tout de suite une idée d’explication serait que tu as un filtre passe-bas qui coupe tout ce qui est supérieur à 230Hz et derrière un passe haut qui enlève toutes les fréquences inférieures à 230Hz, ce qui fait qu’il ne reste rien.

Salut Aabu, "Ni la FFT, ni un filtre ne fait de détection en tant que tel" Oui, voici comment cela fonctionne : le frelon asiatique a l’habitude de faire un vol stationnaire devant la ruche pour attraper au vol une abeille revenant de sa récolte de pollen. Donc pendant une dizaine de secondes il émet un son assez particulier du à ce vol original. J’ai créé un programme qui déclenche la prise d’une photo quand l’Esp32-Cam détecte grâce à un micro et au traitement du son par la FFT de la bibliothèque FFT-Arduino (https://github.com/kosme/arduinoFFT). Comme ça a fonctionné un peu partout en France, j’ai donc supposé que la fréquence 230 Hz +- 10% était caractéristique et pour rendre l’appareil plus simple j’ai fait fabriquer un détecteur basé sur deux filtres électroniques encadrant cette valeur. Mais ça n’a pas fonctionné !! Il semble que la FFT utilise en plus la répétitivité dans ses critères ??? En tout cas je ne m’explique pourquoi, aussi je vous pose la question : pourquoi une détection basée sur une fréquence analysée avec une FFT fonctionne alors qu’un analyseur basé sur deux filtres encadrant la même fréquence, ne détecte rien ? Y-aurait-il une raison mathématique ?

Salut melepe "Quelles sont leur mode (passe haut, passe bas) et leur fréquence de coupure ? Sont-ils montés en série ?" oui, oui Nous avons évidement tester les analyseur à base de deux filtres avant de les envoyer un peu partout, ils réagissaient bien à une émission de son comprise autour des 230 Hz.

Voici mon dépôt sur GitHub : https://github.com/Barrois/Detecteur-ESP32-Cam-Blob-Detector

+0 -0

Sans passer un temps important et expérimenter soi-même avec ton design, c’est dur de dire où il y a un problème.

J’ai regardé un peu la doc du composant que tu utilises sur ta solution "passe-bande". C’est un décodeur de ton/boucle à verrouillage de phase. Il y a plein d’indications dans la data sheet sur comment ça fonctionne et des choses qui peuvent causer des dysfonctionnement, donc j’imagine que ton design mériterait d’être vraiment testé de manière approfondie.

Quoi qu’il en soit, le fonctionnement est très différent d’un algo à base de FFT. Les deux pourraient marcher pour ton application, à vue de nez. J’ai le sentiment que la FFT ou apparenté pourrait être une solution plus robuste. Même si j’ai de gros doute sur la robustesse des deux concepts.

Quoi qu’il en soit, j’ai l’impression que la mise au point nécessite encore pas mal de travail qu’on aura du mal à t’aider à faire.

+1 -0

plus philosophiquement… j’utilise la FFT sans vraiment comprendre ce qu’elle fait … un peu comme une IA :

D’ailleurs, je commence à penser qu’une IA est un outil de fainéant inculte qui se contente de récolter des données pour les faire bouffer à un tuto qui lui crache le "machin" ad-hoc surtout sans comprendre.

+0 -0

Salut, Je n’ai pas très bien compris pourquoi tu souhaites utiliser des filtres électronique plutôt que faire faire le travail à ton microcontrôleur, ce qui vu de loin est plus simple.

Pour ce qui est de la FFT, il y a quelques contenus sur Zeste de Savoir qui peuvent t’intéresser (instant pub éhonté), selon ton niveau de compréhension:

  • Le tutoriel sur les signaux sinusoïdaux de Aabu, je pense que c’est la meilleure introduction sur ce site si tu n’es pas certains de ces histoires de fréquence, phase etc.
  • Mon tuto sur l’implémentation de la FFT, en particulier la première partie discute de comment on passe de la transformée de Fourier à la transformée de Fourier discrète, que permet de calculer l’algorithme FFT.
  • Il y a également un bon tutoriel de reconnaissance de notes de musiques ici.
  • Et enfin il y a ce billet qui traite de sujet similaire.

Sinon, si tu cherches à détecter une seule fréquence en particulier, tu peux utiliser l’algorithme de Goertzel.

Edit: oubli du tuto sur les signaux sinusoïdaux.

+1 -0

Merci klafyvel ! oui, c’est un peu ça : utiliser une paire de filtres électronique à la place d’une FFT dans un microprocesseur. Pour toi, le résultat devrait donc être le même. Pour moi aussi, mais dans la réalité non, et je cherche la ou les raisons pour qu’elle(s) différe(ent) ?

Bonjour Klafyvel,

Voici ce que me dit l’électronicien qui a réalisé le double filtre électronique qui ne donne pas le même résultat que la FFT :

Le système de détection utilisé est un circuit à boucle de verrouillage de phase contenu dans le circuit NE567 (décodeur de tonalité) Je ne sais pas si on peut assimiler ceci à un filtre électronique vu que le signal de sortie est un état logique et largeur de bande de détection dépend de la fréquence d’accord du circuit. 

Est-ce que cela t’éclaire ? Veux tu d’autres précisions ?

+0 -0

Salut, Sans faire une session de débogage avec le schéma du montage que vous avez utilisé, le matériel et un oscilloscope il va être difficile voir impossible de te donner une réponse adéquate sauf coup de bol. A priori, d’après sa documentation le NE567 devrait être capable de réaliser la fonction que tu souhaite.

Cependant, au risque de répéter mes messages plus haut ainsi que ceux de Aabu, tu aurais probablement moins de problèmes à utiliser un petit algorithme sur ton microcontrôleur plutôt que de dédier un circuit électronique à la détection de fréquence. L’algorithme de Goertzel est spécifiquement prévu pour le genre de détections que tu veux réaliser. Le site Arduino liste des bibliothèques venant d’un peu partout sur le web, et tu peux par exemple y trouver une bibliothèque qui montre un exemple de détection de fréquence avec Goertzel.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte