I would like to know can anyone suggest me techniques to estimate the SNR for a given noisy signal. I do not know the amplitude of my signal but I do know that noise is Gaussian.

I have tried to do estimation in frequency domain where I simply take the FFT of the signal and find the dominant peak and find the power associated with that as the signal power and noise power as the power in all other bins.

However, this technique seems to work well when I have sinusoidal signal and fails easily when I just have a noisy signal and do not know the nature of the signal since I do not know what peaks in FFT corresponds to my signal and how many of them.

  • $\begingroup$ There's a chapter on this subject in Jeruchim et al, "Simulation of Communications Systems", which you may find useful. $\endgroup$ – MBaz Aug 12 '16 at 13:36
  • $\begingroup$ One approach is to use the median of the spectrum to find the noise estimate. Or some other quantile depending on how many bins are occupied. $\endgroup$ – John Aug 13 '16 at 2:47
  • $\begingroup$ Do you have a noise free replica of your signal? If so calculate the normalize correlation coefficient $\rho$ from that you can compute SNR in dB using $SNR = 10Log(\rho/(1-\rho))$ $\endgroup$ – Dan Boschen Apr 10 '17 at 22:05

A common technique relies on filter banks and robust statistics. The idea is to isolate some frequency subbands where the transformed signal is sparse, and the rest is (filtered) noise. From here, you can use a median estimator.

In the context of orthogonal wavelets (a form of dyadic filter banks), if the signal is sufficiently sampled, the highest frequency subband often satisfies the above requirements. Or one can choose a suitable union of subbands where the signal is considered sparse.

Then, if $c_i$ denote the subband coefficients, an estimator of the Gaussian noise variance $\sigma$ is:

$$ \hat{\sigma} = \frac{\textrm{median}|c_i|}{0.6745}\,.$$

The following picture displays the average noise estimation, with standard deviation, from several realizations of a Gaussian noise added to a line of an image.

noise estimation

This is described in Penalized threshold for wavelet 1-D or 2-D de-noising. More details are given in S. Mallat, A wavelet tour of signal processing, section 11.3 Thresholding Sparse Representations, Noise Variance Estimation. The denominator factor is discussed in Rousseeuw and Croux, Alternatives to median absolute deviation, 1993.

A very basic avatar consists in differentiating the data with the basic $[1,-1]$ finite difference, and using the above estimator, further divided by $\sqrt{2}$ to account for its energy normalization.


As far as I understand, you have a random signal + Gaussian noise, and you want to calculate the SNR. SNR estimation methods, fall into two groups, 1)data-aided and 2)blind methods. The data-aided methods transmit a pilot data (known or predefined signal) from a channel and based on degree of corruption of the received signal estimate the SNR, blind techniques are a bit more complex and usually are not general and are specialized to different signals (for example Speech SNRAnother are only for speech, or OFDM SNR is only for OFDM signal. Depending on nature of you signal you can find the most appropriate blind SNR estimator, for you case.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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