1 package JSci.maths.wavelet.daubechies2; 2 3 import JSci.maths.wavelet.FWT; 4 5 16 public final class FastDaubechies2 extends FWT { 17 static final private float root3 = (float)(Math.sqrt(3.0)); 18 static final private float normalizer = (float)(Math.pow(2d,-.5d)); 19 static final float[] scale = {(1f+(root3))*normalizer/4f,(3f+(root3))*normalizer/4f,(3f+(-1*(root3)))*normalizer/4f,(1f+(-1*(root3)))*normalizer/4f}; 20 static final float[] wavelet = {-(1f+(-1*(root3)))*normalizer/4f,(3f+(-1*(root3)))*normalizer/4f,-(3f+(root3))*normalizer/4f,(1f+(root3))*normalizer/4f}; 21 22 23 public FastDaubechies2() { 24 } 25 26 public static void transform (float[] v,int last) { 27 float[] ans=new float[last]; 28 final int half=last/2; 29 try { 30 for(int k=0;;k++) { 31 ans[k+half]=v[(2*k+0)]*wavelet[0]+v[(2*k+1)]*wavelet[1]+v[(2*k+2)]*wavelet[2]+v[(2*k+3)]*wavelet[3]; 32 ans[k]=v[(2*k+0)]*scale[0]+v[(2*k+1)]*scale[1]+v[(2*k+2)]*scale[2]+v[(2*k+3)]*scale[3]; 33 } 34 } catch (IndexOutOfBoundsException e) {} 35 ans[last-1]=v[last-2]*wavelet[0]+v[last-1]*wavelet[1]+v[0]*wavelet[2]+v[1]*wavelet[3]; 36 ans[half-1]=v[last-2]*scale[0]+v[last-1]*scale[1]+v[0]*scale[2]+v[1]*scale[3]; 37 38 System.arraycopy(ans,0,v,0,last); 39 } 40 41 public void transform (float[] v) { 42 int last; 43 for (last=v.length;last>4;last/=2) { 44 transform(v,last); 45 } 46 if(last!=4) 47 System.err.println("Careful! this should be a power of 2 : "+v.length); 48 } 49 50 public void invTransform(float[] v) { 51 int last; 52 for (last=4;2*last<=v.length;last*=2) { 53 invTransform(v,last); 54 } 55 if(last!=v.length) 56 System.err.println("Careful! this should be a power of 2 : "+v.length); 57 58 } 59 60 public static void invTransform (float[] v, int last) { 61 int ResultingLength=2*last; 62 float[] ans=new float[ResultingLength]; 63 try { 64 for(int k=0;;k++) { 65 ans[(2*k+3)]+=scale[3]*v[k]+wavelet[3]*v[k+last] ; 66 ans[(2*k+2)]+=scale[2]*v[k]+wavelet[2]*v[k+last] ; 67 ans[(2*k+1)]+=scale[1]*v[k]+wavelet[1]*v[k+last] ; 68 ans[(2*k+0)]+=scale[0]*v[k]+wavelet[0]*v[k+last] ; 69 } 70 } catch (IndexOutOfBoundsException e) {} 71 ans[ResultingLength-2]+=scale[0]*v[last-1]+wavelet[0]*v[ResultingLength-1] ; 72 ans[ResultingLength-1]+=scale[1]*v[last-1]+wavelet[1]*v[ResultingLength-1] ; 73 ans[0]+=scale[2]*v[last-1]+wavelet[2]*v[ResultingLength-1] ; 74 ans[1]+=scale[3]*v[last-1]+wavelet[3]*v[ResultingLength-1] ; 75 System.arraycopy(ans,0,v,0,ans.length); 76 } 77 } 78 79
| Popular Tags
|