void opwd21 (bool der1, bool der2 /* derivative flags */, const omni2 ap /* OPWD object */, float* xx /* input */, float* yy /* output */) /*< plane-wave destruction >*/ { int ix, iy, iw, is, i; for (iy=0; iy < ap->ny; iy++) { for (ix=0; ix < ap->nx; ix++) { i = ix + ap->nx * iy; ap->t1[iy][ix] = 0.0f; ap->t2[iy][ix] = 0.0f; yy[i] = 0.0f; } } for (iy=0; iy < ap->ny-1; iy++) { for (ix = ap->nw; ix < ap->nx-ap->nw; ix++) { i = ix + ap->nx * iy; if (der1) { aderfilter(ap->p1[i], ap->flt); } else { passfilter(ap->p1[i], ap->flt); } for (iw = 0; iw <= 2*ap->nw; iw++) { is = iw-ap->nw; ap->t1[iy][ix] += xx[i-is] * ap->flt[iw]; ap->t2[iy][ix] += xx[i+is] * ap->flt[iw]; } } } for (iy = ap->nw; iy < ap->ny-ap->nw; iy++) { for (ix=0; ix < ap->nx-1; ix++) { i = ix + ap->nx * iy; if (der2) { aderfilter(ap->p2[i], ap->flt); } else { passfilter(ap->p2[i], ap->flt); } for (iw = 0; iw <= 2*ap->nw; iw++) { is = iw-ap->nw; yy[i] += (ap->t2[iy+is][ix] - ap->t1[iy-is][ix]) * ap->flt[iw]; } } } }
void allpass1 (bool left /* left or right prediction */, bool der /* derivative flag */, const allpass ap /* PWD object */, float* xx /* input */, float* yy /* output */) /*< in-line plane-wave destruction >*/ { int ix, iy, iz, iw, is, i, nx, ny, nz, i1, i2, ip; nx = ap->nx; ny = ap->ny; nz = ap->nz; if (left) { i1=1; i2=ny; ip=-nx; } else { i1=0; i2=ny-1; ip=nx; } for (iz=0; iz < nz; iz++) { for (iy=0; iy < ny; iy++) { for (ix=0; ix < nx; ix++) { i = ix + nx * (iy + ny * iz); yy[i] = 0.; } } } for (iz=0; iz < nz; iz++) { for (iy=i1; iy < i2; iy++) { for (ix = ap->nw*ap->nj; ix < nx-ap->nw*ap->nj; ix++) { i = ix + nx * (iy + ny * iz); if (der) { aderfilter(ap->pp[i], ap->flt); } else { passfilter(ap->pp[i], ap->flt); } for (iw = 0; iw <= 2*ap->nw; iw++) { is = (iw-ap->nw)*ap->nj; yy[i] += (xx[i+is+ip] - xx[i-is]) * ap->flt[iw]; } } } } }