I am given the following task, however, I am lost conceptually, and require some assistance on the procedure. Given raw noisy data where the signal is a single sinusoid and noise is a random content. The sampling rate is known. I am asked to plot the autocorrelation function and calculate the Singal-to-Noise-Ratio (in dB) from this plot. I have found the autocorrelation and take the FFT of the function as follows:

ac = autocorr(data,fs);
ac_fft = fft(ac);
Amp_ac = abs(ac_fft); % Peaks at 2 frequency in the plot

However, I am lost after this point. What does the FFT of autocorrelation outputs conceptually? And how can I proceed from here to find the SNR? I will be solving this in MATLAB, but mainly I need help with the procedure rather than the code. Thanks.

  • 1
    $\begingroup$ This existing post may help you which details getting the SNR from the correlation coefficient (which is the peak of the autocorrelation function scaled by the standard deviation of each of the two waveforms). dsp.stackexchange.com/questions/38670/… $\endgroup$ Mar 16, 2022 at 1:13

1 Answer 1


The Fourier transform of the autocorrelation function of a signal gives you the Power Spectral Density (PSD). So, if you locate the bin with the peak corresponding to the frequency of the sinewave you will get an estimate of its energy. The sum of the rest of the bins will give you an estimate of the energy present in the noise (since everything else other than the sinewave is noise).

Please keep in mind that these are mere estimates, since the energy present in the bin corresponding to the frequency of the sinewave depends also on the frequency of the sinewave in respect to the sampling rate and the length of the autocorrelation function (see leakage effect for more information).


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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