Cpwt::Cpwt (int n) //## begin Cpwt::Cpwt%3CB0F021027D.hasinit preserve=no //## end Cpwt::Cpwt%3CB0F021027D.hasinit //## begin Cpwt::Cpwt%3CB0F021027D.initialization preserve=yes //## end Cpwt::Cpwt%3CB0F021027D.initialization { //## begin Cpwt::Cpwt%3CB0F021027D.body preserve=yes if ( n == 4 || n == 20 ) pwtset (n); else pwtset (12); //## end Cpwt::Cpwt%3CB0F021027D.body }
int main(void) { unsigned long i,j,l,nerror=0,ntot=NX*NY; float *a,*aorg; static unsigned long ndim[]={0,NX,NY}; aorg=vector(1,ntot); a=vector(1,ntot); pwtset(12); for (i=1;i<=NX;i++) for (j=1;j<=NY;j++) { l=i+(j-1)*NX; aorg[l]=a[l]=(i == j ? -1.0 : 1.0/sqrt(fabs((float)(i-j)))); } wtn(a,ndim,2,1,pwt); /* here, one might set the smallest components to zero, encode and transmit the remaining components as a compressed form of the "image" */ wtn(a,ndim,2,-1,pwt); for (l=1;l<=ntot;l++) { if (fabs(aorg[l]-a[l]) >= EPS) { printf("Compare Error at element %ld\n",l); nerror++; } } if (nerror) printf("Number of comparision errors: %ld\n",nerror); else printf("transform-inverse transform check OK\n"); free_vector(a,1,ntot); free_vector(aorg,1,ntot); return nerror; }
//----------------------------------------------------------------------------- // name: bool setup( void ) // desc: set up original wavelet trees, calculate threshold, initialize root // of new tree //----------------------------------------------------------------------------- bool Treesynth::setup( void ) { // Get value arrays of trees float * tnew_values = tnew->values(); float * tree_values = tree->values(); // Wavelet decompositions pwtset( 10 ); wt1( tree_values, tree->getSize(), 1, *pwt ); if( lefttree ) { float * lefttree_values = lefttree->values(); wt1( lefttree_values, ( 1 << tree->getSize() ), 1, *pwt ); // pow( 2, tree->getSize() ) } // Calculate nearness threshold (epsilon) and print related values std::cout << "p: " << percentage << std::endl; std::cout << "epsilon: " << (epsilon = FindEpsilon( tree, tree->getSize(), percentage )) << std::endl; std::cout << "kfactor: " << kfactor << std::endl; // Copy root of tnew, since that's always the same tnew_values[0] = tree_values[0]; // approximation tnew_values[1] = tree_values[1]; // root // Return return true; }
int main(void) { unsigned long i,nused; int itest,k; float *u,*v,*w,frac,thresh,tmp; u=vector(1,NMAX); v=vector(1,NMAX); w=vector(1,NMAX); for (;;) { printf("Enter k (4, -4, 12, or 20) and frac (0.0 to 1.0):\n"); if (scanf("%d %f",&k,&frac) == EOF) break; frac=FMIN(1.0,FMAX(0.0,frac)); itest=(k == -4 ? 1 : 0); if (k < 0) k = -k; if (k != 4 && k != 12 && k != 20) continue; for (i=1;i<=NMAX;i++) w[i]=v[i]=(i > NCEN-NWID && i < NCEN+NWID ? ((float)(i-NCEN+NWID)*(float)(NCEN+NWID-i))/(NWID*NWID) : 0.0); if (!itest) pwtset(k); wt1(v,NMAX,1,itest ? daub4 : pwt); for (i=1;i<=NMAX;i++) u[i]=fabs(v[i]); thresh=select((int)((1.0-frac)*NMAX),NMAX,u); nused=0; for (i=1;i<=NMAX;i++) { if (fabs(v[i]) <= thresh) v[i]=0.0; else nused++; } wt1(v,NMAX,-1,itest ? daub4 : pwt); for (thresh=0.0,i=1;i<=NMAX;i++) if ((tmp=fabs(v[i]-w[i])) > thresh) thresh=tmp; printf("k,NMAX,nused= %d %d %d\n",k,NMAX,nused); printf("discrepancy= %12.6f\n",thresh); } free_vector(w,1,NMAX); free_vector(v,1,NMAX); free_vector(u,1,NMAX); return 0; }