Dr. John
Dr. John

Reputation: 283

How to find the period of a periodic function using FFT?

Assume I have a smooth function (represented as a vector):

x=0:0.1:1000; 
y=sin(2*x); 

and I want to find its periodicity - pi (or even its frequency -2 ) . I have tried the following:

nfft=1024;
Y=fft(y,nfft);
Y=abs(Y(1:nfft/2));
plot(Y);

but obviously it doesn't work (the plot does not give me a peak at "2" ).

Will you please help me find a way to find the value "2"?

Thanks in advance

Upvotes: 1

Views: 3233

Answers (2)

hotpaw2
hotpaw2

Reputation: 70693

In general, you can't use an FFT alone to find the period of a periodic signal. That's because an FFT does sinusoidal basis decomposition (or basis transform), and lots of non-sinusoidal waveforms (signals that look absolutely nothing like a sinewave or single sinusoidal basis vector) can be repeated to form a periodic function, waveform, or signal. Thus, it's quite possible for the frequency of a periodic function or waveform to not show up at all in an FFT result (it's called the missing fundamental problem).

Only in the case of a close or near sinusoidal signal will an FFT reliably report the reciprocal of the period of that periodic function.

There are lots of pitch detection/estimation algorithms. You can use an FFT as a sub-component of some composite methods, including cepstrums or cepstral analysis, and Harmonic Product Spectrum pitch detection methods.

Upvotes: 2

Suever
Suever

Reputation: 65430

You have several issues here:

  1. You are computing the fft of x when your actual signal is y

  2. x should be in radians

  3. You need to define a sampling rate and use that to determine the frequency values along the x axis

So once we correct all of these things, we get:

samplingRate = 1000;   % Samples per period
nPeriods = 10;
nSamples = samplingRate * nPeriods;

x = linspace(0, 2*pi*nPeriods, nSamples);
y = sin(2*x);

F = fft(y);

amplitude = abs(F / nSamples);

f = samplingRate / nSamples*[0:(nSamples/2-1),-nSamples/2:-1];

plot(f, amplitude)

enter image description here

Upvotes: 2

Related Questions