Filtre Passe-Bas Matlab
Est-il un moyen dans matlab pour créer un filtre passe-bas, je sais que je peux utiliser la fonction de filtre, mais ne savez pas comment l'utiliser, j'ai donné la formule suivante pour mon passe-bas H(z) = 1 (1 - z^-4)^2 /16 (1 - z^-1)^2 avec un 20 hz fréquence de coupure
- Vous pouvez, mais vous avez besoin de Traitement de Signal de la boîte à outils. Sinon vous avez de la conception à la main.
- ajouté à ma réponse, j'avais oublié à ce sujet. Merci.
- Êtes-vous sûr que c'est le droit
H(z)
? Qui ressemble plus à un filtre en peigne qu'un passe-bas. - oui, il est, savez-vous comment je pourrais utiliser cette formule dans mon filtre passe-bas?
Vous devez vous connecter pour publier un commentaire.
La
filter
fonction vous permet d'appliquer un filtre à un vecteur. Vous avez encore besoin de fournir les coefficients d'un filtre. Si vous regardez la documentation de filtre, vous voyez que vous devez spécifier deux vecteursb
eta
dont les éléments sont les coefficients de z en décroissant pouvoirs, où z est le domaine de fréquence variable dans un z-de la transformation. Puisque vous avez une expression de votre filtre donné comme un z-transformation, les coefficients sont faciles à trouver. Tout d'abord, nous allons écrire le numérateur de votre filtre:De sorte que le
b
vecteur estb = (1/16)*[1 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 1]
. De même, laa
vecteur esta = [1 -2 1]
. Alors maintenant, vous pouvez filtrer vos données vecteurx
pour obtenir un résultaty
simplement en faisanty = filter(b,a,x);
.Après avoir dit tout cela, le H(z) vous indiquez ci-dessus est certainement pas un filtre passe-bas. C'est plus comme un peu bizarre cascade d'un filtre en peigne avec lui-même.
Si vous souhaitez concevoir votre propre filtre, et en supposant que vous avez la boîte à outils de Traitement du Signal, l'absolu de la chose la plus simple à faire est de concevoir un filtre à l'aide de Matlab
fir1
fonction:que vous pouvez ensuite utiliser dans le
filter
fonction:Vous aurez besoin de choisir N vous-même. En général, les gros N valeurs permettent de mieux filtres, où mieux = rejette plus de fréquences au-dessus de 20 Hz. Si votre valeur de N commence à devenir si grand qu'il provoque le comportement bizarre (erreurs de calcul, lent implémentations, inacceptable de démarrage/arrêt de transitoires dans les données qui en résultent), vous pourriez envisager une plus compliqué de conception du filtre. The Mathworks documentation a une vue d'ensemble des différents filtres numériques à des techniques de conception.
La formule que vous avez donné: H(z) = 1 (1 - z^-4)^2 /16 (1 - z^-1)^2 est le filtre à Z-de la transformation. C'est une fonction rationnelle, ce qui signifie que votre filtre est récursive (IIR) du filtre.
Matlab possède une fonction appelée
filter(b,a,X)
. Le b sont les coefficients du numérateur avec la diminution de la puissance de z, j'.E. dans votre cas: (1*z^-0 + 0*z^-1 + 0*z^-2 + 0*z^-3 + 0*z^-4)^2, vous pouvez utiliserconv()
pour la quantité carré:b = [1 0 0 0 -1]
b = conv(b,b)
et les coefficients du dénominateur sont:
a = [1 -1]
a = 16 * conv(a,a)
Puis vous appelez le filtre
y = filter(b,a,x)
, oùx
est vos données d'entrée.Vous pouvez également vérifier votre réponse en fréquence du filtre avec
freqz(b,a)
Espère que cela a aidé.