Basic operators and adjoints |
The next operator we examine is convolution. It arises in many applications; and it could be derived in many ways. A basic derivation is from the multiplication of two polynomials, say times .^{}Identifying the -th power of in the product gives the -th row of the convolution transformation (4).
Equation (4) could be rewritten as
The adjoint of (5) crosscorrelates a fixed portion
of filter input across a variable portion of filter output.
Module tcai1 is used for , and module tcaf1 is used for .
for( b=0; b < nb; b++) { for( x=0; x < nx; x++) { y = x + b; if( adj) xx[x] += yy[y] * bb[b]; else yy[y] += xx[x] * bb[b]; } } |
for (b=0; b < nb; b++) { for (x=0; x < nx; x++) { y = x + b; if( adj) bb[b] += yy[y] * xx[x]; else yy[y] += bb[b] * xx[x]; } } |
The polynomials , , and are called transforms. An important fact in real life (but not important here) is that the transforms are Fourier transforms in disguise. Each polynomial is a sum of terms, and the sum amounts to a Fourier sum when we take . The very expression says that a product in the frequency domain ( has a numerical value) is a convolution in the time domain. Matrices and programs nearby are doing convolutions of coefficients.
Basic operators and adjoints |