Borrar filtros
Borrar filtros

USE fft(x) as a highpass filter

27 visualizaciones (últimos 30 días)
fcarl
fcarl el 16 de Jun. de 2011
Comentada: Travis Morrison el 26 de Jun. de 2017
Hi,
I want to use the fft(x) function to create an highpass filter. I want to ask if the following procedure is correct:
1) take the signal x and make an fft(x).
2) Set frequencies up to 0.5 Hz to zero.
3) Make ifft(spectrum).
Is it right to set the first data points to zero or is there anything to pay attention to (e.g.: symmetry of the fft...). So if I set the first data points to zero, is this enough?
Thanks for your efforts!

Respuesta aceptada

Rick Rosson
Rick Rosson el 21 de Jun. de 2011
Here are some suggestions for improving the code.
I have inserted several new lines of code indented from the original code, and eliminated some lines of the original code by making them into comments:
signal=load(files{i});
dt = 0.008;
Fs = 1/dt;
N = size(signal,1);
dF = Fs/N;
f = (-Fs/2:dF:Fs/2-dF)';
% Band-Pass Filter:
BPF = ((lower_freq < abs(f)) & (abs(f) < upper_freq));
figure;
plot(f,BPF);
% time=0.008:0.008:size(signal,1)*0.008;
time = dt*(0:N-1)';
figure;
plot(time,signal);
% NFFT=2^nextpow2(size(signal,1));
signal=signal-mean(signal);
% spektrum = fft(signal,NFFT)/(size(signal,1));
spektrum = fftshift(fft(signal))/N;
figure;
subplot(2,1,1);
plot(f,abs(spektrum));
% spektrum(lower_freq:upper_freq,1)=0;
% spektrum(size(spektrum,1)- upper_freq+1:size(spektrum,1)-lower_freq+1,1)=0;
spektrum = BPF.*spektrum;
subplot(2,1,2);
plot(f,abs(spektrum));
% signal=ifft(spektrum); %inverse ifft
signal=ifft(ifftshift(spektrum)); %inverse ifft
HTH.
Rick
  4 comentarios
syed aizaz
syed aizaz el 18 de Dic. de 2015
sallam sir... where is file i
Travis Morrison
Travis Morrison el 26 de Jun. de 2017
When converting back to real space you have to multiply by N. Other than that, thanks for the help!

Iniciar sesión para comentar.

Más respuestas (5)

Rick Rosson
Rick Rosson el 4 de Ag. de 2011
You are welcome. If you don't mind, could you please "Accept" the answer that helped resolve this issue?
Thanks!
Rick

Rick Rosson
Rick Rosson el 16 de Jun. de 2011
Before you can solve this problem, you need to know the sampling rate (in samples per second) of the signal x. Otherwise, you will not be able to figure out how many samples of the spectrum correspond to 0.5 hertz (the cut-off frequency).
For convenience, you may want to create the variable Fs to represent the sampling rate and Fc to repreesent the cut-off frequency. For example:
Fs = 200; % samples per second
Fc = 0.5; % hertz
Also, the spectrum returned by the fft function is double-sided. By default, it corresponds to the frequencies from 0 hertz up to Fs hertz. It will be easier to implement your filter if you swap the two halves of the spectrum, so that it will correspond to -Fs/2 up to +Fs/2. You can do so using the fftshift function:
X = fftshift(fft(x));
HTH.
Rick

David Young
David Young el 17 de Jun. de 2011
You might find this demo helpful.

fcarl
fcarl el 17 de Jun. de 2011
Hi Rick,
thanks for your answer. I want to show you the case in detail:
signal=load(files{i});
time=0.008:0.008:size(signal,1)*0.008;
NFFT=2^nextpow2(size(signal,1));
signal=signal-mean(signal);
spektrum = fft(signal,NFFT)/(size(signal,1));
spektrum(lower_freq:upper_freq,1)=0;
spektrum(size(spektrum,1)-upper_freq+1:size(spektrum,1)-lower_freq+1,1)=0;
signal=ifft(spektrum); %inverse ifft
In Lines 6 & 7 I try to eliminate special frequencies. I do this at the beginning of the spectrum and the end because of the symmetry. Is this right? upper_freq and lower_freq are the upper and lower bounds of frequencies i want to set to zero!
Thanks for your efforts! fcarl
  1 comentario
Jiahao Luo
Jiahao Luo el 18 de Sept. de 2015
I have the same issue now, did you make it work?

Iniciar sesión para comentar.


fcarl
fcarl el 22 de Jun. de 2011
Thanks very much! This helped me!

Categorías

Más información sobre Frequency Transformations 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!

Translated by