Group Abstract Group Abstract

Message Boards Message Boards

1
|
3.3K Views
|
8 Replies
|
7 Total Likes
View groups...
Share
Share this post:

Wrong frequencies in Periodogram?

POSTED BY: Vladimir Ivanov
8 Replies

Hi Vladimir, yes that is a bug. It is due to an incorrect setting of the DataRange option. To correct please see the attached notebook.

Attachments:

Mariusz, thank you.

POSTED BY: Vladimir Ivanov

Well - ok! I do admit that I was simply not willig to even consider a bug in a function which belongs to the prominent Fourier-family ...

At least PeriodogramArray[] seems to give a correct result:

n = 100;
data = Cos[2 \[Pi] Range[0, n - 1]*0.25] // N;
pdg = Periodogram[data, PlotRange -> All, ScalingFunctions -> {"Linear", "Linear"}, PlotStyle -> Dotted];
pdata = MapIndexed[{(First[#2] - 1)/n, #1} &, PeriodogramArray[data]];
Show[ListLinePlot[pdata[[;; 50]], PlotRange -> All, GridLines -> {{.25}, None}], pdg]

enter image description here

POSTED BY: Henrik Schachner
POSTED BY: Daniel Lichtblau

I guess this is because your data are not perfectly periodic - in the sense that the first value is not identical to the last one. To assure this you just have to include one more point, e.g.:

n = 100;
data = Cos[2 \[Pi] Range[0, n]*0.25] // N;

The length of the data list is now 101, and the periodogram is probably like you are expecting it.

POSTED BY: Henrik Schachner

Henrik, the discrete Fourier transform works for any signal, not only for ones with the first and last elements equal.

We can check it formally, making sure that the explicit inverse Fourier transform

Table[Chop[1/Sqrt[n] (Fourier[data] . Table[Exp[-2 \[Pi] I t s / n ], {s, 0, n-1}])], {t, 0, n-1}]

brings us back to the initial data. And this expression, in the case of my signal, includes Exp[-2 [Pi] I t * 0.25 ] rather than Exp[-2 [Pi] I t * 0.255102 ], so the true frequency must be 0.25.

POSTED BY: Vladimir Ivanov

Try it using Most[] on that range; it may be that you included one point too many.

POSTED BY: Daniel Lichtblau

Why? Length[Range[0,100-1]] is 100.

POSTED BY: Vladimir Ivanov
Reply to this discussion
Community posts can be styled and formatted using the Markdown syntax.
Reply Preview
Attachments
Remove
or Discard