Why FFT function returns amplitude divided by 2 ?

26 Ansichten (letzte 30 Tage)
Marianne
Marianne am 6 Aug. 2013
Hello,
I doesn't understand the amplitude given by the FFT function. Indeed I use it to calculate the DFT of a sum of sine and the amplitude returned is divided by 2 wrt the amplitude of my original function. The frequencies are correct
Does anyone can explain it to me ?
Please find hereunder the code I used :
T = 0:0.01:10;
T = T';
x1 = 0.5*sin(2*pi*2*T);
x2 = 1.2*sin(2*pi*5.4*T);
x3 = 0.7*sin(2*pi*7*T);
y = x1+x2+x3;
N = length(y);
duree = max(T)-min(T);
Delta_T = duree/N;
Fe = N/duree;
Delta_F = 1/duree;
xfft = 1/N*fft(y);
mag = abs(xfft);
freq = 0:Delta_F:(Fe-Delta_F);
freq = freq';
figure(2)
hold all;
plot(freq,mag);
legend('abs');
xlabel('Freq in Hz');
title('FFT');
box on;
set(gca,'Xlim',[0 100]);
grid on;
figure(1)
hold all;
plot(T,y)
grid on

Akzeptierte Antwort

Wayne King
Wayne King am 6 Aug. 2013
Bearbeitet: Wayne King am 6 Aug. 2013
Because the discrete Fourier transform matches the input signal with complex exponentials and a cosine is the sum of two complex exponentials divided by 2. The same is true of a sine (except it's divided by 2i)
That is where the factor of 1/2 is coming from. Since you have a real-valued signal, if you are only interested in looking at the magnitude, you can just keep the "positive" frequencies and scale them by 2.
T = 0:0.01:10-0.01;
T = T';
x1 = 0.5*sin(2*pi*2*T);
x2 = 1.2*sin(2*pi*5.4*T);
x3 = 0.7*sin(2*pi*7*T);
y = x1+x2+x3;
N = length(y);
duree = max(T)-min(T);
Delta_T = duree/N;
Fe = N/duree;
Delta_F = 1/duree;
xfft = 1/N*fft(y);
magfft = abs(xfft);
magfft = magfft(1:length(xfft)/2+1);
magfft(2:end-1) = 2*magfft(2:end-1);
freq = 0:100/length(y):100/2;
plot(freq,abs(magfft))
grid on;

Weitere Antworten (0)

Kategorien

Mehr zu Fourier Analysis and Filtering finden Sie in Help Center und File Exchange

Tags

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by