![]() |
![]() |
![]() |
![]() | 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 | ![]() |
![]() |