I tried to find frequency using Fourier Transform, but notice that my code have some mistakes which I can't find. So, my code is below:

T0 = 0.0;
T1 = 5.0;
gf = 1.0;

ja = Table[Cos[2 Pi*gf*t], {t, T0, T1, 1/10}];
ja1 = Fourier[ja];
ja2 = Chop[ja1];
ja3 = Take[Abs[ja2], ((Length[ja2] - 1)/2) + 1];

ListPlot[ja3, Frame -> True, FrameLabel -> {Style["Frequency (a.u.)", 
FontSize -> 16], Style["Amplitude (a.u.)", FontSize -> 16]},
PlotRange -> All, Joined -> True, Mesh -> All]

And result is: enter image description here After I find frequency which is 1 Hz.

MaxAmp = Position[ja3, Max[ja3]][[1, 1]]


Freq = (MaxAmp - 1)/(T1 - T0)


Than, I want to change frequency gf from 1 to 6 and I get next result: enter image description here

When I tried to find frequency, I got 4 Hz which isn't correct. I noticed that on the range between 1 and 5 it's work good, but if set larger value it's not correct. I also noticed that if you change the step from 1/10 to 1/20, then the result will be correct. But changing the frequency gf is constantly required to select this step, which is not convenient. How can I do it automatically, to prevent incorrect result.


closed as off-topic by corey979, MarcoB, andre314, m_goldberg, Alex Trounev Apr 1 at 12:07

This question appears to be off-topic. The users who voted to close gave these specific reasons:

  • "The question is out of scope for this site. The answer to this question requires either advice from Wolfram support or the services of a professional consultant." – corey979, andre314, Alex Trounev
  • "This question arises due to a simple mistake such as a trivial syntax error, incorrect capitalization, spelling mistake, or other typographical error and is unlikely to help any future visitors, or else it is easily found in the documentation." – MarcoB, m_goldberg
If this question can be reworded to fit the rules in the help center, please edit the question.

  • $\begingroup$ You might be interested in PeakDetect. $\endgroup$ – Henrik Schumacher Mar 30 at 17:21
  • 1
    $\begingroup$ This is a classical signal processing problem. (though I have not found a simple and concise answer on "signal processing StackExchange") $\endgroup$ – andre314 Mar 30 at 21:15
  • 1
    $\begingroup$ I have put information concerning the frequency axis and other basic aspects of Fourier here. This may help. $\endgroup$ – Hugh Mar 31 at 11:46

What you observe is perfectly normal. It is the consequence of the famous Nyquist sampling theorem.

In your case, it is particularly clear that the problem is not due to the Fourier transform. Compare:

  • ja at $6 \text{ Hz}$ gf = 6.0; ja6 = Table[Cos[2 Pi*gf*t], {t, T0, T1, 1/10}]
  • ja at $4 \text{ Hz}$ gf = 4.0; ja4 = Table[Cos[2 Pi*gf*t], {t, T0, T1, 1/10}]

They are exactly the same:

   Max[Abs[ja6 - ja4]] 


(It's a very special case of aliasing due to not respecting the theorem)


Not the answer you're looking for? Browse other questions tagged or ask your own question.