2009-11-23 2 views
24

esiste un modo semplice per applicare un filtro passa-basso o passa-alto a un array in MATLAB? Sono un po 'sopraffatto dal potere del MATLAB (o dalla complessità della matematica?) E ho bisogno di una funzione facile o di una guida poiché non sono riuscito a capirlo dalla documentazione o dalla ricerca sul web.MATLAB: applica un filtro passa-basso o passa-alto a un array

risposta

31

sicuro, guarda la funzione filter.

Se basta un filtro passa-basso 1 polo, è

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

dove a = T/τ, T = tempo tra i campioni, e τ (tau) è la costante di tempo del filtro.

Ecco il corrispondente filtro passa-alto:

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

Se avete bisogno di progettare un filtro, e hanno una licenza per il Signal Processing Toolbox, c'è a bunch of functions, guarda fvtool e fdatool.

+0

Sapevo che sarebbe stato così semplice. Molte grazie! – Christian

2

È possibile progettare un filtro Butterworth passa-basso in runtime, utilizzando la funzione butter() e applicarlo al segnale.

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 

Con questo metodo sono anche possibili filtri passa-alto e passa-banda. Vedi https://www.mathworks.com/help/signal/ref/butter.html

+0

Avviso. Ciò richiede il Signal Processing Toolbox. – rayryeng