|
|
|
|
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 |