Difference between FFT and DFT spectrum! why ?!

4 views (last 30 days)
Hi every body, can some one help me to understand the reason of difference between the spectrum of the DFT(raw formulas) and FFT which I have implemented via the following code? I am investigating the harmonics up to 9 KHZ for a signal with 50 hz basic frequency and the differences appear mostly in ranges higher than 6 KHz.
I have run this code on a set of samples with 10004 samples which is attached to this post .(just import the variables to matlab and run the code below )
for DFT I have used the formulas in yhe below link : DFT formula
CODE:
%%reading in the samples
wave; %%%a 10004 samples signal with basic frequency of 50 Hz which means 10 complete period of the fundametal wave
%%Normal FFT
wavefft1 = fft(wave);
L=size(wave,1)-1; % removing the mirror side of spectrum
MagSpec1 = abs(wavefft1(1:1801))/(L/2); %%removing the mirror side of the spectrum
% and ranging the domain
%%DFT implementation
f = 49.985004498650405; %%f = 10/(time(10004)-time(1)) we have used 10 because these samples consist of 10 periods of the signal with 50 Hz frequency
Sampling_Fequency = 50000;
N = size (wave,1)
ll = 0;
for k = 0: f/10:180*f;
cplx_val =0;
for x = 1:N
Teta = ((2*pi*k*x)/Sampling_Fequency);
cplx_val = cplx_val+(wave(x,1)*complex(cos(Teta),(-1*sin(Teta))));
end
ll = ll+1;
MagSpec2(ll,1) = (floor((abs(cplx_val)/(N/2))*10^6))/10^6; %%removing the mirror side of the spectrum
% and ranging the domain
end
%%drawing the caomparison plot
set(0,'DefaultFigureVisible','on');
figure;
x1 = (0:1800)*5;
plot(x1,MagSpec1,'r-');hold on;
plot(x1,MagSpec2,'g-');
legend('FFT Normal','DFT');
  2 Comments
Salaheddin Hosseinzadeh
Salaheddin Hosseinzadeh on 1 Sep 2014
Ali you can attach your code and sample image here! It's probably easier for lazy ppl like me.
Ali
Ali on 1 Sep 2014
thanks for your hint. I attached the files.

Sign in to comment.

Accepted Answer

Matt J
Matt J on 1 Sep 2014
Edited: Matt J on 1 Sep 2014
omega=exp(-(2*pi/N)*(0:N-1));
j=sqrt(-1);
for k=N:-1:1
DFT(k) = ( omega.^(j*(k-1)) )*wave(:);
end

More Answers (0)

Tags

Community Treasure Hunt

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

Start Hunting!