> Hello all
>
> It seems to me that Mathematica 5.0 calculates somehow strange the
> discrete Fourier transform of a list of data, or i do not really
> understand the maths behind it.
> I would expect that the discrete Fourier transform of a finite object
> shows maxima in Fourier space at the integer reciprocal indices. But
> this does not seem to be the case in the following very simple examples.
> The first Table (data1) shows maxima in Fourier space at points 1 and
> 17, the second Table (data2) at points 3 and 20 and the third Table
> (data3) at points 4 and 39. How is this possible, shouldn't the maxima
> in Fourier space always be located at the first and last point.
> According to this, the maxima in Fourier space can be shifted by
> changing the resolution in direct space.
>
> thanks for hints
>
> miroslav kob
> as
>
> data1= Table[Sin[x], {x,0,0.5*¥ð,0.1}];
> data2=Table[Sin[x], {x,0,10,0.5}];
> data3=Table[Sin[x], {x,0,20,0.5}];
>
> ListPlot[Abs[Fourier[data1]], PlotStyle -> PointSize[0.02],
> AxesOrigin -> {1, 0}, PlotRange -> All];
> ListPlot[Abs[Fourier[data2]], PlotStyle -> PointSize[0.02],
> AxesOrigin -> {1, 0}, PlotRange -> All];
> ListPlot[Abs[Fourier[data3]], PlotStyle -> PointSize[0.02],
> AxesOrigin -> {1, 0}, PlotRange -> All];
You may be able to see the essential effects more easily
by looking at examples where the period of the signal is
commensurate with the length of the sample. The position
of the peaks is determined by the number of periods in the
sample. For example:
s1 = Table[Sin[2 Pi x], {x, 0.1, 10, 0.5}];
ListPlot[Abs[Fourier[s1]],
PlotRange -> {{0, 30}, All}, PlotJoined -> True]
with 10 periods in the sample shows a peak at position 11
(the non-constant terms start at position 2) and
s2 = Table[Sin[2 Pi x], {x, 0.1, 20, 0.5}];
ListPlot[Abs[Fourier[s2]],
PlotRange -> {{0, 30}, All}, PlotJoined -> True]
with 20 periods in the sample shows a peak at position 21.
Changing the resolution does not change the position of
this peak. For example,
s1 = Table[Sin[2 Pi x], {x, 0.1, 10, 0.5}];
ListPlot[Abs[Fourier[s1]],
PlotRange -> {{0, 30}, All}, PlotJoined -> True]
and
s3 = Table[Sin[2 Pi x], {x, 0.1, 10, 0.1}];
ListPlot[Abs[Fourier[s3]],
PlotRange -> {{0, 30}, All}, PlotJoined -> True]
both show a peak at position 11, because both correspond
to 10 periods in the range of the sample, even though the
sample rates differ by a factor of 5.
The discrete Fourier transform is a fairly simple operation,
and is essentially the same in Mathematica as it is everywhere
else. The only possible differences are in the choices of
arbitrary constants, but those differences do not affect
the positions of peaks.
Dave Withoff
Wolfram Research