I have a datafile contains data sets (size 200* 15) .how can I apply on all the data a lowpass butterworth filter of 2-order with cutoff fre 10 HZ

2 Ansichten (letzte 30 Tage)
How can I call filter function like [b,a] = butter(n,Wn) or [b,a] = butter(n,Wn,ftype) for whole data file and collect them in another for further use.

Akzeptierte Antwort

David J. Mack
David J. Mack am 29 Dez. 2016
Bearbeitet: David J. Mack am 29 Dez. 2016
Hey Rahul,
use FILTER with the coefficients created with BUTTER, e.g.:
%Assuming X is your 200x15 data matrix and fSInHz is the sampling rate of the data.
filtFCInHz = 10; %Cut-off frequency.
filtOrder = 2; %Order.
[b,a] = butter(filtOrder,filtFCInHz/(fSInHz/2)); %Normalize against Nyquist frequency.
Y = filter(b,a,X); %Y is the filtered 200x15 output.
If you want to apply zero-phase filtering (which is recommended for time series), use FILTFILT instead of FILTER.
Greetings, David
  4 Kommentare
David J. Mack
David J. Mack am 11 Jan. 2017
Do you have a time vector for your data? If so, use:
fSInHz = mode(diff(t,[],1),1);
Assuming t is a 200xk column-oriented array with the time for each sample in seconds. If k==1 (uniform sampling rate) fSInHz is a scalar, if k==15 (different sampling rates for each column in X) it is a 1x15 row vector.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by