Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

HOW CAN I CALCULATE THE SIGNAL TO NOISE RATIO(SNR) OF A SIGNAL

Asked by raj on 16 Apr 2012

I have a signal which is comprised of 4 chirp signals and an additive noise with the same sampling frequency and size is generated now i need to calculate the SNR of the signal and noise . Also if I am correct to vary the signal to noise ratio is it ok if I vary the amplitudes of chirp signals and also the noise by multiplying it with a factor : ex: noise = randn(size(t)); where t = 0:1e-4:1; and to increase the noise

{new noise = 2*noise ;} is this correct?? and to increase the amplitudes of the signal is this the way to change the signal to noise ratio

y3 = 5* chirp(t,600,t1,800,'linear');
 y4 = 3.5*chirp(t,900,t1,980,'linear');

0 Comments

raj

Products

No products are associated with this question.

2 Answers

Answer by Geoff on 16 Apr 2012
Accepted answer

From Wikipedia: http://en.wikipedia.org/wiki/Signal-to-noise_ratio

SNR = Psignal / Pnoise = (Asignal / Anoise)^2

Where P is power, and A is amplitude.

I would calculate the RMS amplitudes and use those in the above formula.

[edit]

RMS means Root-Mean-Square. That is, you square your signal, calculate the mean of that, and take the square root. Just define a wee anonymous function for clarity:

RMS = @(x) sqrt(mean(x.^2));

Now you can compute your ratio like so:

x_snr = (RMS(x) / RMS(n)) ^ 2;

6 Comments

Geoff on 17 Apr 2012

This isn't really a MatLab question anymore. You might need to brush up on the theory of exactly what you are trying to do.

Like it says on that Wikipedia link I gave you that you surely have read, you take the log (base 10) if you want your SNR expressed in decibels.

So only you can answer the question of whether to apply log, because only you know whether you want the SNR in decibels or not.

x_snr_db = 20 * log10( RMS(x) / RMS(n) );

raj on 17 Apr 2012

thanks for ur help

Geoff on 17 Apr 2012

no worries =)

Geoff
Answer by Wayne King on 16 Apr 2012

You can increase the SNR by increasing the amplitude of the signal and by decreasing the variance of the noise. You have to remember that if you want to increase the variance of the noise by 2, you should multiply randn() by sqrt(2), not 2. Multiplying by two increases the variance by a factor of 4.

   x = randn(100,1); % variance is 1
   x = sqrt(2)*randn(100,1) % variance is 2

1 Comment

raj on 16 Apr 2012

how should i calculate SNR is it by calculating the variance of signal and noise and dividing them and then applyng log to it

Wayne King

Contact us