web-dev-qa-db-fra.com

Comment appliquer un filtre passe-bas ou passe-haut à un tableau dans Matlab?

Existe-t-il un moyen simple d'appliquer un filtre passe-bas ou passe-haut à un tableau dans MATLAB? Je suis un peu dépassé par la puissance de MATLAB (ou la complexité des mathématiques?) Et j'ai besoin d'une fonction facile ou de quelques conseils car je ne pouvais pas le comprendre à partir de la documentation ou de la recherche sur le Web.

25
Christian

Regardez la fonction filter .

Si vous avez juste besoin d'un filtre passe-bas unipolaire, c'est

xfilt = filter(a, [1 a-1], x);

où a = T/τ, T = le temps entre les échantillons et τ (tau) est la constante de temps du filtre.

Voici le filtre passe-haut correspondant:

xfilt = filter([1-a a-1],[1 a-1], x);

Si vous avez besoin de concevoir un filtre et d'avoir une licence pour la boîte à outils de traitement du signal, il y a n tas de fonctions , regardez fvtool et fdatool .

33
Jason S

Vous pouvez concevoir un filtre Butterworth passe-bas lors de l'exécution, à l'aide de la fonction butter(), puis l'appliquer au signal.

fc = 300; % Cut off frequency
fs = 1000; % Sampling rate

[b,a] = butter(6,fc/(fs/2)); % Butterworth filter of order 6
x = filter(b,a,signal); % Will be the filtered signal

Les filtres passe-haut et passe-bande sont également possibles avec cette méthode. Voir https://www.mathworks.com/help/signal/ref/butter.html

4
Ahmad