Qu'est-ce que cela fait dans ma sortie de filtre LP devenu HP?

10

J'essaie de filtrer HP un signal en le filtrant LP et en soustrayant la sortie du filtre d'origine. Pour obtenir le signal filtré LP, j'ai filtré en arrière-avant en utilisant un filtre Butterworth du troisième ordre pour un signal de 16 000 échantillons. La fréquence de coupure était de 0,5 Hz à 250 Hz. Aucune fenêtre n'a été utilisée.

Dans les premiers 85% des échantillons, la sortie de cette méthode semble chevaucher complètement le signal réellement filtré par HP. Cependant, à la fin de la sortie, il y a un phénomène incroyablement sincère.

  • Quelles sont les causes?
  • Que pourrais-je changer pour rendre cette méthode possible?

Voici les deux signaux superposés. Le bleu est filtré par HP et le rouge est obtenu par soustraction.

Signaux HP et orig-LP

Voici la différence absolue par échantillon. Ils ne sont jamais exactement égaux; la différence minimale est de 8e-12. 87% des valeurs sont inférieures à 0,01.

différence entre les deux méthodes

(S'il existe un meilleur moyen d'obtenir un filtre HP à partir du d'un filtre LP , je serais heureux de l'apprendre.)H(z)

Andreas
la source
Pouvez-vous inclure le code MATLAB que vous utilisez pour générer les tracés? Les données ne sont pas importantes; vous pouvez simplement le simuler avec des échantillons aléatoires à la place si nécessaire.
Jason R

Réponses:

0

Methinks @ hotpaw2 est sur la bonne voie. Je suppose que filtfilt ne gère pas tout à fait les conditions initiales pour le filtre inverse. Cela semble être un problème vraiment difficile - je ne pense pas que je puisse reprocher à Mathworks de se tromper ...

Le correctif me semble assez simple: mettre à zéro la fin de votre signal jusqu'à ce que le sinc disparaisse et supprimer le remplissage (désormais différent de zéro!) Après le filtre.

rtollert
la source
0

Vous effectuez un filtre vers l'avant pour l'un et un filtre vers l'avant uniquement pour l'autre. Ainsi, les deux filtres se comporteront différemment sur un ou les deux bords.

Si votre signal est fortement stationnaire et exactement périodique dans la longueur de la fenêtre de données, vous pouvez essayer d'enrouler les données de manière circulaire et de démarrer vos filtres en fonction de leur longueur de réponse impulsionnelle.

hotpaw2
la source
Désolé si je n'ai pas été assez clair. Le signal que je compare à (bleu) est également filtré avant-arrière ( filtfiltet butter(3,0.5/250,high)). Le signal provient d'un ECG que je ne peux pas espérer être exactement périodique.
Andreas
Suis-je en train de mal comprendre quelque chose? Je ne peux pas comprendre le vote positif car le premier paragraphe est clairement faux.
Andreas