Multidimensional convolution based on Fourier transform.
using domain_type = blitz::RectDomain< N >using array_type = transform_type::array_typeusing shape_type = transform_type::shape_typeusing transform_type = Fourier_transform< T, N >convolve(array_type signal, array_type kernel) -> array_type
Zero-pad kernel to be of length block_size + padding.
Take forward FFT of padded kernel.
Decompose input signal into blocks of length block_size.
Zero-pad each part to be of length block_size + padding.
Take forward FFT of each padded part.
Multiply two FFTs.
Take backward FFT of the result.
Copy padded part back overlapping it with adjacent parts.
operator()(array_type signal, array_type kernel) -> array_typepadding() const -> const shape_type &block_shape() const -> const shape_type &padded_block_shape() const -> shape_typepadded_block_shape(const shape_type & block_size, const shape_type & padding) -> voidshape(const shape_type & signal_shape, const shape_type & kernel_shape) -> voidConvolution(const shape_type & signal_shape, const shape_type & kernel_shape)explicitConvolution()