band pass filter a signal using FFT
45 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
zozo
el 16 de Abr. de 2012
Comentada: Joydeb Saha
el 19 de Jun. de 2021
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.
0 comentarios
Respuesta aceptada
Wayne King
el 16 de Abr. de 2012
With such a high sampling frequency and that many samples, why don't you downsample the signal using decimate()?
Since you are only interested in content between 100 and 300 Hz, you can downsample that signal a lot - by at least a factor of 25.
y = decimate(input,25);
That will give you data sampled at 2 kHz and make designing your filter much, much easier.
2 comentarios
Más respuestas (2)
Wayne King
el 16 de Abr. de 2012
Have you considered fftfilt()?
You can design your FIR filter using fdesign.bandpass and then use fftfilt().
Wayne King
el 16 de Abr. de 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 comentarios
Joydeb Saha
el 19 de Jun. de 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.
Ver también
Categorías
Más información sobre Filter Analysis en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!