MathGroup Archive 2004

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

Search the Archive

Re: Re: fourier ( FFT )


On Nov 18, 2004, at 1:44 AM, bar at ANTYSPAM.ap.krakow.pl wrote:

> Sseziwa Mukasa <mukasa at jeol.com> wrote:
>
>>> How can I use Mathematica to obtain frequencies ?
>>> Fourier[] works on only one list!
>
>> See 
>> http://forums.wolfram.com/mathgroup/archive/2003/Sep/msg00062.html.
> Hi,
>
> example:
> I have two series:
> t=Table[tt,{tt,0,10,0.01}];
> x=Table[Sin [A t],{t,0,10,0.01}];
>
> I expected maximum peak on frequence Omega=A   ( omega = 2 Pi/T, not
> 1/T)
>
> It must be independece on density (0.01) and length (10)
>
>
> I need that to analyse of solution differential equation
> that look like a chaotic.

If you are using a Discrete Fourier Transform the maximum value will 
occur at a frequency that necessarily depends on the sampling rate 
(density) and data point length since the discrete frequencies used as 
a basis depend explicitly on those values.  If it is possible you 
should use a Continuous Fourier Transform which is the FourierTransform 
expression in Mathematica.

On the other hand, the discrete transform can provide a reasonable 
estimate given enough data points, for example:

A = 2 ¹ 20;
t = Table[tt, {tt, 0, 10, 0.01}];
x = Table[Sin [A t], {t, 0, 10, 0.01}];
s = RotateRight[Fourier[x], Quotient[Length[x], 2]];
w = Table[-1/(2 (t[[2]] - t[[1]])) + i/
     (Length[t] (t[[2]] - t[[1]])), {i, 0, Length[t] - 1}];
ListPlot[Transpose[{w, Abs[s]}], PlotJoined -> True, PlotRange -> All];
ListPlot[Transpose[{2 ¹ w, Abs[s]}], PlotJoined -> True, PlotRange -> 
All];

will generate two plots, one in units of 1/T and one in units of 2 pi/T 
both of which give a reasonable estimate of A.  If your signal is real 
only (as in this case you can discard the (anti)symmetric  portion of 
the spectrum as follows:

s = Take[Fourier[x], Quotient[Length[x], 2]];
w = Table[i/(Length[t] (t[[2]] - t[[1]])), {i,
  0, Quotient[Length[t], 2] - 1}];
ListPlot[Transpose[{w, Abs[s]}], PlotJoined -> True, PlotRange -> All];
ListPlot[Transpose[{2 ¹ w, Abs[s]}], PlotJoined -> True, PlotRange -> 
All];

For more accurate estimates I suggest looking at the literature on 
reconstruction of sampled signals.

Regards,

Ssezi



  • Prev by Date: Re: the circle map
  • Next by Date: Re: Re: Substitute values in functions!!!
  • Previous by thread: Re: fourier ( FFT )
  • Next by thread: Re: fourier ( FFT )