[wpimath] Add generic circular buffer class to Java (#5969)

The original is now called DoubleCircularBuffer.
This commit is contained in:
Tyler Veness
2023-11-30 21:12:23 -08:00
committed by GitHub
parent 9fa28eb07a
commit 0f9ebe92d9
7 changed files with 455 additions and 42 deletions

View File

@@ -6,7 +6,7 @@ package edu.wpi.first.math.filter;
import edu.wpi.first.math.MathSharedStore;
import edu.wpi.first.math.MathUsageId;
import edu.wpi.first.util.CircularBuffer;
import edu.wpi.first.util.DoubleCircularBuffer;
import java.util.Arrays;
import org.ejml.simple.SimpleMatrix;
@@ -48,8 +48,8 @@ import org.ejml.simple.SimpleMatrix;
* to make sure calculate() gets called at the desired, constant frequency!
*/
public class LinearFilter {
private final CircularBuffer m_inputs;
private final CircularBuffer m_outputs;
private final DoubleCircularBuffer m_inputs;
private final DoubleCircularBuffer m_outputs;
private final double[] m_inputGains;
private final double[] m_outputGains;
@@ -62,8 +62,8 @@ public class LinearFilter {
* @param fbGains The "feedback" or IIR gains.
*/
public LinearFilter(double[] ffGains, double[] fbGains) {
m_inputs = new CircularBuffer(ffGains.length);
m_outputs = new CircularBuffer(fbGains.length);
m_inputs = new DoubleCircularBuffer(ffGains.length);
m_outputs = new DoubleCircularBuffer(fbGains.length);
m_inputGains = Arrays.copyOf(ffGains, ffGains.length);
m_outputGains = Arrays.copyOf(fbGains, fbGains.length);

View File

@@ -4,7 +4,7 @@
package edu.wpi.first.math.filter;
import edu.wpi.first.util.CircularBuffer;
import edu.wpi.first.util.DoubleCircularBuffer;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -15,7 +15,7 @@ import java.util.List;
* processing, LIDAR, or ultrasonic sensors).
*/
public class MedianFilter {
private final CircularBuffer m_valueBuffer;
private final DoubleCircularBuffer m_valueBuffer;
private final List<Double> m_orderedValues;
private final int m_size;
@@ -26,7 +26,7 @@ public class MedianFilter {
*/
public MedianFilter(int size) {
// Circular buffer of values currently in the window, ordered by time
m_valueBuffer = new CircularBuffer(size);
m_valueBuffer = new DoubleCircularBuffer(size);
// List of values currently in the window, ordered by value
m_orderedValues = new ArrayList<>(size);
// Size of rolling window