how to filter a signal

94 views (last 30 days)
rohith bharadwaj
rohith bharadwaj on 9 Sep 2017
Commented: Star Strider on 3 Feb 2021
I have a signal and I filtered the signal using a cheby1 filter. the frequencies of the signal range from 0.058 to 349Hz. I had to remove frequencies above 0.7Hz. after filtering the signal again when I find the frequencies I'm getting frequencies above 0.7Hz.

Accepted Answer

Star Strider
Star Strider on 9 Sep 2017
I showed you how to correctly design a filter here. If you want to design a filter to remove all frequencies above 0.7 Hz, design a lowpass filter, specify the passband frequency as 0.7/Fn and the stopband at 0.72/Fn. Use a Chebyshev Type II filter for this, instead of a Type I, since you now want a relatively flat passband.
  9 Comments
Wietse van Geel
Wietse van Geel on 3 Feb 2021
Edited: Wietse van Geel on 3 Feb 2021
EDIT: found your previous post in the link! I'll try that first
Thank you for this helpful post. I'm designing a filter for the first time, and find it quite challenging.
Could you clarify the above answer by explaining how the last part, ending with:
[soslp,glp] = zp2sos(z,p,k);
can be implemented as a filter?
This part works fine for me:
[b,a] = cheby2(1,0.5,0.7/325,'low');
fil=filter(b,a,y);
And playing around with the numbers and plotting the results give some idea of what happens.
Best,
Wietse
Star Strider
Star Strider on 3 Feb 2021
Wietse van Geel — My pleasure!
I have switched over to elliptic filters, since they are much more computationally efficient and generally perform much better. The code would now be:
Fs = 650
Fn = Fs/2; % Nyquist Frequency (Hz)
Wp = 0.7/Fn; % Passband Frequency (Normalised)
Ws = 0.72/Fn; % Stopband Frequency (Normalised)
Rp = 1; % Passband Ripple (dB)
Rs = 50; % Stopband Ripple (dB)
[n,Wp] = ellipord(Wp,Ws,Rp,Rs); % Filter Order
[z,p,k] = ellip(n,Rp,Rs,Wp,'low'); % Filter Design
[soslp,glp] = zp2sos(z,p,k); % Convert To Second-Order-Section For Stability
figure(5)
freqz(soslp, 2^16, Fs) % Filter Bode Plot
Use the filtfilt function to do the actual filtering:
fil = filtfilt(soslp,glp,y); % Filter Signal
.

Sign in to comment.

More Answers (1)

kani mozhi
kani mozhi on 10 Sep 2018
hi... i m wrk in bci data competition iii dataset 1.which filter have to use and please give the matlab code.. i m new in this area

Products

Community Treasure Hunt

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

Start Hunting!