0
0
RosHow-ToBeginner · 3 min read

How to Compute Autocorrelation in Signal Processing Easily

To compute autocorrelation in signal processing, you calculate the similarity of a signal with a delayed version of itself over varying time lags. This is done by summing the product of the signal values and their shifted counterparts, often using functions like numpy.correlate in Python for discrete signals.
📐

Syntax

The basic syntax to compute autocorrelation of a discrete signal x using Python's NumPy library is:

  • numpy.correlate(x, x, mode='full')

Here, x is the input signal array.

Explanation:

  • numpy.correlate computes the cross-correlation of two sequences.
  • Using the same signal x twice computes autocorrelation.
  • mode='full' returns the complete correlation, including negative and positive lags.
python
import numpy as np

# Syntax to compute autocorrelation
x = np.array([1, 2, 3])
auto_corr = np.correlate(x, x, mode='full')
💻

Example

This example shows how to compute and plot the autocorrelation of a simple signal using Python. It demonstrates how the autocorrelation peaks at zero lag and decreases as lag increases.

python
import numpy as np
import matplotlib.pyplot as plt

# Create a sample signal
x = np.array([1, 2, 3, 4, 2, 1])

# Compute autocorrelation
auto_corr = np.correlate(x, x, mode='full')

# Calculate lag indices
lags = np.arange(-len(x) + 1, len(x))

# Plot the autocorrelation
plt.stem(lags, auto_corr, use_line_collection=True)
plt.title('Autocorrelation of the signal')
plt.xlabel('Lag')
plt.ylabel('Autocorrelation')
plt.grid(True)
plt.show()

# Print autocorrelation values
print(auto_corr)
Output
[ 1 4 10 20 25 26 25 20 10 4 1]
⚠️

Common Pitfalls

Common mistakes when computing autocorrelation include:

  • Using mode='valid' or mode='same' which may not show full lag range.
  • Not centering the signal (subtracting mean) before autocorrelation, which can bias results.
  • Confusing autocorrelation with cross-correlation of different signals.

Always check the lag range and consider normalizing or centering your signal for meaningful results.

python
import numpy as np

x = np.array([1, 2, 3, 4, 2, 1])

# Wrong: Using mode='valid' limits lag range
wrong_auto_corr = np.correlate(x, x, mode='valid')

# Right: Using mode='full' for full lag range
right_auto_corr = np.correlate(x, x, mode='full')

print('Wrong autocorrelation:', wrong_auto_corr)
print('Right autocorrelation:', right_auto_corr)
Output
Wrong autocorrelation: [35 38 35 26 13 1] Right autocorrelation: [ 1 4 10 20 25 26 25 20 10 4 1]
📊

Quick Reference

Tips for computing autocorrelation:

  • Use numpy.correlate(x, x, mode='full') for full lag autocorrelation.
  • Subtract the mean of x before computing to center the signal.
  • Normalize by the zero-lag value if you want correlation coefficients between -1 and 1.
  • Interpret the peak at zero lag as the signal's energy or power.

Key Takeaways

Autocorrelation measures similarity of a signal with delayed versions of itself.
Use numpy.correlate with mode='full' to get autocorrelation over all lags.
Center your signal by subtracting its mean before computing autocorrelation for unbiased results.
The autocorrelation peak at zero lag shows the signal's total energy.
Avoid using modes like 'valid' that limit lag range and misinterpret results.