convolution implemented