I have a signal that I want to identify the frequencies in it, I used the Fourier function but I can't get the frequency correctly. Here is a simplified example:

    dt = 1/100;
    ls = Table[0.1 Cos[30 x] + 2 Sin[x]^2, {x, 0, 200 dt, dt}];
    ListPlot[ls, Mesh -> All, MeshStyle -> Red]

![enter image description here][1]

and the Fourier transform

    ListPlot[Abs[Fourier[ls]]^2, PlotRange -> {{0, 10}, {0, 1}}, 
     DataRange -> {0, 1/dt}, 
     FrameLabel -> {"Frequency", "Intensity"}, 
     Mesh -> All, MeshStyle -> Red, GridLines -> {{30/(2 π)}, None}]

![enter image description here][2]

Why do I get the peak not at the original frequency 30/(2Pi), but with a frequency shift? Did I make a terrible mistake?
What's the correct way to recover the original frequency using signal processing?


I tried to padding zeros but still have a frequency shift.

    ListPlot[Abs[Fourier[PadRight[ls, 2000]]]^2, 
     PlotRange -> {{0, 10}, {0, .1}}, DataRange -> {0, 1/dt}, 
     FrameLabel -> {"Frequency (eV)", "Fourier transform (arb.)"}, 
     Mesh -> All, MeshStyle -> Red, GridLines -> {{30/(2 π)}, None}]
![enter image description here][3]


  [1]: https://i.sstatic.net/prPI7.png
  [2]: https://i.sstatic.net/bjQIX.png
  [3]: https://i.sstatic.net/MzmWY.png