(*Dyskretna transformata Fouriera w Mathematice*)

(*Utworzenie zbioru punktów odpowiadających wartościom sin(2*Pi*W*x), odległych o 1/M, na odcinku od x=1 do x=2PiW.*)
(*Mathematica numeruje listy od 1, nie od 0, więc aby nie komplikować problemu pomijamy punkt x=0*)

t[W_,M_]:=Table[Sin[2*Pi*W*n/M],{n,1,M}]

dane=t[5,128];

ListLinePlot[dane]

Fdane=Fourier[dane];
(*Chop usuwa ze zbioru numeryczne "śmieci"*)
(*Usunięcie poniższej linii pokaże, co mam na myśli.*)
Fdane=Chop[Fdane];

ListLinePlot[{Re[Fdane],Im[Fdane]}]

(*Sprawdźmy, gdzie leżą piki...*)

(*Wykres jest symetryczny względem prostej przechodzącej przez środek osi odciętych, zatem każdej częstości odpowiadają dwa piki.*)
(*Ponadto należy pamiętać o numeracji stosowanej w Mathematice - częstości zerowej odpowiada współrzędna 1 itd.*)
(*Zatem widoczna na wykresie częstość jest równa (6-1)/128=(128-(124-1))/128=5/128, czyli dokładnie tak, jak się spodziewaliśmy.*)

Position[Abs[Fdane],x_/;x≠0]

(*Periodogram jest swego rodzaju funkcją - czarną skrzynką. *)
(*Przeprowadza dyskretną transformatę Fouriera i automatycznie przeskalowuje częstość (pik przy 5/128)*)
(*Modyfikując drugi i trzeci parametr możemy decydować o tym, jakiego (i czy w ogóle) uśrednienia dokonywać. *)
(*Domyślnie: brak uśrednienia - obydwa parametry ustawione na 128.*)
(*Czwarty parametr pozwala na wybór funkcji okienkującej. Domyślnie kwadratowe okienko Dirichleta (bez wygładzania).*)
(*Domyślnie periodogram jest rysowany w decybelach, czego teraz nie chcemy. Stąd ostatni parametr funkcji.*)

Periodogram[dane,128,64,WelchWindow,PlotRange->Full,ScalingFunctions->"Absolute"]