1 2 3 package JSci.maths.wavelet.splines; 4 5 import JSci.maths.wavelet.*; 6 import JSci.maths.*; 7 8 15 public class PiecewiseConstant extends Spline implements Filter, Cloneable { 16 protected final static int filtretype=0; 17 private double[] vecteur; 18 static final double[] vg={1d,1d}; 19 20 24 public String toString() { 25 return(ArrayMath.toString(vecteur)); 26 } 27 28 32 public boolean equals(Object a) { 33 if(a!=null && (a instanceof PiecewiseConstant) && vecteur.length==((PiecewiseConstant)a).dimension()) { 34 PiecewiseConstant iv=(PiecewiseConstant)a; 35 for(int i=0;i<vecteur.length;i++) { 36 if(vecteur[i]!=iv.getValue(i)) 37 return false; 38 } 39 return true; 40 } else 41 return false; 42 } 43 56 public int getFilterType () { 57 return(filtretype); 58 } 59 69 public int previousDimension(int k) { 70 int i=(int) Math.round(k/2d); 71 if(2*i==k) { 72 return(i); 73 } else { 74 throw new IllegalArgumentException ("Odd number of values into an even Filter."); 75 } 76 } 77 78 79 80 87 public double[] lowpass (double[] v, double[] param) { 88 return(lowpass(v)); 89 } 90 98 public double[] highpass (double[] v, double[] param) { 99 return(highpass(v)); 100 } 101 108 public double[] lowpass (double[] gete) { 109 if(gete.length<1) { 110 throw new IllegalArgumentException ("The array is not long enough : "+gete.length+" < 1"); 111 } 112 double[] sortie=new double[2*gete.length]; 113 for(int k=0;k<gete.length;k++) { 114 sortie[2*k]+=gete[k]*vg[0]; 115 sortie[2*k+1]+=gete[k]*vg[1]; 116 } 117 return(sortie); 118 } 119 120 121 129 public double[] highpass (double[] gete) { 130 if(gete.length<2) { 131 throw new IllegalArgumentException ("The array is not long enough : "+gete.length+" < 2"); 132 } 133 double[] data=Cascades.doublesample(gete); 134 int dl=data.length-1; 135 double[] sortie=new double[2*gete.length]; 136 double[] vg={-1d,1d}; 137 for(int k=0;k<=dl-1;k++) { 138 sortie[k]=ArrayMath.scalarProduct(ArrayMath.extract(k,k+1,data),vg); 139 } 140 sortie[dl]=ArrayMath.scalarProduct(ArrayMath.extract(dl-vg.length+2,dl,data),ArrayMath.extract(0,vg.length-2,vg)); 141 return(sortie); 142 } 143 144 146 public PiecewiseConstant(double[] v) { 147 vecteur=v; 148 } 149 150 152 public PiecewiseConstant() { 153 } 154 157 public Object clone() { 158 PiecewiseConstant sod=(PiecewiseConstant) super.clone(); 159 if(vecteur!=null) 160 sod.vecteur=ArrayMath.copy(this.vecteur); 161 return(sod); 162 } 163 169 public double getValue(int i) { 170 if ((i<0) || (i>vecteur.length-1)) { 171 throw new IllegalArgumentException ("Incorrect parameters : "+i+", "+vecteur.length); 172 } 173 return(vecteur[i]); 174 } 175 176 180 public void setValues(double[] v) { 181 vecteur=v; 182 } 183 184 189 public double mass(double a, double b) { 190 double mass=0; 191 for(int i=0;i<vecteur.length;i++) { 192 mass+=vecteur[i]; 193 } 194 mass=mass*Math.abs(b-a)/vecteur.length; 195 return(mass); 196 } 197 203 public void setValue(int i, double d) { 204 if (i<0) { 205 throw new IllegalArgumentException ("The parameter must be positive : "+i+" < 0"); 206 } 207 vecteur[i]=d; 208 } 209 210 214 public SumOfDiracs derive() { 215 return(derive(0,1)); 216 } 217 218 224 public SumOfDiracs derive(double a, double b) { 225 226 double[] v=new double[vecteur.length+1]; 227 for(int i=1;i<vecteur.length;i++) { 228 v[i]=(vecteur[i]-vecteur[i-1])*vecteur.length/Math.abs(b-a); 229 } 230 v[0]=0; 231 v[vecteur.length]=0; 232 SumOfDiracs d=new SumOfDiracs(v); 233 return(d); 234 } 235 236 239 public int dimension () { 240 return(vecteur.length+1); 241 } 242 246 public int dimension(int j) { 247 return(Cascades.dimensionHaar(vecteur.length, j)); 248 } 249 250 257 public double[] interpolate(int j) { 258 if (j<0) { 259 throw new IllegalArgumentException ("This parameter must be postive : "+j); 260 } 261 return(Cascades.evaluation(this,j,vecteur)); 262 } 263 264 269 public double[] evaluate (int j) { 270 return(interpolate(j)); 271 } 272 } 273 | Popular Tags |