I am investigating autocorrelation of electrical noise as part of an undergraduate experiment (as detailed in http://physlab.lums.edu.pk/images/a/ab/Correlation.pdf). I sampled noise voltages using an 8-bit AtoD from a noise generator (whose description was not provided). I first sampled the noise directly, then I sampled it after passing it through a low-pass filter. I imported the data into MATLAB and used the autocorr function to autocorrelate it. The no-filter data autocorrelated as expected, being just 1 at t=0 (as in Fig 1 in paper); however, the filtered data decays initially as expected but then dips below 0 before coming back up and staying around 0 as in the image below. Negative autocorrelation

My three issues are:

  1. I am not really sure what this means physically (is the correlation 'direction' changed so-to-speak?),

  2. Why might this be occurring? I know that a description of the noise generator may be important here but I do not have that information myself.

  3. Is there any way to correct this issue, and if not, what would be the best compromise?


Here are snapshots of the noise without and with the filter (RC=0.5ms) respectively: Noise without filter Noise after going through RC=0.5ms low-pass filter

  • 1
    $\begingroup$ This question might be better suited for the signal processing SE. $\endgroup$ Apr 2 '14 at 22:30
  • 1
    $\begingroup$ A negative autocorrelation implies that if a particular value is above average the next value (or for that matter the previous value) is more likely to be below average. If a particular value is below average, the next value is likely to be above average. You should plot your dataset spectrum before and after the filter perhaps you manipulated the data in an unexpected way. $\endgroup$
    – user6972
    Apr 2 '14 at 22:51

Letting $\mathbf{F}$ and $\mathbf{F}^{-1}$ be the forward and inverse discrete Fourier transform, the cyclic autocorrelation of a signal $A$ is given by $$S(A)=\mathbf{F}^{-1}\left[\mathbf{F}(A)\mathbf{F}(A)^*\right].$$ Let the low-passed signal $A_L$ be $$A_L=\mathbf{F}^{-1}\left[\mathbf{F}(A)\mathbf{F}(L)\right]$$ where $L$ is the low-pass filter in the time domain. Then $$S(A_L)=\mathbf{F}^{-1}\left[\mathbf{F}(A)\mathbf{F}(L)\mathbf{F}(A)^*\mathbf{F}(L)^*\right]=\mathbf{F}^{-1}\left[\mathbf{F}(A)\mathbf{F}(A)^*\mathbf{F}(L)\mathbf{F}(L)^*\right]\\=S(A)*S(L)$$ where the convolution theorem has been applied.

Since $S(A)\approx(A\cdot A,0,0,...)$ for uncorrelated noise, you should roughly be getting back a picture of $S(L)$ when you compute the autocorrelation of the low-pass signal.

So the question becomes: what sort of low-pass filter $L$ did you employ?

  • $\begingroup$ Thank you for the response. I used an RC circuit as shown in en.wikipedia.org/wiki/File:RC_Divider.svg, with R=10k, C=47n giving a value of RC=0.5ms, which according to the papar, should not do what it is doing (Fig 2). $\endgroup$
    – davly
    Apr 2 '14 at 23:16
  • $\begingroup$ So, the paper took 10200 lowpassed datapoints spaced apart by 0.15 ms and autocorrelated it, and did that another 19 times and added them together to get an averaged autocorrelation. Was your autocorrelation signal averaged 20 times as well? How many datapoints are there? What is the time-spacing between datapoints? $\endgroup$ Apr 2 '14 at 23:29
  • $\begingroup$ Unfortunately, time did not permit taking multiple data sets so no averaging was done; however, I did take 100000 datapoints, and the time difference was 0.1 ms. $\endgroup$
    – davly
    Apr 2 '14 at 23:39
  • $\begingroup$ So I used random numbers and did a single trial with 10000 points, and the autocorrelation graphs did sometimes go below zero with the low-pass. So I think the problem is that you're only using 1 dataset, rather than 20. You could divide the 100000-point dataset into 10 smaller 10000-point datasets and then compute 10 separate autocorrelations and then add them together. $\endgroup$ Apr 2 '14 at 23:47
  • $\begingroup$ I tried what you said; I split 200,000 points in to 20 sets of 10,000 (I actually did have another data set from before), autocorrelated them, and plotted the results: i.stack.imgur.com/0qlE6.png (the average marked with the thicker grey line). As you can see, it still isn't close to going above 0. $\endgroup$
    – davly
    Apr 3 '14 at 0:54

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.