1 2 3 package JSci.maths.wavelet.splines; 4 5 import JSci.maths.wavelet.*; 6 import JSci.maths.*; 7 8 15 public class SumOfDiracs extends Spline implements Filter, Cloneable { 16 protected final static int filtretype=-1; 17 private double[] vecteur; 18 31 public int getFilterType () { 32 return(filtretype); 33 } 34 35 39 public String toString() { 40 return(ArrayMath.toString(vecteur)); 41 } 42 46 public boolean equals(Object a) { 47 if(a!=null && (a instanceof SumOfDiracs) && vecteur.length==((SumOfDiracs)a).dimension()) { 48 SumOfDiracs iv=(SumOfDiracs)a; 49 for(int i=0;i<vecteur.length;i++) { 50 if(vecteur[i]!=iv.getValue(i)) 51 return false; 52 } 53 return true; 54 } else 55 return false; 56 } 57 58 61 public Object clone() { 62 SumOfDiracs sod=(SumOfDiracs) super.clone(); 63 if(vecteur!=null) 64 sod.vecteur=ArrayMath.copy(this.vecteur); 65 return(sod); 66 } 67 68 69 80 public int previousDimension (int k) { 81 int i=(int) Math.round((k+1)/2d); 82 if(2*i-1==k) { 83 return(i); 84 } else { 85 throw new IllegalArgumentException ("Even number of values into an odd Filter! Change the number of data values/of iterations."); 86 } 87 } 88 89 96 public double[] lowpass (double[] v, double[] param) { 97 return(lowpass(v)); 98 } 99 100 108 public double[] highpass (double[] v, double[] param) { 109 return(highpass(v)); 110 } 111 112 119 public double[] lowpass (double[] gete) { 120 if(gete.length<2) { 121 throw new IllegalArgumentException ("The array is not long enough : "+gete.length+" < 2"); 122 } 123 double[] data=Cascades.oversample(gete); 124 int dl=data.length-1; 125 double[] sortie=new double[2*gete.length-1]; 126 double[] vg={0,1d,0}; 127 double[] v0={1d,0}; 128 for(int k=1;k<=dl-1;k++) { 129 sortie[k]=ArrayMath.scalarProduct(ArrayMath.extract(k-1,k+1,data),vg); 130 } 131 sortie[0]=ArrayMath.scalarProduct(ArrayMath.extract(0,1,data),v0); 132 sortie[dl]=ArrayMath.scalarProduct(ArrayMath.extract(dl,dl-1,data),v0); 133 return(sortie); 134 } 135 136 144 public double[] highpass (double[] gete) { 145 return(lowpass(gete)); 146 } 147 148 150 public SumOfDiracs(double[] v) { 151 vecteur=v; 152 } 153 155 public SumOfDiracs() { 156 157 } 158 159 165 public double getValue(int i) { 166 if ((i<0) || (i>vecteur.length-1)) { 167 throw new IllegalArgumentException ("Incorrect parameters : "+i+", "+vecteur.length); 168 } 169 return(vecteur[i]); 170 } 171 175 public void setValues(double[] v) { 176 vecteur=v; 177 } 178 179 184 public double mass(double a, double b) { 185 double mass=0; 186 for(int i=0;i<vecteur.length;i++) { 187 mass+=vecteur[i]; 188 } 189 mass=mass*Math.abs(b-a)/vecteur.length; 190 return(mass); 191 } 192 193 194 195 201 public void setValue(int i, double d) { 202 if (i<0) { 203 throw new IllegalArgumentException ("The parameter must be positive : "+i); 204 } 205 vecteur[i]=d; 206 } 207 208 211 public int dimension () { 212 return(vecteur.length); 213 } 214 215 219 public int dimension(int j) { 220 return(Cascades.dimension(vecteur.length, j)); 221 } 222 223 230 public double[] interpolate(int j) { 231 if (j<0) { 232 throw new IllegalArgumentException ("This parameter must be postive : "+j); 233 } 234 return(Cascades.evaluation(this,j,vecteur)); 235 } 236 237 238 243 public double[] evaluate (int j) { 244 return(interpolate(j)); 245 } 246 } 247 | Popular Tags |