Table des matières:

Filtrage FIR pour une détection de fréquence plus fiable : 5 étapes
Filtrage FIR pour une détection de fréquence plus fiable : 5 étapes

Vidéo: Filtrage FIR pour une détection de fréquence plus fiable : 5 étapes

Vidéo: Filtrage FIR pour une détection de fréquence plus fiable : 5 étapes
Vidéo: Electronique numérique- échantillonnage (1/4) 2024, Juillet
Anonim
Filtrage FIR pour une détection de fréquence plus fiable
Filtrage FIR pour une détection de fréquence plus fiable

Je suis un très grand fan d'akellyirl's instructable sur la détection de fréquence fiable à l'aide de techniques DSP, mais parfois la technique qu'il a utilisée n'est pas assez bonne si vous avez des mesures bruyantes.

Une solution simple pour obtenir une entrée plus propre pour le détecteur de fréquence consiste à appliquer une sorte de filtre autour de la fréquence que vous souhaitez détecter.

Malheureusement, créer un filtre numérique n'est pas facile et il y a pas mal de maths à faire. J'ai donc pensé à créer une sorte de programme pour simplifier la création de tels filtres, pour permettre à quiconque de les utiliser dans ses projets sans creuser dans les détails.

Dans ce Instructable, je vais détecter une onde sinusoïdale de 50 Hz dans une mesure bruyante avec un Arduino Uno (Arduino n'est pas vraiment nécessaire).

Étape 1: Le problème

Le problème
Le problème

Imaginez que les données d'entrée mesurées ressemblent à la courbe ci-dessus - assez bruyante.

Si nous construisons un simple détecteur de fréquence comme celui d'Akellyirl's Instructable, le résultat est "-inf" ou dans le cas du code ci-dessous: "Ouais, trop de bruit…"

Remarque: j'ai utilisé à peu près tout le code d'akellyirl mais j'ai ajouté un tableau rawData en haut contenant les mesures bruitées.

Ci-dessous, vous pouvez trouver l'intégralité du code dans un fichier appelé "unfiltered.ino".

Étape 2: la solution

La solution
La solution

Étant donné que les données d'entrée sont bruyantes mais que nous connaissons la fréquence que nous recherchons, nous pouvons utiliser un outil que j'ai créé appelé easyFIR pour créer un filtre passe-bande et l'appliquer aux données d'entrée, ce qui se traduit par une entrée beaucoup plus propre pour le détecteur de fréquence (image ci-dessus).

Étape 3: EasyFIR

EasyFIR
EasyFIR

L'outil easyFIR est assez facile à utiliser, il suffit de télécharger le référentiel GitHub et d'exécuter le fichier easyFIR.py avec un échantillon de vos mesures (au format CSV).

Si vous ouvrez le fichier easyFIR.py, vous trouverez 5 paramètres (voir image ci-dessus) que vous pouvez et devez modifier en fonction du résultat que vous souhaitez obtenir. Après avoir modifié les 5 paramètres et exécuté le fichier python, vous verrez les coefficients calculés dans votre terminal. Ces coefficients sont cruciaux pour la prochaine étape !

Plus d'informations sur l'utilisation exacte peuvent être trouvées ici:

Étape 4: Filtrage

Filtration
Filtration

Maintenant, si vous avez calculé les coefficients de filtre nécessaires, il est assez facile d'appliquer le filtre réel au détecteur de fréquence.

Comme vous pouvez le voir dans l'image ci-dessus, il vous suffit d'ajouter les coefficients, la fonction applyFilter puis de filtrer les mesures d'entrée.

Ci-dessous, vous pouvez trouver l'intégralité du code dans un fichier appelé "filtered.ino".

Remarque: un grand merci à ce Stack Overflow Post pour l'excellent algorithme d'application de filtre !

Étape 5: Profitez

Prendre plaisir
Prendre plaisir

Comme vous pouvez le constater, nous sommes désormais capables de détecter un signal 50Hz même dans un environnement bruyant ?

N'hésitez pas à adapter mon idée et mon code à vos besoins. Je serais très reconnaissant d'inclure vos améliorations!

Si vous aimez mon travail, j'apprécierais vraiment que vous souteniez mon travail avec star sur GitHub !

Merci pour votre aide!:)

Conseillé: