band pass filter a signal using FFT
Show older comments
I have a random signal containing frequencies from 1Hz to 1000Hz (as viewed on a spectrogram).
I want to extract the signal containing freqs from 200Hz to 600Hz from it and zero out other frequencies (band pass filter). How can I do it in freq. domain efficiently? (since my signal is very long, doing it in time domain is time consuming using filter coefficient method)
Please help with an example.
Accepted Answer
More Answers (2)
Wayne King
on 16 Apr 2012
0 votes
Have you considered fftfilt()?
You can design your FIR filter using fdesign.bandpass and then use fftfilt().
Wayne King
on 16 Apr 2012
d = fdesign.bandpass('Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2',75,100,150,175,50,0.5,50,1e3);
Hd = design(d);
y = filter(Hd,x);
If you want an IIR filter
Hd1 = design(d,'butter');
y1 = filter(Hd1,x);
plot(psd(spectrum.periodogram,y1,'Fs',1e3,'NFFT',length(y1)));
7 Comments
zozo
on 16 Apr 2012
zozo
on 16 Apr 2012
Wayne King
on 16 Apr 2012
The first time you call fdesign, it does take a bit of time, but that shouldn't bother your filtering. Once you have the filter, it should be fine. What is 38lakh? 381,000 samples?
zozo
on 16 Apr 2012
Wayne King
on 16 Apr 2012
I don't know what specifications you have asked for, but they may have been overly stringent
zozo
on 16 Apr 2012
Joydeb Saha
on 19 Jun 2021
How to remove the spikes from the data with a narrow bandpass filter? How to apply an inverse FFT algorithm to recreate the time-series data (filtered) from the frequency domain to the time domain? attaching the data.
Categories
Find more on Filter Design in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!