Chebyshev Type 2 filter not working as expected

6 views (last 30 days)
Rudy Steel
Rudy Steel on 7 Jan 2022
Commented: Rudy Steel on 7 Jan 2022
I have some EEG data and I designed a 20th order bandpass chebyshev type 2 filter with a stopband of 10hz and passband of 4hz. I filtered my signal with this filter however the response I obtained does not seem to be making sense. Can anyone help/identify what I am doing wrong?
EEGdata = load('EEGdata.csv');
Fs = 1200; % Sampling frequency
T = 1/Fs; % Sampling period
L = length(EEGdata); % Length of signal
t = [0:(L-1)]*T; % Time vector
%now using bandpass chebyshev type 2 filter
[A,B,C,D] = cheby2(10,40,[4 10]/600);
d = designfilt('bandpassiir','FilterOrder',20, ...
'StopbandFrequency1',4,'StopbandFrequency2',10, ...
'StopbandAttenuation',40,'SampleRate',1200);
sos = ss2sos(A,B,C,D);
% fvt = fvtool(sos,d,'Fs',1200);
% legend(fvt,'cheby2','designfilt')
%filtering original data
EEG_filt = filtfilt(d,EEGdata);
figure();
subplot(2,1,1)
plot(t,EEGdata); title('EEGdata.csv before filtering'); grid on; axis tight; xlim([0 20]);
xlabel('Time in seconds'); ylabel('Amplitude/\muV');
subplot(2,1,2)
plot(t,EEG_filt); title('EEGdata.csv after filtering'); grid on; axis tight; xlim([0 20]);
xlabel('Time in seconds'); ylabel('Amplitude/\muV');
I have attached the results of the plots obtained as well as the magnitude response of the filter.
  2 Comments
Rudy Steel
Rudy Steel on 7 Jan 2022
I am not understanding the plot I obtained after filtering. I would assume I should obtain the same signal along the entire x-axis (the first 20seconds) with the difference now that the result would be cleaner

Sign in to comment.

Answers (1)

Cris LaPierre
Cris LaPierre on 7 Jan 2022
You have a ringing artifact because you have such a high order filter. Notice that the y axis of your filtered data is scaled by 10^5. You can scale this to see what you expect.
EEGdata = load('EEGdata.csv');
Fs = 1200; % Sampling frequency
T = 1/Fs; % Sampling period
L = length(EEGdata); % Length of signal
t = [0:(L-1)]*T; % Time vector
%now using bandpass chebyshev type 2 filter
[A,B,C,D] = cheby2(10,40,[4 10]/600);
d = designfilt('bandpassiir','FilterOrder',20, ...
'StopbandFrequency1',4,'StopbandFrequency2',10, ...
'StopbandAttenuation',40,'SampleRate',1200);
sos = ss2sos(A,B,C,D);
%filtering original data
EEG_filt = filtfilt(d,EEGdata);
figure();
plot(t,EEG_filt); title('EEGdata.csv after filtering'); grid on; axis tight; xlim([0 20]);
xlabel('Time in seconds'); ylabel('Amplitude/\muV');
ylim([-10 10])
  2 Comments
Rudy Steel
Rudy Steel on 7 Jan 2022
Yes, I in fact did not consider the scale of the y-axis, I also now considered reducing the order of the filter and you are right the results do improve. Thank you

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!