I wonder if there's a function in numpy/scipy for 1d array circular convolution. The scipy.signal.convolve()
function only provides "mode" but not "boundary", while the signal.convolve2d()
function needs 2d array as input.
I need to do this to compare open vs circular convolution as part of a time series homework.
Since this is for homework, I'm leaving out a few details.
By the definition of convolution, if you append a signal a to itself, then the convolution between aa and b will contain inside the cyclic convolution of a and b.
E.g., consider the following:
import numpy as np
from scipy import signal
%pylab inline
a = np.array([1] * 10)
b = np.array([1] * 10)
plot(signal.convolve(a, b));
That is the standard convolution. Now this, however
plot(signal.convolve(a, np.concatenate((b, b))));
In this last figure, try to see where is the result of the circular convolution, and how to generalize this.