I generate a periodic discrete data representing a time dependent function and I want to apply a discrete Fourier transform to this data using just one period of it.

I think something is wrong with my Fourier transform code:

a = 0.05; L = 15; T = 20 \[Pi]; hdc = 2.1;
sol = NDSolve[{a*D[u[t, x], t] == D[u[t, x], x, x] - Sin[u[t, x]], 
u[0, x] == 0, Derivative[0, 1][u][t, 0] == Tanh[t/0.01]*hdc, 
Derivative[0, 1][u][t, L] == 0}, u, {t, 0, T}, {x, 0, L}, 
MaxStepSize -> 0.005, MaxSteps -> 10^6];
q := NIntegrate[( 
Evaluate[First[Derivative[1, 0][u][tp, x] /. sol]])^2, {x, 0, L},
Method -> "LocalAdaptive", MinRecursion -> 50, 
MaxRecursion -> 100];
data = Parallelize[Table[q, {tp, 25.8, T, 0.5}]];
ListLinePlot[data, PlotRange -> All]

enter image description here enter image description here

  • 1
    $\begingroup$ On a core-i7 extreme it does not take much time to evaluate around 124 sec using LaunchKernels[10]. But its very memory hungry even with 64GB RAM I went more than 80% few times during the computation. But now I can offer the onlooker those plots ... $\endgroup$ – PlatoManiac Sep 12 '12 at 13:23
  • $\begingroup$ Guys,I do get the same result on my machine,but I think this Fourier analysis doesn't make sense,at least my supervisor says so.he says I have to tell the program that my function is periodic,so that the Fourier transform of it should go to zero for t infinity. $\endgroup$ – Ahmad Sheikhzada Sep 12 '12 at 13:53
  • $\begingroup$ @AhmadSheikhzada Editting your code by involving MemoryConstrained may help lots of people who would like to run your code! :P $\endgroup$ – dearN Oct 14 '12 at 23:08
  • $\begingroup$ @AhmadSheikhzada I am curious about the computational resources that are available to you. Could you please expand on that? Thanks! $\endgroup$ – dearN Oct 15 '12 at 18:03
  • $\begingroup$ @AhmadSheikhzada Did you consider plotting your DFT data using MatrixPlot. It makes it look neater. Here's my question as an example. Noted that I also used a Hard threshold value to obtain these plots. $\endgroup$ – dearN Oct 15 '12 at 20:23

Assuming your calculated data are correct, the first ListLinePlot shows what is an approximate delta-function, that is, a single isolated spike. The Fourier transform of a delta-function produces a flat spectrum, that is, a constant at all frequencies. Your second ListLinePlot of Abs[Fourier[data]] looks like a constant, plus or minus some noise. Thus, it looks fine to me...

Also note that the discrete Fourier transform assumes and induces periodicity of the input data, so you need not "tell the program that [your] function is periodic".

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.