All Downloads are FREE. Search and download functionalities are using the official Maven repository.

tests.be.tarsos.dsp.test.ImpulseDetection Maven / Gradle / Ivy

The newest version!
package be.tarsos.dsp.test;

import be.tarsos.dsp.resample.Resampler;
import be.tarsos.dsp.wavelet.lift.Daubechies4Wavelet;

public class ImpulseDetection {

	public static void main(String[] args) {
		
		double sampleRate = 2000.0;
		double frequency = 8.0;
		double amplitude = 0.8;
		
		double twoPiF = 2 * Math.PI * frequency;
		
		float[] data = new float[512];
		for(int sample = 0 ; sample < data.length ; sample++){
			double time = sample / sampleRate;
			data[sample] = (float) (amplitude * Math.sin(twoPiF * time));
		}
		
		for(int sample = 0 ; sample < data.length ; sample++){
			//System.out.println(data[sample]);
		}
		
		/*
		float amount = 10;
		for(int sample = 205 ; sample < 215 ; sample++){
			data[sample] = (sample-205)/amount;
		}
		*/
		data[62] = 1.0f;
		
		Daubechies4Wavelet dwt = new Daubechies4Wavelet();
		dwt.forwardTrans(data);
		
		float[] levelFive = mra(data,5);//31.25 - 62.5
		float[] levelFour = mra(data,4);//62.5-125
		float[] levelThree = mra(data,3);//125-250
		float[] levelTwo = mra(data,2);//250-500Hz
		float[] levelOne = mra(data,1);//500-100Hz
		
		
		dwt.inverseTrans(data);
		normalize(data);
		for(int i = 0 ; i < levelFive.length ; i++){
			System.out.println(i+";"+data[i]+";"+levelFive[i]+";"+levelFour[i]+";"+levelThree[i]+";"+levelTwo[i]+";"+levelOne[i]);
		}
		
		double maxValue = 0;
		int maxIndex = 0;
		for(int i = 0 ; i < levelOne.length ; i++){
			if(Math.abs(levelOne[i])>maxValue){
				maxIndex = i;
				maxValue = Math.abs(levelOne[i]);
			}
		}
		System.out.println("Anomaly at " + maxIndex);
	}
	
	
	
	private static float[] mra(float[] data,int level){
		int length = (int)Math.pow(2,level);
		int startIndex = (int) (data.length/Math.pow(2,level));
		int stopIndex = (int) (data.length/Math.pow(2,level-1));
		float[] part = new float[stopIndex-startIndex];
		int j = 0;
		for(int i = startIndex ; i < stopIndex ;i++){
			part[j] = -1 * data[i];
			j++;
		}
		normalize(part);
		
		float factor =  data.length/(float)part.length;
		Resampler r= new Resampler(false,factor,factor);
		float[] out = new float[(int) (part.length * factor)];
		r.process(factor, part, 0, part.length, false, out, 0, out.length);
		
		float [] mra = new float[data.length];
		j=0;
		for(int i = 0 ; i < out.length ; i++){
			if((i+length/2)%length==0){
				mra[i] = part[j];
				j++;
			}
		}
		return mra;
	}
	
	private static void normalize(float[] data){
		float maxValue = 0;
		for(int i = 0 ; i < data.length ;i++){
			maxValue = Math.max(Math.abs(data[i]),maxValue);
		}
		for(int i = 0 ; i < data.length ;i++){
			data[i]=data[i]/maxValue;
		}
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy