Another approach is to work with a continuous periodogram and try to isolate frequency peaks from that. I'll demonstrate with the running example involving two frequencies.
ff2 = 0.3 + 3.5 Cos[2.6 t + .8] + 1.2 Cos[5.3 t - .4];
obstime = 80;
data2 = Table[ff2, {t, 0, obstime, .1}];
normdata2 = data2 - Mean[data2];
pgram[w_?NumberQ, vals_, gap_] :=
Abs[Total[vals*Exp[I*w*gap*Range[0, Length[vals] - 1]]]^2]/
Length[vals]
gap = obstime/Length[normdata2];
Plot[pgram[w, normdata2, gap], {w, 0, 10}, PlotRange -> All]

It is clear that there are a couple of peaks and we can get refinements from NMaximize
as below. I remark that it is not hard to find good bounds/starting points just by keeping values using the EvaluationMonitor
option to Plot
.
{m1, f1} =
NMaximize[{pgram[w, normdata2, gap], 2 <= w <= 4}, w]
{m2, f2} = NMaximize[{pgram[w, normdata2, gap], 4 <= w <= 6}, w]
(* Out[1434]= {2453.603870204632, {w -> 2.603084800951954}}
Out[1435]= {301.3987842825805, {w -> 5.30742917643148}} *)
Amplitudes can be estimated using a non-squared variant of the above.
amp[w_?NumberQ, vals_, gap_] :=
2*Abs[Total[vals*Exp[I*w*gap*Range[0, Length[vals] - 1]]]]/Length[vals]
Offhand I don't know why the factor of 2 is needed in the normalization. And maybe this is not a good method anyway. But ehre is what it gives.
NMaximize[{amp[w, normdata2, gap], 2 <= w <= 4}, w]
NMaximize[{amp[w, normdata2, gap], 4 <= w <= 6}, w]
(* Out[1443]= {3.500386188934522, {w -> 2.60308480095994}}
Out[1444]= {1.226830277890204, {w -> 5.307429138313871}} *)
We even get the frequencies again.