Numérique en temps réel du filtre à zéro de la phase
Dans matlab, nous pouvons utiliser filtfilt fonction de filtrer les données qui met en avant et en arrière des techniques de filtrage dont les résultats de phase zéro. Mais il est difficile de mettre en œuvre ce filtre en temps réel car elle implique l'arrière de filtrage.
Je veux mettre en œuvre une 1ère commande passe-haut ou passe-bas du filtre à zéro de phase en temps réel. Comment puis-je y parvenir?
J'ai rechercher sur le web pendant des jours, mais impossible d'obtenir la moindre idée de commencer avec ça!
Merci d'avance!
OriginalL'auteur sam | 2012-08-31
Vous devez vous connecter pour publier un commentaire.
Il n'est pas possible de faire une mise à zéro de la phase de filtre en temps réel à cause d'un zéro-filtre de phase nécessite des coefficients d'un filtre qui est symétrique autour de zéro. Cela signifie que le filtre est non-causalité, ou de la sortie courant dépend l'avenir de l'entrée. Bien sûr, cela n'est pas possible dans le temps réel de l'affaire et peut être truqué comme dans le cas de
filtfilt
durant le post-traitement.Ce que vous êtes probablement à la recherche d'un phase linéaire filtre. Ne laissez pas le nom vous tromper; cela ne signifie pas que le filtre produit toute distorsion de phase. Cela signifie seulement que le décalage est appliqué à la sortie. Un déphasage linéaire avec la fréquence des résultats dans un changement constant dans le temps. Donc, fondamentalement, votre sortie sera retardée de quelques constante nombre d'échantillons (le retard de groupe) à partir de l'entrée.
De sorte que la seule différence entre un zéro-phase et phase linéaire filtre est que la phase linéaire de sortie du filtre est un retard de la version de la zéro-phase de sortie. Ce délai peut être représenté en gardant le retard de groupe si vous avez besoin de garder la sortie alignés dans le temps avec l'entrée.
Réponse au commentaire:
Filtres FIR sont garantis pour être en phase linéaire si leurs coefficients sont symétriques sur le centre. MATLAB peut facilement créer ces types de filtres avec des fonctions telles que fir1 ou firpm. Les exemples dans la documentation de ces fonctions devrait vous montrer comment les utiliser.
Le retard de groupe d'un filtre FIR à phase linéaire est
(L-1)/2
oùL
est la longueur du filtre. Pour cette raison et quelques autres choses, j'avais l'habitude de choisir un étrange longueur de filtre de sorte que le retard est aligné sur un échantillon et non pas entre les deux échantillons. Cela signifie essentiellement que le signal de sortie sera retardé à partir de l'entrée en(L-1)/2
échantillons.La mise en œuvre de réels processus de filtrage est fondamentalement la convolution discrète de l'entrée du filtre. Cela implique d'inverser les coefficients d'un filtre, en la multipliant par la plus récente
L
échantillons d'entrée, et l'ajout de ces résultats à la production d'un seul échantillon de sortie. Ensuite, une nouvelle entrée de l'échantillon est introduit, et l'ensemble du processus se fait à nouveau pour produire un autre échantillon (mutiplying et sommation sur une fenêtre glissante). Vous devriez être capable de trouver un exemple de code pour la convolution sur le web.C'est la voie la plus directe pour effectuer le SAPIN de filtrage, mais pour plus de filtres, il peut être plus efficace d'effectuer la convolution rapide avec une FFT. Ce sera beaucoup plus difficile d'obtenir le droit, de sorte que si vous parlez des taux d'échantillonnage élevés et à long filtres, je voudrais juste aller avec l'approche directe.
Merci pour cette explication!!! Mais comment la mettre en œuvre en temps réel? Comment garder la trace de retard de groupe? Est-il des références ou déjà terminé exemples de ce genre de la nature? Et plus important encore, comment pouvons-nous utiliser Matlab outil pour générer les coefficients d'un temps réel à phase linéaire passe-bas/passe-haut filtre? Merci!!!!!
S'il vous plaît aidez-moi!
Voir mon edit au dessus
OriginalL'auteur Jason B
Un "non-causalité" zéro-filtre de phase en plus d'une quantité suffisante de ajouté retard peut être approchée par une relation de causalité linéaire de phase filtre FIR. Cela suppose que l'ajout d'un peu de retard correspond à des exigences de votre système.
Dans votre cas, vous pourriez prendre de la réponse impulsionnelle de votre avant+arrière asymétrique (ou non-linéaire de la phase) processus de filtrage, de la fenêtre de réponse d'impulsion pour rendre la réponse limitées dans la durée, le retard de la longueur finie du noyau, de sorte qu'il ne nécessite pas de "l'avenir" des échantillons, et de l'utiliser comme un filtre FIR de noyau. Vous devrez vérifier les résultats pour voir si votre fenêtre est approprié dans la longueur et la forme. Il peut y avoir un compromis dans le choix d'un retard contre la qualité du filtre en raison de la longueur finie de fenêtrage nécessaire pour ce retard.
hotpaw2 u peut m'aider? 😀
OriginalL'auteur hotpaw2