Perform FFT from imported excel data. Help please

2 次查看(过去 30 天)
Hi, I have the attached time in first column and current in second column. i am trying to perform FFT and plot magnitude vs Frequency. My code is showing an empty plot.
could you please tell me where i am going wrong and kindly provide correction. I will be grateful. Thanks.
Sampling frequency is 20KHZ
[D,S,R] = xlsread('test data.csv');
RD = str2double(R);
Signal = RD(:,2); % Sampling Interval (milliseconds)
Ts = 0.00005; % Sampling Interval (seconds)
Fs = 1/Ts; % Sampling Frequency (Hz)
Fn = Fs/2; % Nyquist Frequency (Hz)
N = length(Signal);
meanSignal = mean(Signal); % ‘Signal’ Mean
FTSignal = fft(Signal-meanSignal)/N; % Normalised Fourier Transform Of Baseline-Corrected ‘Signal’
Fv = linspace(0, 1, fix(numel(FTSignal)/2)+1)*Fn; % Frequency Vector
Iv = 1:numel(Fv); % Index Vector
[pks,locs] = findpeaks(abs(FTSignal(Iv))*2, 'MinPeakHeight',0.044);
figure
plot(Fv, abs(FTSignal(Iv))*2)
grid
xlabel('Frequency (Hz)')
ylabel('Amplitude')
plotIdx = 1:Iv(max(locs));
figure
plot(Fv(plotIdx), abs(FTSignal(Iv(plotIdx)))*2)
hold on
plot(Fv(plotIdx(locs)), pks, '^r', 'MarkerFaceColor','r')
hold off
xlabel('Frequency (Hz)')
ylabel('Amplitude')
text(0.005, 0.08, 'Choose a peak and frequency')
  2 个评论
Walter Roberson
Walter Roberson 2020-2-25
"Sampling frequency is 20KHZ"
No it is not. If you examine the times in the first column, the difference is 0.0005 which is 2kHz. Your Ts is not correct for the data file.
Jmv
Jmv 2020-2-26
Hi Walter. I appreiciate your comment, thanks
yes you are right, the sampling frequency i was meant to use is actally 20KHZ and Ts 0.00005. the times in data files are not correct.
I have now re-uploaded file attached with correct time data.
I am still getting an empty graph. where do you think i am going wrong?
Thanks

请先登录,再进行评论。

回答(1 个)

Ridwan Alam
Ridwan Alam 2020-2-26
编辑:Ridwan Alam 2020-2-26
Signal = D(:,2);
RD = str2double(R) is making a matrix of NaNs. So, you can use D instead of R.
  1 个评论
Jmv
Jmv 2020-2-26
Thanks very much for the reply.
i can now plot after the changes you suggested.
however to be able determine frequencies at 60 HZ as my fundamental frequency and determine its multiples ( i.e 2x60hz, 3x60hz, ect up to multiple of 50). Could you kindly guide me on how to do that. if you could share a code, i would really apreciate it. Thanks very much

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Measurements and Feature Extraction 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by