I know there is not possible to find the true noise of a measured signal. The only way to "find" the noise is to estimate the noise. Noise has the mean 0, but the variance varies.

So assume that we have a signal which look like this:

enter image description here

The clean signal is $y(t)$ and the noise is $e(t)$. In this case, $e(t)$ has the variance 1 because it's generated by Octave/MATLAB function 0.05*randn().

So my question is: How can i estimate variance of this noise from this signal?


2 Answers 2


Hi: In order to estimate the variance, you need to have an underlying model for your signal. So, suppose that the model is

$y_{t+1} = y_t + \epsilon_t$ $~\forall ~ t = 1,\ldots n $.

assuming that $E(\epsilon_t) = 0$ and $var(\epsilon_t) = \sigma^2$.

In this case, you would difference your data in order to get estimates of $\epsilon_{t}$ at each time $t$, and call the estimates $\hat{\epsilon}_t, ~\forall i = 2, \ldots n$.

Then, then an unbiased estimate of $\sigma^2 , \hat{\sigma}^2$, $= \frac{1}{n-2} \sum_{i=2}^{n} (\hat{\epsilon_i} - 0)^2$.

But that estimate is critically dependent on the assumed model for the response $y_{t}$ ( this model is sometimes used in finance for the log price at time t+1 and is referred to as a random walk model ). A different model will lead to a different estimate of the noise because the assumptions about the noise will be quite different in each case. I hope this helps some.


Here is the answer. If we have a measured signal $y_m(t)$ and we know that there is a noise $e(t)$ inside $y_m(t)$. Our goal is to extract $e(t)$ from $y_m(t)$.

So lets say that we have a signal which look like this:

enter image description here

I have generate this by using this Octave/MATLAB code

>> ym = y + 0.03*randn(1, length(y));

The command randn() gives a vector of dimension 1 and length length(y). The vector contains noise of mean 0 and variance 1. Notice that I scale the variance with 0.03.

So to find the variance I need to use this command

>> var(ym)
ans =  0.037284

Now we have found our variance $\sigma ^2$

But assume that we want to know the scalar of the noise. We choose a new $y_m(t)$ with noise scalar 9.

ym = y + 9*randn(1, length(y));

This is much noise.

>> ym = y + 9*randn(1, length(y));
>> var(ym)
ans =  81.339
>> sqrt(var(ym))
ans =  9.0188

We simply find the standard deviation. We can also type in.

>> std(ym)
ans =  9.0188

So now we know the scalar of the noise. The command randn() gives $\sigma ^2 = 1$ and then we can generate the estimated noise $e(t)$ from $y_m(t)$ just by know the scalar of the noise.


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.