Multidimensional convolution based on Fourier transform.
using domain_type = blitz::RectDomain< N >
using array_type = transform_type::array_type
using shape_type = transform_type::shape_type
using 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_type
padding() const -> const shape_type &
block_shape() const -> const shape_type &
padded_block_shape() const -> shape_type
padded_block_shape(const shape_type & block_size, const shape_type & padding) -> void
shape(const shape_type & signal_shape, const shape_type & kernel_shape) -> void
Convolution(const shape_type & signal_shape, const shape_type & kernel_shape)explicit
Convolution()