Computes the convolution of two complex vectors.
X — Complex vector of length NX. (Input)
Y — Complex vector of length NY. (Input)
Z — Complex vector of length NZ containing the convolution Z = X * Y. (Output)
NX — Length of
the vector X.
(Input)
Default: NX = size
(X,1).
NY — Length of
the vector Y.
(Input)
Default: NY = size
(Y,1).
NZ — Length of
the vector Z.
(Input)
NZ
must be at least NX + NY - 1.
Default: NZ = size
(Z,1).
Generic: CALL VCONC (X, Y, Z [,…])
Specific: The specific interface names are S_VCONC and D_VCONC.
Single: CALL VCONC (NX, X, NY, Y, NZ, Z)
Double: The double precision name is DVCONC.
The routine VCONC computes the convolution z of two complex vectors x and y. Let nx = NX, then ny = NY and nz = NZ. The vector z is defined to be
where nz = nx + ny - 1. If the index j - k + 1 is outside the range 1, 2, …, nx, then xj - k + 1 is taken to be zero.
The fast Fourier transform is used to compute the convolution. Define the complex vector u of length nz = nx + ny - 1 to be
The complex vector v, also of length nz, is defined similarly using y. Then, by the Fourier convolution theorem,
where the indicates the Fourier transform of u computed using IMSL routine FFTCF (see Chapter 6, Transforms;). The complex vector z is computed from via IMSL routine FFTCB (see Chapter 6, Transforms;).
Workspace may be explicitly provided, if desired, by use of V2ONC/DV2ONC. The reference is
CALL V2ONC (NX, X, NY, Y, NZ, Z, XWK, YWK, WK)
The additional arguments are as follows:
XWK — Complex work array of length NX + NY - 1.
YWK — Complex work array of length NX + NY - 1.
WK — Real work arrary of length 6 * (NX + NY -1) + 15.
In this example, the convolution of a vector x of length 4 and a vector y of length 3 is computed. The resulting vector z is of length 4 + 3 -y is sometimes called a filter.)
USE VCONC_INT
USE WRCRN_INT
IMPLICIT NONE
INTEGER NX, NY, NZ
PARAMETER (NX=4, NY=3, NZ=NX+NY-1)
!
COMPLEX X(NX), Y(NY), Z(NZ)
! Set values for X
! X = ( 1.0+2.0i 3.0+4.0i 5.0+6.0i 7.0+8.0i )
! Set values for Y
! Y = (0.0+0i 0.0+0i 1.0+0i )
!
DATA X/(1.0,2.0), (3.0,4.0), (5.0,6.0), (7.0,8.0)/
DATA Y/(0.0,0.0), (0.0,0.0), (1.0,1.0)/
! Compute vector convolution
! Z = X * Y
CALL VCONC (X,Y,Z)
! Print results
CALL WRCRN ('Z = X (*) Y', Z, 1, NZ, 1)
END
Z = X (*)
Y
1
2
3
4
( 0.00, 0.00) ( 0.00, 0.00) (
-1.00, 3.00) ( -1.00,
7.00)
5
6
( -1.00, 11.00) ( -1.00, 15.00)
Visual Numerics, Inc. PHONE: 713.784.3131 FAX:713.781.9260 |