comp.lang.idl-pvwave archive
Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado

Home » Public Forums » archive » FFT and Parseval
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Switch to threaded view of this topic Create a new topic Submit Reply
FFT and Parseval [message #88452] Mon, 28 April 2014 03:58 Go to next message
baptiste.cecconi is currently offline  baptiste.cecconi
Messages: 1
Registered: April 2014
Junior Member
Dear IDL guys,

I recently tried to check the conservation of energy (Parseval's theorem) through the IDL implementation of FFT, and I came to a somewhat surprising result.

Here a sample code that shows my point:

-----

N=1000
x = randomn(0,N) ; random series of data with 1000 elements
fft0 = fft(x,-1) ; fourier transform (to freq domain) of x

print,total(x^2.) ; total energy of the signal in time domain
print,total(abs(fft0)^2.)/N; total energy of the signal in freq domain (according to Parseval's theorem)

fft1 = fft(x,1) ; inverse fourier transform (freq to time domain) of x
print,total(abs(fft1)^2.)/N; total energy of the signal in freq domain (using inverse fft)

-----

From this little code, it is clear that

(1) total(x^2.) = total(abs(fft0)^2.)*N
(2) total(x^2.) = total(abs(fft1)^2.)/N

While quation (2) is fully consistent with Parseval's equation, (1) is not, by a N^2 factor.
In the IDL documentation, it is stated that "A normalization factor of 1/N, where N is the number of points, is applied during the forward transform." However, I'm not sure this solves anything here.

I have some difficulties to convince myself that the direct FFT transform is invoked with a negative "direction" parameter (as stated in IDL documentation).

Parseval theorem is recalled here:
http://en.wikipedia.org/wiki/Parseval's_theorem (see DFT equation)
Re: FFT and Parseval [message #88453 is a reply to message #88452] Mon, 28 April 2014 04:30 Go to previous message
Moritz Fischer is currently offline  Moritz Fischer
Messages: 32
Registered: June 2013
Member
This all about the conventions used when defining the Fourier transform:
- sometimes it's multiplied by a factor of 1/n in the forward
transformation, and not in the inverse ( as in the IDL forward
transformation )
- sometimes it's scaled in the inverse transformation ( as in the
wikipedia definition of the DFT following the link you gave)
- and I as a mathematician prefer the scaling by 1/sqrt(n) in both
forward and inverse transformation, because a) its symmetric and b)
there won't be a factor in the formulation of the *conservation* ( not
scaling ... ) of energy.
In either of the above cases you get
x = FFT( FFT(x,-1) ,1)
but comparing the energies of time and spectrum you have to compensate
the 1/sqrt(n) of the applied 1/n scaling factor, and your (1) reads:

total( abs(x)^2.) = total(abs(fft0 * sqrt(N) )^2.)

I guess the scaling convetion in IDL is choosen for performance reasons.

And note that the direction parameter is the sign of the argument of
exp( . ), i.e. negative for forward transformation, by most conventions.



Am 28.04.2014 12:58, schrieb baptiste.cecconi@obspm.fr:
> Dear IDL guys,
>
> I recently tried to check the conservation of energy (Parseval's
> theorem) through the IDL implementation of FFT, and I came to a
> somewhat surprising result.
>
> Here a sample code that shows my point:
>
> -----
>
> N=1000 x = randomn(0,N) ; random series of data with 1000 elements
> fft0 = fft(x,-1) ; fourier transform (to freq domain) of x
>
> print,total(x^2.) ; total energy of the signal in time domain
> print,total(abs(fft0)^2.)/N; total energy of the signal in freq
> domain (according to Parseval's theorem)
>
> fft1 = fft(x,1) ; inverse fourier transform (freq to time domain) of
> x print,total(abs(fft1)^2.)/N; total energy of the signal in freq
> domain (using inverse fft)
>
> -----
>
> From this little code, it is clear that
>
> (1) total(x^2.) = total(abs(fft0)^2.)*N (2) total(x^2.) =
> total(abs(fft1)^2.)/N
>
> While quation (2) is fully consistent with Parseval's equation, (1)
> is not, by a N^2 factor. In the IDL documentation, it is stated that
> "A normalization factor of 1/N, where N is the number of points, is
> applied during the forward transform." However, I'm not sure this
> solves anything here.
>
> I have some difficulties to convince myself that the direct FFT
> transform is invoked with a negative "direction" parameter (as stated
> in IDL documentation).
>
> Parseval theorem is recalled here:
> http://en.wikipedia.org/wiki/Parseval's_theorem (see DFT equation)
>
  Switch to threaded view of this topic Create a new topic Submit Reply
Previous Topic: Problem reading HDF5
Next Topic: Running this MATLAB code in IDL

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ] [ PDF ]

Current Time: Wed Oct 08 13:48:16 PDT 2025

Total time taken to generate the page: 0.00565 seconds