home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Los Alamos National Laboratory
/
LANL_CD.ISO
/
software
/
compres
/
src
/
wavelets.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-02-11
|
6KB
|
293 lines
/****************************************************************
COPYRIGHT (C) 1992 UNIVERSITY OF CALIFORNIA
***************************************************************/
#include <math.h>
b4_const(modx2sq, rx2, sqrt2, x1)
double *modx2sq, *rx2, *sqrt2, *x1;
{
double a, b;
*sqrt2 = sqrt(2.0);
a = (-14.+(63./sqrt(15.)))/1080.;
a = exp(log(a)/3.);
b = (14.+(63./sqrt(15.)))/1080.;
b = -exp(log(b)/3.);
*x1 = a + b - (1./6.);
*rx2 = -((a+b)/2.)-(1./6.);
*modx2sq = (*rx2 * *rx2)+3.*(((a-b)*(a-b)/4.));
}
/* Family b4_4. # cos(z/2) factors with Pa, Pb: Na=4, Nb=4. */
b4_4al7(h)
double *h;
{
double modx2sq, rx2, sqrt2, x1;
b4_const(&modx2sq, &rx2, &sqrt2, &x1);
h[0] = sqrt2*(6.*x1-1.)/(16.*x1);
h[1] = sqrt2*(16.*x1-1.)/(64.*x1);
h[2] = sqrt2*(2.*x1+1.)/(32.*x1);
h[3] = sqrt2/(64.*x1);
}
b4_4ah9(g)
double *g;
{
int n, nn;
double *h;
h = (double*)malloc(5*sizeof(double));
b4_4bl9(h);
g -= 1;
nn = -1;
for(n = 1; n <= 5; n++) {
g[n]=nn*h[n-1];
nn *= -1;
}
}
b4_4bl9(h)
double *h;
{
double modx2sq, rx2, sqrt2, x1;
b4_const(&modx2sq,&rx2,&sqrt2,&x1);
h[0] = -5.*sqrt2*x1*(48.*modx2sq-16.*rx2+3.)/32.;
h[1] = -5.*sqrt2*x1*(8.*modx2sq-rx2)/8.;
h[2] = -5.*sqrt2*x1*(4.*modx2sq+4.*rx2-1.)/16.;
h[3] = -5.*sqrt2*x1*rx2/8.;
h[4] = -5.*sqrt2*x1/64.;
}
b4_4bh7(g)
double *g;
{
int n, nn;
double *h;
g--;
h = (double*)malloc(4*sizeof(double));
b4_4al7(h);
nn = -1;
for(n = 1; n <= 4; n++) {
g[n]=nn*h[n-1];
nn *= -1;
}
}
/****************************************************************/
b5_const(a0,a1,b0,b1,c,sqrt2)
double *a0, *a1, *b0, *b1, *c, *sqrt2;
{
double alpha, beta, xgamma, r, s, a;
*sqrt2=sqrt(2.);
a = cos(acos(-sqrt(15.)/8.)/3.);
a = (a*8.*sqrt(0.6)/7.)-(9./28.);
alpha = sqrt(a);
beta = 27./56.;
xgamma = -15./56.;
r = (beta+a-(xgamma/alpha))/2.;
s = (beta+a+(xgamma/alpha))/2.;
*a0 = alpha-2.5;
*a1 = -alpha-2.5;
*b0 = (25./16.)-(1.25*alpha)+r;
*b1 = (25./16.)+(1.25*alpha)+s;
*c = *a0 + *b0 + 1.;
}
b5_6al11(h)
double *h;
{
double a0, a1, b0, b1, c, sqrt2;
b5_const(&a0,&a1,&b0,&b1,&c,&sqrt2);
h[0] = sqrt2*35.*c*(15.*a1+20.*b1+13.)/512.;
h[1] = sqrt2*35.*c*(26.*a1+30.*b1+23)/1024.;
h[2] = sqrt2*35.*c*(4.*a1+3.*b1+4.)/256.;
h[3] = sqrt2*35.*c*(12.*a1+4.*b1+17.)/2048.;
h[4] = sqrt2*35.*c*(a1+3.)/1024.;
h[5] = sqrt2*35.*c/2048.;
}
b5_6ah9(g)
double *g;
{
int n, nn;
double *h;
h = (double*)malloc(5*sizeof(double));
b5_6bl9(h);
g--;
nn = -1;
for(n = 1; n <= 5; n++) {
g[n]=nn*h[n-1];
nn *= -1;
}
}
b5_6bl9(h)
double *h;
{
double a0, a1, b0, b1, c, sqrt2;
b5_const(&a0,&a1,&b0,&b1,&c,&sqrt2);
h[0] = sqrt2*(8.*a0+12.*b0+7.)/(32.*c);
h[1] = sqrt2*(7.*a0+8.*b0+6.)/(32.*c);
h[2] = sqrt2*(2.*a0+b0+2.)/(16.*c);
h[3] = sqrt2*(a0+2.)/(32.*c);
h[4] = sqrt2/(64.*c);
}
b5_6bh11(g)
double *g;
{
int n, nn;
double *h;
h = (double*)malloc(6*sizeof(double));
b5_6al11(h);
g--;
nn = -1;
for(n = 1; n <= 6; n++) {
g[n]=nn*h[n-1];
nn *= -1;
}
}
/****************************************************************/
b5_4al9(h)
double *h;
{
double a0, a1, b0, b1, c, sqrt2;
b5_const(&a0,&a1,&b0,&b1,&c,&sqrt2);
h[0] = sqrt2*35.*c*(8.*a1+12.*b1+7.)/256.;
h[1] = sqrt2*35.*c*(7.*a1+8.*b1+6.)/256.;
h[2] = sqrt2*35.*c*(2.*a1+b1+2.)/128.;
h[3] = sqrt2*35.*c*(a1+2.)/256.;
h[4] = sqrt2*35.*c/512.;
}
b5_4ah11(g)
double *g;
{
int n, nn;
double *h;
h = (double*)malloc(6*sizeof(double));
b5_4bl11(h);
g--;
nn = -1;
for(n = 1; n <= 6; n++) {
g[n]=nn*h[n-1];
nn *= -1;
}
}
b5_4bl11(h)
double *h;
{
double a0, a1, b0, b1, c, sqrt2;
b5_const(&a0,&a1,&b0,&b1,&c,&sqrt2);
h[0] = sqrt2*(15.*a0+20.*b0+13.)/(64.*c);
h[1] = sqrt2*(26.*a0+30.*b0+23)/(128.*c);
h[2] = sqrt2*(4.*a0+3.*b0+4.)/(32.*c);
h[3] = sqrt2*(12.*a0+4.*b0+17.)/(256.*c);
h[4] = sqrt2*(a0+3.)/(128.*c);
h[5] = sqrt2/(256.*c);
}
b5_4bh9(g)
double *g;
{
int n, nn;
double *h;
h = (double*)malloc(5*sizeof(double));
b5_4al9(h);
nn = -1;
g--;
for(n = 1; n <= 5; n++) {
g[n]=nn*h[n-1];
nn *= -1;
}
}
/****************************************************************/
b5_5al10(h)
double *h;
{
double a0, a1, b0, b1, c, sqrt2;
b5_const(&a0, &a1, &b0, &b1, &c, &sqrt2);
h--;
h[1] = sqrt2*35.*c*(15.*a1+20.*b1+13.)/512.;
h[2] = sqrt2*35.*c*(11.*a1+10.*b1+10.)/512.;
h[3] = sqrt2*35.*c*(5.*a1+2.*b1+6.)/512.;
h[4] = sqrt2*35.*c*(2.*a1+5.)/1024.;
h[5] = sqrt2*35.*c/1024.;
}
b5_5ah10(g)
double *g;
{
int n, nn;
double *h;
h = (double*)malloc(5*sizeof(double));
b5_5bl10(h);
h--;
nn = -1;
g--;
for(n = 1; n <= 5; n++) {
g[n]=nn*h[n];
nn *= -1;
}
}
b5_5bl10(h)
double *h;
{
double a0, a1, b0, b1, c, sqrt2;
b5_const(&a0, &a1, &b0, &b1, &c, &sqrt2);
h--;
h[1] = sqrt2*(15.*a0+20.*b0+13.)/(64.*c);
h[2] = sqrt2*(11.*a0+10.*b0+10.)/(64.*c);
h[3] = sqrt2*(5.*a0+2.*b0+6.)/(64.*c);
h[4] = sqrt2*(2.*a0+5.)/(128.*c);
h[5] = sqrt2/(128.*c);
}
b5_5bh10(g)
double *g;
{
int n, nn;
double *h;
h = (double*)malloc(5*sizeof(double));
b5_5al10(h);
h--;
g--;
nn = -1;
for(n = 1; n <= 5; n++) {
g[n]=nn*h[n];
nn *= -1;
}
}