is it correct that to normalize the output of fft such that a unit
sinusoid in the time domain corresponds to unit amplitude in the
frequency domain, I simply divide the DFT by the length of data.
for example data is x(n), I take N point DFT so the normalized output
is abs(fft(x,N))/N.
Can you please tell me how to prove this?
Thanks
AELOVER
Do an FFT on a vector of ones. Your result should be non-zero for the
first bin, and darn close to zero everywhere else. Use the value of the
non-zero bin to scale your results.
--
Tim Wescott
Wescott Design Services
http://www.wescottdesign.com
Do you need to implement control loops in software?
"Applied Control Theory for Embedded Systems" gives you just what it says.
See details at http://www.wescottdesign.com/actfes/actfes.html
Actually there are several ways discrete fourier transforms may be
normalized. Essentialy you like for DFT_inverse ( DFT ( f(x) ) ) to
be f(x) without any extra scaling. Two common ways are:
DFT inverse DFT
1 1/N
---------------------------------------------
1/sqrt(N) 1/sqrt(N)
(There are some adjustments needed for the DC term and for the "half
sampling rate term" if the length is even)
Try finding Rick Lyons' book and looking up the specific details.
Clay
Thank you very much.
Regards,
> Not in general. It seems like everyone and his brother has a different
> way of normalizing the FFT and IFFT internally -- you need to check to
> see what your software package does and go with the flow.
>
>
> Tim Wescott
> Wescott Design Serviceshttp://www.wescottdesign.com
v
That depends on the details of the FFT routine you use. Write your own
and know, or use Tim's approach to find out.
Jerry
--
Engineering is the art of making what you want from things you can get.
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Thanks
You can scale the FFT to be whatever you like.
For a power spectral density (PSD) spectrum, the convention is for the
area under the spectrum to be the variance of the time series, but for
a normalised spectrum the area is unity, by convention.
If you have to divide by N/2 to get unit amplitude, so be it.
Different strokes for different folks.
As often happens here, your question is underspecified, but that
hasn't kept people from throwing out answers.
If your 'unit sinusoid in the time domain' is a constant unit
amplitude
complex vector rotating at a bin centered frequency, the N-point FFT
in
Matlab will produce an output bin with amplitude N.
If your 'unit sinusoid in the time domain' is a unit peak amplitude
real sinusoid oscillating between positive and negative peaks at a
bin centered frequency, the N-point FFT in
Matlab will produce two output bins with amplitude N/2 at what
can be interpreted as positive and negative frequency positions.
Note that Tim Wescott's vector of 1's is in the complex vector case.
If you are using real input and want to use only non-negative
frequencies
from the FFT, you will have to scale the DC bin differently from the
positive frequency bins.
Good Luck,
Dale B. Dalrymple
http://dbdimages.com
Normalisation:
When I use a word,' Humpty Dumpty said, in a rather scornful tone,' it
means just what I choose it to mean, neither more nor less.