(*Dyskretna transformata Fouriera "zaszumionej" funkcji.*)
(*Warto sprawdzić, jak wykona się program dla różnych wartości współczynnika przed RandomReal*)

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

dane=t[5,128];

ListLinePlot[dane]

Fdane=Fourier[dane];

ListLinePlot[{Re[Fdane],Im[Fdane]},PlotRange->All]

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

Position[Abs[Fdane],x_/;x>0.5]

(*Naiwny filtr "bandpass" - wycina wszystkie częstości poza wybranym pasmem.*)
(*W tym przypadku sprawa jest trywialna, bo szum jest dużo słabszy, niż sygnał.*)

Fdane2=ReplacePart[Fdane,i_/;(i>10&&i<120)||i<4||i>126->0];

(*Sprawdźmy, jak wyglądają dane po oczyszczeniu.*)

dane2=InverseFourier[Fdane2];
dane2=Chop[dane2];

(*Sinus nadal jest odrobinę "koślawy", ale wyraźnie usunięty został szum.*)

ListLinePlot[dane2]

(*Ciekawym zadaniem byłoby przerobienie powyższego algorytmu przy pomocy środowiska Manipulate, aby płynnie manipulować szerokością pasma i obserwować, jak zmienia się wykres oczyszczonego sygnału.*)