Off[Fourier::fpopt2]; FindPeriod[x_List, SampleRate_] := Module[{m = Length[x], aft, b, y, \[Delta], afrft, k, mean}, mean = Tr[x]/m; aft = Drop[Abs[Fourier[x - mean]],-1]; b = Position[aft, Max[aft]][[1, 1]]; If[aft[[b + 1]] < aft[[b - 1]], b--]; b--; y = x Exp[2 \[Pi] I b Range[0., m - 1]/m]; \[Delta] = 1./m; afrft = Abs[Fourier[y, FourierParameters -> {0, \[Delta]}]]; k = Position[afrft, Max[afrft]][[1, 1]] - 1; SampleRate m/(b + k \[Delta])]