//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package com.google.vrtoolkit.cardboard.sensors.internal;
import java.util.concurrent.TimeUnit;
public class LowPassFilter {
private static final double NANOS_TO_SECONDS;
private final double timeConstantSecs;
private final Vector3d filteredData = new Vector3d();
private long lastTimestampNs;
private int numSamples;
private final Vector3d temp = new Vector3d();
public LowPassFilter(double cutoffFrequency) {
this.timeConstantSecs = 1.0D / (6.283185307179586D * cutoffFrequency);
}
public int getNumSamples() {
return this.numSamples;
}
public void addSample(Vector3d sampleData, long timestampNs) {
this.addWeightedSample(sampleData, timestampNs, 1.0D);
}
public void addWeightedSample(Vector3d sampleData, long timestampNs, double weight) {
++this.numSamples;
if(this.numSamples == 1) {
this.filteredData.set(sampleData);
this.lastTimestampNs = timestampNs;
} else {
double weightedDeltaSecs = weight * (double)(timestampNs - this.lastTimestampNs) * NANOS_TO_SECONDS;
double alpha = weightedDeltaSecs / (this.timeConstantSecs + weightedDeltaSecs);
this.filteredData.scale(1.0D - alpha);
this.temp.set(sampleData);
this.temp.scale(alpha);
Vector3d.add(this.temp, this.filteredData, this.filteredData);
this.lastTimestampNs = timestampNs;
}
}
public Vector3d getFilteredData() {
return this.filteredData;
}
static {
NANOS_TO_SECONDS = 1.0D / (double)TimeUnit.NANOSECONDS.convert(1L, TimeUnit.SECONDS);
}
}