fork(21) download
  1. /**
  2.  * dwt53.c - Fast discrete biorthogonal CDF 5/3 wavelet forward and inverse transform (lifting implementation)
  3.  *
  4.  * This code is provided "as is" and is given for educational purposes.
  5.  * 2007 - Gregoire Pau - gregoire.pau@ebi.ac.uk
  6.  */
  7.  
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <math.h>
  11. #include <iostream.h>
  12. double *tempbank=0;
  13.  
  14. /**
  15.  * fwt53 - Forward biorthogonal 5/3 wavelet transform (lifting implementation)
  16.  *
  17.  * x is an input signal, which will be replaced by its output transform.
  18.  * n is the length of the signal, and must be a power of 2.
  19.  *
  20.  * The first half part of the output signal contains the approximation coefficients.
  21.  * The second half part contains the detail coefficients (aka. the wavelets coefficients).
  22.  *
  23.  * See also iwt53.
  24.  */
  25. void fwt53(double* x,int n) {
  26. double a;
  27. int i;
  28.  
  29. // Predict 1
  30. a=-0.5;
  31. for (i=1;i<n-2;i+=2) {
  32. x[i]+=a*(x[i-1]+x[i+1]);
  33. }
  34. x[n-1]+=2*a*x[n-2];
  35.  
  36. // Update 1
  37. a=0.25;
  38. for (i=2;i<n;i+=2) {
  39. x[i]+=a*(x[i-1]+x[i+1]);
  40. }
  41. x[0]+=2*a*x[1];
  42.  
  43. // Scale
  44. a=sqrt(2.0);
  45. for (i=0;i<n;i++) {
  46. if (i%2) x[i]*=a;
  47. else x[i]/=a;
  48. }
  49.  
  50. // Pack
  51. if (tempbank==0) tempbank=(double *)malloc(n*sizeof(double));
  52. for (i=0;i<n;i++) {
  53. if (i%2==0) tempbank[i/2]=x[i];
  54. else tempbank[n/2+i/2]=x[i];
  55. }
  56. for (i=0;i<n;i++) x[i]=tempbank[i];
  57. }
  58.  
  59. /**
  60.  * iwt53 - Inverse biorthogonal 5/3 wavelet transform
  61.  *
  62.  * This is the inverse of fwt53 so that iwt53(fwt53(x,n),n)=x for every signal x of length n.
  63.  *
  64.  * See also fwt53.
  65.  */
  66. void iwt53(double* x,int n) {
  67. double a;
  68. int i;
  69.  
  70. // Unpack
  71. if (tempbank==0) tempbank=(double *)malloc(n*sizeof(double));
  72. for (i=0;i<n/2;i++) {
  73. tempbank[i*2]=x[i];
  74. tempbank[i*2+1]=x[i+n/2];
  75. }
  76. for (i=0;i<n;i++) x[i]=tempbank[i];
  77.  
  78. // Undo scale
  79. a=1/sqrt(2.0);
  80. for (i=0;i<n;i++) {
  81. if (i%2) x[i]*=a;
  82. else x[i]/=a;
  83. }
  84.  
  85. // Undo update 1
  86. a=-0.25;
  87. for (i=2;i<n;i+=2) {
  88. x[i]+=a*(x[i-1]+x[i+1]);
  89. }
  90. x[0]+=2*a*x[1];
  91.  
  92. // Undo predict 1
  93. a=0.5;
  94. for (i=1;i<n-2;i+=2) {
  95. x[i]+=a*(x[i-1]+x[i+1]);
  96. }
  97. x[n-1]+=2*a*x[n-2];
  98. }
  99.  
  100. int main() {
  101. double x[32];
  102. int i;
  103.  
  104. // Makes a fancy cubic signal
  105. for (i=0;i<32;i++) x[i]=i; //5+i+0.4*i*i-0.02*i*i*i;
  106.  
  107. // Prints original sigal x
  108. printf("Original signal:\n");
  109. for (i=0;i<32;i++) printf("x[%d]=%f\n",i,x[i]);
  110. printf("\n");
  111.  
  112. // Do the forward 5/3 transform
  113. fwt53(x,32);
  114.  
  115. // Prints the wavelet coefficients
  116. printf("Wavelets coefficients:\n");
  117. for (i=0;i<32;i++) printf("wc[%d]=%f\n",i,x[i]);
  118. printf("\n");
  119.  
  120. // Do the inverse 5/3 transform
  121. iwt53(x,32);
  122.  
  123. // Prints the reconstructed signal
  124. printf("Reconstructed signal:\n");
  125. for (i=0;i<32;i++) printf("xx[%d]=%f\n",i,x[i]);
  126.  
  127. cin>>i;
  128. }
  129.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
Main.java:8: error: illegal character: \35
#include <stdio.h>
^
Main.java:8: error: class, interface, or enum expected
#include <stdio.h>
         ^
Main.java:9: error: illegal character: \35
#include <stdlib.h>
^
Main.java:10: error: illegal character: \35
#include <math.h>
^
Main.java:11: error: illegal character: \35
#include <iostream.h>
^
Main.java:25: error: class, interface, or enum expected
void fwt53(double* x,int n) {
^
Main.java:27: error: class, interface, or enum expected
  int i;
  ^
Main.java:30: error: class, interface, or enum expected
  a=-0.5;
  ^
Main.java:31: error: class, interface, or enum expected
  for (i=1;i<n-2;i+=2) {
  ^
Main.java:31: error: class, interface, or enum expected
  for (i=1;i<n-2;i+=2) {
           ^
Main.java:31: error: class, interface, or enum expected
  for (i=1;i<n-2;i+=2) {
                 ^
Main.java:33: error: class, interface, or enum expected
  } 
  ^
Main.java:37: error: class, interface, or enum expected
  a=0.25;
  ^
Main.java:38: error: class, interface, or enum expected
  for (i=2;i<n;i+=2) {
  ^
Main.java:38: error: class, interface, or enum expected
  for (i=2;i<n;i+=2) {
           ^
Main.java:38: error: class, interface, or enum expected
  for (i=2;i<n;i+=2) {
               ^
Main.java:40: error: class, interface, or enum expected
  }
  ^
Main.java:44: error: class, interface, or enum expected
  a=sqrt(2.0);
  ^
Main.java:45: error: class, interface, or enum expected
  for (i=0;i<n;i++) {
  ^
Main.java:45: error: class, interface, or enum expected
  for (i=0;i<n;i++) {
           ^
Main.java:45: error: class, interface, or enum expected
  for (i=0;i<n;i++) {
               ^
Main.java:47: error: class, interface, or enum expected
    else x[i]/=a;
    ^
Main.java:48: error: class, interface, or enum expected
  }
  ^
Main.java:52: error: class, interface, or enum expected
  for (i=0;i<n;i++) {
  ^
Main.java:52: error: class, interface, or enum expected
  for (i=0;i<n;i++) {
           ^
Main.java:52: error: class, interface, or enum expected
  for (i=0;i<n;i++) {
               ^
Main.java:54: error: class, interface, or enum expected
    else tempbank[n/2+i/2]=x[i];
    ^
Main.java:55: error: class, interface, or enum expected
  }
  ^
Main.java:56: error: class, interface, or enum expected
  for (i=0;i<n;i++) x[i]=tempbank[i];
           ^
Main.java:56: error: class, interface, or enum expected
  for (i=0;i<n;i++) x[i]=tempbank[i];
               ^
Main.java:57: error: class, interface, or enum expected
}
^
Main.java:68: error: class, interface, or enum expected
  int i;
  ^
Main.java:71: error: class, interface, or enum expected
  if (tempbank==0) tempbank=(double *)malloc(n*sizeof(double));
  ^
Main.java:72: error: class, interface, or enum expected
  for (i=0;i<n/2;i++) {
  ^
Main.java:72: error: class, interface, or enum expected
  for (i=0;i<n/2;i++) {
           ^
Main.java:72: error: class, interface, or enum expected
  for (i=0;i<n/2;i++) {
                 ^
Main.java:74: error: class, interface, or enum expected
    tempbank[i*2+1]=x[i+n/2];
    ^
Main.java:75: error: class, interface, or enum expected
  }
  ^
Main.java:76: error: class, interface, or enum expected
  for (i=0;i<n;i++) x[i]=tempbank[i];
           ^
Main.java:76: error: class, interface, or enum expected
  for (i=0;i<n;i++) x[i]=tempbank[i];
               ^
Main.java:79: error: class, interface, or enum expected
  a=1/sqrt(2.0);
  ^
Main.java:80: error: class, interface, or enum expected
  for (i=0;i<n;i++) {
  ^
Main.java:80: error: class, interface, or enum expected
  for (i=0;i<n;i++) {
           ^
Main.java:80: error: class, interface, or enum expected
  for (i=0;i<n;i++) {
               ^
Main.java:82: error: class, interface, or enum expected
    else x[i]/=a;
    ^
Main.java:83: error: class, interface, or enum expected
  }
  ^
Main.java:87: error: class, interface, or enum expected
  for (i=2;i<n;i+=2) {
  ^
Main.java:87: error: class, interface, or enum expected
  for (i=2;i<n;i+=2) {
           ^
Main.java:87: error: class, interface, or enum expected
  for (i=2;i<n;i+=2) {
               ^
Main.java:89: error: class, interface, or enum expected
  }
  ^
Main.java:93: error: class, interface, or enum expected
  a=0.5;
  ^
Main.java:94: error: class, interface, or enum expected
  for (i=1;i<n-2;i+=2) {
  ^
Main.java:94: error: class, interface, or enum expected
  for (i=1;i<n-2;i+=2) {
           ^
Main.java:94: error: class, interface, or enum expected
  for (i=1;i<n-2;i+=2) {
                 ^
Main.java:96: error: class, interface, or enum expected
  }
  ^
Main.java:98: error: class, interface, or enum expected
}
^
Main.java:102: error: class, interface, or enum expected
  int i;
  ^
Main.java:105: error: class, interface, or enum expected
  for (i=0;i<32;i++) x[i]=i; //5+i+0.4*i*i-0.02*i*i*i;
  ^
Main.java:105: error: class, interface, or enum expected
  for (i=0;i<32;i++) x[i]=i; //5+i+0.4*i*i-0.02*i*i*i;
           ^
Main.java:105: error: class, interface, or enum expected
  for (i=0;i<32;i++) x[i]=i; //5+i+0.4*i*i-0.02*i*i*i;
                ^
Main.java:108: error: class, interface, or enum expected
  printf("Original signal:\n");
  ^
Main.java:109: error: class, interface, or enum expected
  for (i=0;i<32;i++) printf("x[%d]=%f\n",i,x[i]);
  ^
Main.java:109: error: class, interface, or enum expected
  for (i=0;i<32;i++) printf("x[%d]=%f\n",i,x[i]);
           ^
Main.java:109: error: class, interface, or enum expected
  for (i=0;i<32;i++) printf("x[%d]=%f\n",i,x[i]);
                ^
Main.java:110: error: class, interface, or enum expected
  printf("\n");
  ^
Main.java:113: error: class, interface, or enum expected
  fwt53(x,32);
  ^
Main.java:116: error: class, interface, or enum expected
  printf("Wavelets coefficients:\n");
  ^
Main.java:117: error: class, interface, or enum expected
  for (i=0;i<32;i++) printf("wc[%d]=%f\n",i,x[i]);
  ^
Main.java:117: error: class, interface, or enum expected
  for (i=0;i<32;i++) printf("wc[%d]=%f\n",i,x[i]);
           ^
Main.java:117: error: class, interface, or enum expected
  for (i=0;i<32;i++) printf("wc[%d]=%f\n",i,x[i]);
                ^
Main.java:118: error: class, interface, or enum expected
  printf("\n");
  ^
Main.java:121: error: class, interface, or enum expected
  iwt53(x,32); 
  ^
Main.java:124: error: class, interface, or enum expected
  printf("Reconstructed signal:\n");
  ^
Main.java:125: error: class, interface, or enum expected
  for (i=0;i<32;i++) printf("xx[%d]=%f\n",i,x[i]);
  ^
Main.java:125: error: class, interface, or enum expected
  for (i=0;i<32;i++) printf("xx[%d]=%f\n",i,x[i]);
           ^
Main.java:125: error: class, interface, or enum expected
  for (i=0;i<32;i++) printf("xx[%d]=%f\n",i,x[i]);
                ^
Main.java:127: error: class, interface, or enum expected
  cin>>i;
  ^
Main.java:128: error: class, interface, or enum expected
}
^
78 errors
stdout
Standard output is empty