S3L_conv computes the 1D or 2D convolution of a signal represented by a parallel array using a filter contained in a second parallel array. The result is stored in a third parallel array. These parallel arrays are described by the S3L array handles: a (signal), b (filter), and c (result). All three arrays are of the same real or complex type.
For the 1D case, if the signal a is of length ma and the filter b of length mb, the result of the convolution, c, will be of length ma + mb - 1. In the 2D case, if the signal is of size [ma,na] and the filter is of size [mb,nb], the result of the convolution is of size [ma+mb-1,na+nb-1].
Because a and b are used internally for auxiliary storage, they may be destroyed after the convolution calculation is complete. If the contents of a and b must be used after the convolution, they should first be copied to temporary arrays.
S3L_conv is most efficient when all arrays have the same length and when this length can be computed efficiently via S3L_fft, or S3L_rc_fft. See "S3L_fft " and "S3L_rc_fft and S3L_cr_fft " for additional information.
The dimensions of the array c must be such that the 1D or 2D complex-to-complex FFT or real-to-complex FFT can be computed.
The C and Fortran syntax for S3L_conv are shown below.
#include <s3l/s3l-c.h> #include <s3l/s3l_errno-c.h> int S3L_conv(a, b, c, setup_id) S3L_array_t a S3L_array_t b S3L_array_t c int *setup_id |
include `s3l/s3l-f.h' include `s3l/s3l_errno-f.h' subroutine S3L_conv(a, b, c, setup_id, ier) integer*8 a integer*8 b integer*8 c integer*4 setup_id integer*4 ier |
where <type> is real*4 or real*8 for both C/C++ and F77/F90.
a - S3L array handle describing a parallel array of size ma (1D case) or ma x na (2D) case. a is the input signal that will be convolved.
b - S3L array handle describing the parallel array that contains the filter.
setup_id - Valid convolution setup ID as returned from a previous call to S3L_conv_setup.
This function uses the following arguments for output:
c - S3L array handle describing a parallel array containing the convolved signal. Its length must be at least ma+mb-1 (1D case) or ma+mb-1 x na+nb-1 (2D case).
ier (Fortran only) - When called from a Fortran program, this function returns error status in ier.
On success, S3L_conv returns S3L_SUCCESS.
S3L_conv performs generic checking of the arrays it accepts as arguments. If an array argument contains an invalid or corrupted value, the function terminates and an error code indicating which value of the array handle was invalid is returned. See Appendix A of this manual for a detailed list of these error codes.
In addition, the following conditions cause the function to terminate and return one of the following codes:
S3L_ERR_MATCH_DTYPE - a, b, and c do not have the same data type.
S3L_ERR_MATCH_RANK - a, b, and c do not have the same rank.
S3L_ERR_ARG_RANK - The rank of an array argument is larger than 2.
S3L_ERR_ARG_DTYPE - The data type of one of the array arguments is invalid. It must be one of:
S3L_float
S3L_double
S3L_complex
S3L_double_complex
S3L_ERR_ARG_EXTENTS - The extents of c are smaller than two times the sum of the corresponding extents of a and b minus 1.
../examples/s3l/conv/ex_conv.c ../examples/s3l/conv-f/ex_conv.f
S3L_conv_setup(3) S3L_conv_free_setup(3)