MATLAB: How to get FFT of a siganl accurately

frequency spectrum

This is a fundamental question. Suppose I have a signal of multiple frequency components, is it possible to get frequency distributions by FFT? Will the output by FFT gives the signal or the signal's power? Kindly describe.
For example, I have a signal
y(t)=A1*sin(2*pi*f1*t)+A2*sin(2*pi*f2*t).
Will my FFT output gives components of magnitude A1 at frequency f1 and amplitude A2 at frequency f2 or something different.
What should I do to get the components as above?

Best Answer

As Walter suggests, if your signal length is such that the Fourier frequencies correspond with the frequencies you are looking for, you can get the least squares amplitude estimates by scaling the output of fft() -- the implementation of the DFT.
Fs = 1000;
t = 0:1/Fs:1-1/Fs;
x = 1.5*cos(2*pi*100*t)+2*sin(2*pi*200*t);
xdft = fft(x);
A1 = 2/length(x)*xdft(101);
A2 = 2/length(x)*xdft(201);
abs(A1)
abs(A2)
A1 is a complex number, the real part is the estimate of cosine amplitude at the frequency corresponding to the DFT bin (DFT bin 101 here corresponds to 100 Hz). The imaginary part corresponds to the amplitude of a sine at 100 Hz.
The same is true of A2, except that is for a frequency of 200 Hz.