sdr.plot.correlation(x: ArrayLike, y: ArrayLike, sample_rate: float | None = None, mode: 'full' | 'valid' | 'same' | 'circular' = 'full', ax: Axes | None = None, y_axis: 'complex' | 'mag' | 'mag^2' | 'db' = 'mag', diff: 'color' | 'line' = 'color', **kwargs)

Plots the correlation between two time-domain signals \(x[n]\) and \(y[n]\).

Parameters:
x: ArrayLike

The first time-domain signal \(x[n]\).

y: ArrayLike

The second time-domain signal \(y[n]\).

sample_rate: float | None = None

The sample rate \(f_s\) of the signal in samples/s. If None, the x-axis will be labeled as “Lag (samples)”.

mode: 'full' | 'valid' | 'same' | 'circular' = 'full'

The numpy.correlate() correlation mode. If "circular", a circular correlation is computed using FFTs.

ax: Axes | None = None

The axis to plot on. If None, the current axis is used.

y_axis: 'complex' | 'mag' | 'mag^2' | 'db' = 'mag'

Indicates how to plot the y-axis. If "complex", the real and imaginary parts are plotted separately.

diff: 'color' | 'line' = 'color'

Indicates how to differentiate the real and imaginary parts of a complex signal. If "color", the real and imaginary parts will have different colors based on the current Matplotlib color cycle. If "line", the real part will have a solid line and the imaginary part will have a dashed line, and both lines will share the same color.

**kwargs

Additional keyword arguments to pass to matplotlib.pyplot.plot().

Examples

Plot the auto-correlation of a length-63 \(m\)-sequence. Notice that the linear correlation produces sidelobes for non-zero lag.

In [1]: x = sdr.m_sequence(6, output="bipolar")

In [2]: plt.figure(); \
   ...: sdr.plot.correlation(x, x, mode="full");
   ...: 
../../_images/sdr_plot_correlation_1.png

However, the circular correlation only produces magnitudes of 1 for non-zero lag.

In [3]: plt.figure(); \
   ...: sdr.plot.correlation(x, x, mode="circular");
   ...: 
../../_images/sdr_plot_correlation_2.png