MATLAB: How to apply bandpass filter

bandpass filtersignal processingSignal Processing Toolbox

The attached signal file is of 20Hz sampling rate. Each row is a signal, i needed to to apply bandpass filter to each row and convert it in the frequency range 0.34 – 1 Hz.

Best Answer

This filter will do what you want:
D = load('ehgSignal.mat');
s = D.val';
Fs = 20; % Sampling Frequency (Hz)
Fn = Fs/2; % Nyquist Frequency (Hz)
Wp = [0.34 1.00]/Fn; % Passband Frequencies (Normalised)
Ws = [0.30 1.05]/Fn; % Stopband Frequencies (Normalised)
Rp = 10; % Passband Ripple (dB)
Rs = 50; % Stopband Ripple (dB)
[n,Ws] = cheb2ord(Wp,Ws,Rp,Rs); % Filter Order
[z,p,k] = cheby2(n,Rs,Ws); % Filter Design
[sosbp,gbp] = zp2sos(z,p,k); % Convert To Second-Order-Section For Stability
figure(1)
freqz(sosbp, 2^16, Fs) % Filter Bode Plot
tv = linspace(0, 1, length(s))/Fs; % Time Vector (s)
s_filt = filtfilt(sosbp,gbp, s); % Filter Signal
figure(2)
plot(tv, s_filt)
grid
NOTE The filtfilt function will operate on the first non-singleton dimension of ‘s’, so since ‘s’ is (12 x 35220), it is necessary to transpose it to filter along the rows ( columns in the transposed matrix).