added canonical convolution implementation