Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2012

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Fourier DFT scaling problem

  • To: mathgroup at smc.vnet.net
  • Subject: [mg126614] Re: Fourier DFT scaling problem
  • From: Joseph Gwinn <joegwinn at comcast.net>
  • Date: Thu, 24 May 2012 03:34:06 -0400 (EDT)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • References: <jpflom$ktd$1@smc.vnet.net>

In article <jpflom$ktd$1 at smc.vnet.net>, Arthur <arth_e at ymail.com> 
wrote:

> Hi all. 
> 
> I hope someone can help me with what seems to be a fairly elementary problem, 
> nevertheless I have spent a good deal of time trying to come to a solution 
> without any success. I am fairly new to the Fourier transform.
> 
> My problem is that the output of the Fourier[] command has a scaling 
> dependency on my sampling parameters which I cannot figure out how to remove.
> 
> In general I have a numerical function Psi[x] (a wavefunction) and I would 
> like to compute an approximation to the Fourier transform F[Psi[x]] ~~ 
> Psihat[k].
> 
> I am assuming the best way to achieve this is using the built in Fourier[] 
> function.
> 
> Now although I expect to have a numerical function Psi[x] my problem is 
> apparent even when I define Psi[x] analytically. 
> 
> If I have
> 
> 
> 
> Psi[x_] := (Pi^(-1/4)) (E^(-x^2/2)) 
> 
> and take the continuous FT
> 
> FourierTransform[Psi[x], x, k]
> 
> OUT: (Pi^(-1/4)) (E^(-k^2/2)) 
> 
> The output is as expected an identical function of k (since Psi[x] was a 
> normalized eigenfunction of the FT).
> 
> If I try to take the DFT of Psi[x] however:
> 
> /******CODE******/
> 
> n1 = 2^8.; (* sampling points *)
> L = 32.; (* domain [-L/2,L/2] *)
> dx = L/n1; (*step size*)
> 
> X = Table[-dx n1/2 + (n - 1) dx, {n, n1}]; (* lattice *)
> 
> rot[X_] := RotateLeft[X, n1/2]; (* rotate input/output of fourier *)
> F[X_] := rot@Fourier@rot@X; (* DFT *)
> 
> SetOptions[ListLinePlot, PlotRange -> {{-L/2, L/2}, {0, 1}}, 
>  DataRange -> {-L/2, L/2}, Filling -> Axis];
> 
> ListLinePlot[Abs[Psi[X]]^2]
> ListLinePlot[Abs[F@Psi[X]]^2]
> 
> 
> /******END******/
> The second graph of the squared modulus of F@Psi[X] is evidently incorrectly 
> scaled. Moreover this scaling error is not improved by increasing the 
> sampling frequency, and is in fact exacerbated by it.
> 
> It seems reasonable that the scaling be dependent on the value dx, though I 
> have done a lot of experimentation with the FourierParameters command to 
> remove this dependence though I can't get it to work in a way that is 
> independent of the choice of Psi[x].
> 
> Any help would be *greatly* appreciated!
> 
> Thanks and best regards,
> 
> Arthur

In the documentation on Fourier[], the actual equation is given.  The 
coefficients depend on the length of the list given to Fourier.  You 
will have to divide by Sqrt[length] to have coefficients independent of 
length, if I recall.  There are also a number of alternative 
normalizations one can choose using options.  But you will need to 
figure out the correct normalization and options for your application. 

Joe Gwinn



  • Prev by Date: Re: Slow Locator in Manipulate
  • Next by Date: Re: Question about ColorFunction
  • Previous by thread: Re: Fourier DFT scaling problem
  • Next by thread: Re: Fourier DFT scaling problem