guess I'm stuck with this filtering problem and I'm thinking it has something to do with my raw data but I'm not so sure. So the problem is the following, please refer to the figures below, basically, all I'm trying to do is implement a bandpass Butterworth filter to filter the raw data trace (green). The raw data consists of 2501 points and was sampled at 20 kHz (100-ms). I'd like to bandpass filter this trace between 3 Hz and 170 Hz using the Matlab function 'butter' followed by either 'filter' (top figure) or 'filtfilt' (bottom figure), preferably the latter.
My Matlab code is as follows:
A = Average(1,:); % raw data fs_Hz = 20000; % sampling rate (Hz) order = 3; fcutlow = 3; % Hz fcuthigh = 170; % Hz [b,a] = butter(order,[fcutlow,fcuthigh]/(fs_Hz/2), 'bandpass'); x = filtfilt(b,a,A); plot(x); hold on plot(A,'color','g'); legend('filtered data','raw data');
As you might guess the problem is the offset that I observe after both filtering functions. These 2501 point traces actually stem from a very long data-trace, should I possibly filter this long trace prior to extracting these smaller traces? Is the reason for the offset the fluctuating pattern of the trace? I can't detrend the data as I need the y-axis information for the subsequent analysis on this data. Should I be using a completely different type of filtering method; FIR instead of IIR?? Any advice on my problem would be greatly appreciated.