package com.musicg.processor;
import com.musicg.math.rank.ArrayRankDouble;
public class RobustIntensityProcessor implements IntensityProcessor{
private double[][] intensities;
private int numPointsPerFrame;
public RobustIntensityProcessor(double[][] intensities, int numPointsPerFrame){
this.intensities=intensities;
this.numPointsPerFrame=numPointsPerFrame;
}
public void execute(){
int numX=intensities.length;
int numY=intensities[0].length;
double[][] processedIntensities=new double[numX][numY];
for (int i=0; i<numX; i++){
double[] tmpArray=new double[numY];
System.arraycopy(intensities[i], 0, tmpArray, 0, numY);
// pass value is the last some elements in sorted array
ArrayRankDouble arrayRankDouble=new ArrayRankDouble();
double passValue=arrayRankDouble.getNthOrderedValue(tmpArray,numPointsPerFrame,false);
// only passed elements will be assigned a value
for (int j=0; j<numY; j++){
if (intensities[i][j]>=passValue){
processedIntensities[i][j]=intensities[i][j];
}
}
}
intensities=processedIntensities;
}
public double[][] getIntensities(){
return intensities;
}
}