I am trying to make sense of the below code. I am taking a large sample so that I get good estimates for standard deviation.

N = 25;
h1 = ones(1, N)./N;
L = 1000000;
s = ones(1, L);
n = 0.1*randn(1, L);
x = s + n;
stdx = std(x);
y = filter(h1,1,x);
stdy = std(y);

This code will give me stdx = 0.1 and stdy = 0.02, which is expected since $\sigma_y=\sigma_x/{\sqrt{N}}$as we are essentially doing an average filter.

But giving more amplitude to the signal s = 10*ones(1, L); and running the same code above is giving me a stdy = 0.0344. Shouldn't the standard deviation be same in both the cases since the signal s has no variance?


1 Answer 1


I believe your intuition is correct.

The filter you're using is a low pass filter with a DC gain of 1. Without seeing the output of the filtering operation, I suspect that you're seeing the effect of initial conditions in the filter: getting from 0 to 1 in your first instance takes fewer samples than getting from 0 to 10 in your second.

To test this, try taking the middle $L/2$ of your filtered signal and see what std(y(L/4:3*L/4) is then.

  • $\begingroup$ That is exactly it. $\endgroup$ May 14, 2017 at 20:20
  • $\begingroup$ (I don't think it takes any fewer samples since it will be the length of the filter, but exactly due to the filter initial conditions as you described. I believe the reason for the larger error is that the difference initially is larger) $\endgroup$ May 14, 2017 at 21:04
  • 2
    $\begingroup$ That is it. If I just remove the transient and take std(y(N:end)) that will give me stdy=0.02. Thank you!. $\endgroup$ May 14, 2017 at 22:49

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.