Quel est l'avantage du filtfilt de MATLAB

30

MATLAB filtfilteffectue 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 filtfilttoujours 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é?


la source
N'utilisez pas de filtrage de phase zéro pour l'audio, car cela provoque une "pré-sonnerie" qui semble étrange. Le filtrage en phase minimale est plus naturel. ccrma.stanford.edu/~jos/filters/Linear_Phase_Really_Ideal.html
endolith

Réponses:

34

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]

X(ejω)H(ejω)

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]ωω

X(ejω)H(ejω)

La deuxième passe de filtre correspond à une autre multiplication avec :H(ejω)

X(ejω)H(ejω)H(ejω)

qui, après inversion du temps, donne finalement le spectre du signal de sortie

(1)Y(ejω)=X(ejω)H(ejω)H(ejω)=X(ejω)|H(ejω)|2

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(ejω)=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.

Matt L.
la source
J'ai créé une balise nommée maximum-aposteriori-estimation. Pourriez-vous s'il vous plaît le renommer en maximum-a-posteriori-estimation? Par erreur, j'ai oublié l' -après a. Je vous remercie.
Royi
15

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:

  • La phase zéro n'entraînera aucune distorsion de phase, mais entraînera un filtre non causal. Cela signifie que si les données sont filtrées lors de leur collecte, ce ne sera pas une option (valable uniquement pour les données stockées que nous pouvons post-traiter).entrez la description de l'image ici
  • Lorsque vous implémentez un filtre non causal, les transitoires sont flous en avant et en arrière (par exemple, si nous voulons une ondulation de 2 dB, le fait que nous allons effectuer une course avant et arrière en utilisant le filtre signifie que nous voulons chacun de ceux-ci doivent avoir 1 dB).entrez la description de l'image ici
  • Utilise la propriété d'inversion temporelle de la transformée de Fourier à temps discret. entrez la description de l'image ici
  • La réponse en fréquence effective causée par FILTFILT est l'amplitude de celle dans une direction, au carré. Vous prenez votre signal d'entrée 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).entrez la description de l'image ici
aralar
la source