MATLAB filtfilt
effectue un filtrage avant-arrière, c'est-à-dire filtrer, inverser le signal, filtrer à nouveau puis inverser à nouveau. Apparemment, cela a-t-il été fait pour réduire les décalages de phase? Quels sont les avantages / inconvénients de l'utilisation d'un tel filtrage (je suppose que cela entraînerait une augmentation efficace de l'ordre des filtres).
Serait-il préférable d'utiliser filtfilt
toujours au lieu de filter
(c'est-à-dire uniquement le filtrage direct)? Y a-t-il des applications où il est nécessaire de l'utiliser et où il ne devrait pas être utilisé?
Réponses:
Vous pouvez mieux le regarder dans le domaine des fréquences. Si est la séquence d'entrée et est la réponse impulsionnelle du filtre, alors le résultat de la première passe de filtre estx[n] h[n]
avec et les transformées de Fourier de et , respectivement. L'inversion temporelle correspond au remplacement de par dans le domaine fréquentiel, donc après l'inversion temporelle nous obtenonsX(ejω) H(ejω) x[n] h[n] ω −ω
La deuxième passe de filtre correspond à une autre multiplication avec :H(ejω)
qui, après inversion du temps, donne finalement le spectre du signal de sortie
car pour les coefficients de filtre à valeur réelle, nous avons . L'équation (1) montre que le spectre de sortie est obtenu par filtrage avec un filtre à réponse en fréquence , qui est purement réel, c'est-à-dire que sa phase est nulle et par conséquent il y a aucune distorsion de phase.H(e−jω)=H∗(ejω) |H(ejω)|2
Telle est la théorie. Dans le traitement en temps réel, il y a bien sûr un retard assez important car l'inversion du temps ne fonctionne que si vous autorisez une latence correspondant à la longueur du bloc d'entrée. Mais cela ne change pas le fait qu'il n'y a pas de distorsions de phase, c'est juste un retard supplémentaire des données de sortie. Pour le filtrage FIR, cette approche n'est pas particulièrement utile car vous pourriez aussi bien définir un nouveau filtre et obtenir le même résultat avec un filtrage ordinaire. Il est plus intéressant d'utiliser cette méthode avec des filtres IIR, car ils ne peuvent pas avoir de phase nulle (ou de phase linéaire, c'est-à-dire un retard pur).h^[n]=h[n]∗h[−n]
En somme:
si vous avez ou avez besoin d'un filtre IIR et que vous voulez une distorsion de phase nulle ET que le délai de traitement ne pose aucun problème, cette méthode est utile
si le délai de traitement est un problème, vous ne devez pas l'utiliser
si vous avez un filtre FIR, vous pouvez facilement calculer une nouvelle réponse de filtre FIR qui équivaut à utiliser cette méthode. Notez qu'avec les filtres FIR, une phase exactement linéaire peut toujours être réalisée.
la source
maximum-aposteriori-estimation
. Pourriez-vous s'il vous plaît le renommer enmaximum-a-posteriori-estimation
? Par erreur, j'ai oublié l'-
aprèsa
. Je vous remercie.J'ai trouvé cette vidéo très, très utile (elle développe la réponse de Matt).
Voici quelques idées clés de la vidéo:
x[n]
, le filtrez, inversez le résultat, filtrez-le à nouveau et inversez-le à nouveau (l'étape d'inversion du temps nécessite que toutes les données soient disponibles).la source