_IIRM1D(3F) _IIRM1D(3F)
SIIRM1D, DIIRM1D, CIIRM1D, ZIIRM1D - N 1D convolutions in the time
domain.
FORTRAN SPECIFICATION
subroutine SIIRM1D( f, incf, ldf, ifx0, n_fx, ny,
g, incg, igx0, n_gx,
h, inch, ldh, ihx0, n_hx )
integer incf, ldf, ifx0, n_fx, ny,
incg, igx0, n_gx,
inch, ldh, ihx0, n_hx
real f(ldf,ny), g(*), h(ldh,ny)
subroutine DIIRM1D( f, incf, ldf, ifx0, n_fx, ny,
g, incg, igx0, n_gx,
h, inch, ldh, ihx0, n_hx )
integer incf, ldf, ifx0, n_fx, ny,
incg, igx0, n_gx,
inch, ldh, ihx0, n_hx
double precision f(ldf,ny), g(*), h(ldh,ny)
subroutine CIIRM1D( f, incf, ldf, ifx0, n_fx, ny,
g, incg, igx0, n_gx,
h, inch, ldh, ihx0, n_hx )
integer incf, ldf, ifx0, n_fx, ny,
incg, igx0, n_gx,
inch, ldh, ihx0, n_hx
complex f(ldf,ny), g(*), h(ldh,ny)
subroutine ZIIRM1D( f, incf, ldf, ifx0, n_fx, ny,
g, incg, igx0, n_gx,
h, inch, ldh, ihx0, n_hx )
integer incf, ldf, ifx0, n_fx, ny,
incg, igx0, n_gx,
inch, ldh, ihx0, n_hx
double complex f(ldf,ny), g(*), h(ldh,ny)
Page 1
_IIRM1D(3F) _IIRM1D(3F)
#include <conv.h>
void siirm1d( float *f, int incf, int lsf, int ifx0, int n_fx,
int n_seq,
float *g, int incg, int igx0, int n_gx,
float *h, int inch, int ldh, int ihx0, int n_hx )
void diirm1d( double *f, int incf, int ldf, int ifx0, int n_fx,
int n_seq,
double *g, int incg, int igx0, int n_gx,
double *h, int inch, int ldh, int ihx0, int n_hx )
void ciirm1d( complex *f, int incf, int ldf, int ifx0, int n_fx,
int n_seq,
complex *g, int incg, int igx0, int n_gx,
complex *h, int inch, int ldh, int ihx0, int n_hx )
void ziirm1d( zomplex *f, int incf, int ldf, int ifx0, int n_fx,
int n_seq,
zomplex *g, int incg, int igx0, int n_gx,
zomplex *h, int inch, int ldh, int ihx0, int n_hx )
SIIRM1D, DIIRM1D, CIIRM1D and DIIRM1D compute N 1D convolutions in the
time domain :
h(i,j) = beta * h(i,j) + alpha * Sum[ f(k,j) * g(i-k) ] with j=1,...,N
_IIRM1D can be used instead of _IIR2D when the 2D filter can be
decomposed into the convolution of two 1D filters.
For example:
------------------ ------------------ ------------------
| 0.25 -.50 0.25 | | 0. -.50 0. | | 0. 0. 0. |
| -.50 1.00 -.50 | = | 0. 1.00 0. | (*) | -.50 1.00 -.50 |
| 0.25 -.50 0.25 | | 0. -.50 0. | | 0. 0. 0. |
|________________| |________________| |________________|
In these special cases, filtering an Image (NxN) by a Filter (MxM) can
requires:
only 2 * M * N * N flop (using "diirm1d" twice)
as much as M * M * N * N flop (using "diir2d")
Page 2
_IIRM1D(3F) _IIRM1D(3F)
USAGE:
1. Suppose you want to:
filter a 2D "image" f(0:449,0:699) along the first dimension ,
by a 1D filter g(-15:15),
put the result in h(0:299,0:699),
you can use:
call diirm1d( f(0,0), 449-0+1, 1, 0, 449-0+1, 699+1,
g(-15), 1, -15, 15-(-15)+1,
$ h(0, 0), 229-0+1, 0, 299-0+1 )
2. Suppose you want to:
filter a 2D "image" f(0:449,0:699) along the Second dimension ,
by the Fisrt line of g(0:149,-15:15),
put the result in h(-25:449,0:699),
you can use:
call diirm1d( f(0, 0), 699-0+1, 1, 0, 449-0+1,
$ g(0, -15), 1, 149-25+1, -15, 15,
$ h(0, 0), 449-0+1, 1, 0, 449-0+1 )
f Vector containing the 2D sequence "f"
incf Increment between two successive values of "f"
ldf Increment between two successive 1D sequnce of "f"
ifx0 Index of the first element of each 1D sequence of "f"
n_fx Number of elements of each sequence of "f"
ny Number of 1D sequences to filter
g Vector containing the 1D sequence "g"
incg Increment between two successive values of "g"
igx0 Index of the first element of each 1D sequence of "g"
n_gx Number of elements of Each sequence of "g"
h Vector containing the 2D sequence "h"
inch Increment between two successive values of "h"
ldh Increment between two successive 1D sequnce of "h"
Page 3
_IIRM1D(3F) _IIRM1D(3F)
ihx0 Index of the first element of each 1D sequence of "h"
n_hx Number of elements of Each sequence of "h"
IMPORTANT NOTE:
The array pointers must all point to the first element of the
array "(ifx0,ify0)", "(igx0,igy0)" and "(ihx0,ihy0)". If "f"
for example is defined as
dimension f(-25:45,10:21)
Then "diirm1d" must be called with the following parameters
call diirm1d( f(-25,10),(45-(-25)+1),-25,45,10,21 ... )
Jean-Pierre Panziera, 1/12/93.
PPPPaaaaggggeeee 4444 [ Back ]
|