USE fft(x) as a highpass filter
26 次查看(过去 30 天)
显示 更早的评论
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!
0 个评论
采纳的回答
Rick Rosson
2011-6-21
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 个评论
Travis Morrison
2017-6-26
When converting back to real space you have to multiply by N. Other than that, thanks for the help!
更多回答(5 个)
Rick Rosson
2011-8-4
You are welcome. If you don't mind, could you please "Accept" the answer that helped resolve this issue?
Thanks!
Rick
0 个评论
Rick Rosson
2011-6-16
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
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Spectral Measurements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!