2010-11-24 5 views
6

Je fais des calculs sur les données du gyroscope et de l'accéléromètre combinées et j'aimerais filtrer les données résultantes. Quelqu'un pourrait-il poster un code générique pour un filtre passe-bas?Comment implémenter un filtre LowPass?

+0

voulez-vous le code pour générer des coefficients ou tout simplement effectuer le filtrage? devrait-il être un IIR ou un filtre FIR? – Guy

+0

Eh bien, je voudrais un filtre similaire à ce qu'Apple utilise pour filtrer les données de l'accéléromètre. Seul leur code ne fonctionne pas pour moi. – cgossain

+0

de quelle manière cela ne fonctionne-t-il pas? – Guy

Répondre

6

Un 1er filtre passe-bas pour IIR peut être de la forme:

output_value = rate * input_value + (1.0 - rate) * previous_output_value; 

qui est à peu près ce qui est à l'intérieur Exemple d'AccelerometerGraph d'Apple. Vous sélectionnez le paramètre de fréquence en fonction de la fréquence (très très secouée par seconde) que vous souhaitez réduire ou commencer à atténuer pour obtenir une sortie plus douce et la fréquence d'échantillonnage des données d'entrée.

2

Un filtre passe-bas est simplement un lissage des résultats pour supprimer les hautes fréquences. Le filtre passe-bas le plus simple est un filtre de boîte qui est fait en faisant la moyenne de n échantillons ensemble.

Pour une moyenne de 2 échantillons ensemble c'est aussi simple que faire:

sample[n] (sample[n] + sample[n + 1])/2; 
2

Si l'exemple AccelerometerGraph d'Apple est trop complexe pour que vous compreniez, j'ai créé un exemple accéléromètre plus simple pour ma classe que vous pouvez télécharger here. Cela implémente un simple filtre passe-bas et passe-haut pour les valeurs d'accéléromètre brutes, puis enregistre les résultats à l'écran.

Comme hotpaw2 et Goz décrit, celui-ci utilise une moyenne mobile pondérée très simple pour le calcul du filtre:

UIAccelerationValue lowPassFilteredXAcceleration = (currentXAcceleration * kLowPassFilteringFactor) + (previousLowPassFilteredXAcceleration * (1.0 - kLowPassFilteringFactor)); 
Questions connexes