mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-28 02:11:43 +00:00
Clean up LinearDigitalFilter class (#782)
* Renamed LinearDigitalFilter to LinearFilter * Filter base class removed since it wasn't useful * C++: std::shared_ptr<> replaced with double parameter
This commit is contained in:
committed by
Peter Johnson
parent
311e2de4c1
commit
30e936837c
@@ -1,5 +1,5 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) 2008-2018 FIRST. All Rights Reserved. */
|
||||
/* Copyright (c) 2008-2019 FIRST. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
||||
/* the project. */
|
||||
@@ -18,16 +18,12 @@ import edu.wpi.first.wpilibj.AnalogInput;
|
||||
import edu.wpi.first.wpilibj.AnalogOutput;
|
||||
import edu.wpi.first.wpilibj.DigitalInput;
|
||||
import edu.wpi.first.wpilibj.Jaguar;
|
||||
import edu.wpi.first.wpilibj.PIDSource;
|
||||
import edu.wpi.first.wpilibj.Relay;
|
||||
import edu.wpi.first.wpilibj.Servo;
|
||||
import edu.wpi.first.wpilibj.Talon;
|
||||
import edu.wpi.first.wpilibj.Victor;
|
||||
import edu.wpi.first.wpilibj.filters.LinearDigitalFilter;
|
||||
import edu.wpi.first.wpilibj.fixtures.AnalogCrossConnectFixture;
|
||||
import edu.wpi.first.wpilibj.fixtures.DIOCrossConnectFixture;
|
||||
import edu.wpi.first.wpilibj.fixtures.FilterNoiseFixture;
|
||||
import edu.wpi.first.wpilibj.fixtures.FilterOutputFixture;
|
||||
import edu.wpi.first.wpilibj.fixtures.MotorEncoderFixture;
|
||||
import edu.wpi.first.wpilibj.fixtures.RelayCrossConnectFixture;
|
||||
import edu.wpi.first.wpilibj.fixtures.TiltPanCameraFixture;
|
||||
@@ -65,17 +61,6 @@ public final class TestBench {
|
||||
public static final int DIOCrossConnectA2 = 7;
|
||||
public static final int DIOCrossConnectA1 = 6;
|
||||
|
||||
// Filter constants
|
||||
public static final double kStdDev = 10.0;
|
||||
public static final double kFilterStep = 0.005;
|
||||
public static final double kFilterTime = 2.0;
|
||||
public static final double kSinglePoleIIRTimeConstant = 0.015915;
|
||||
public static final double kSinglePoleIIRExpectedOutput = -3.2172003;
|
||||
public static final double kHighPassTimeConstant = 0.006631;
|
||||
public static final double kHighPassExpectedOutput = 10.074717;
|
||||
public static final int kMovAvgTaps = 6;
|
||||
public static final double kMovAvgExpectedOutput = -10.191644;
|
||||
|
||||
/**
|
||||
* The Singleton instance of the Test Bench.
|
||||
*/
|
||||
@@ -343,103 +328,6 @@ public final class TestBench {
|
||||
return encoderPortPairs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a new set of objects representing a single-pole IIR filter with a noisy data source.
|
||||
*
|
||||
* @return a single-pole IIR filter with a noisy data source
|
||||
*/
|
||||
public FilterNoiseFixture<LinearDigitalFilter> getSinglePoleIIRNoiseFixture() {
|
||||
return new FilterNoiseFixture<LinearDigitalFilter>() {
|
||||
@Override
|
||||
protected LinearDigitalFilter giveFilter(PIDSource source) {
|
||||
return LinearDigitalFilter.singlePoleIIR(source,
|
||||
kSinglePoleIIRTimeConstant,
|
||||
kFilterStep);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a new set of objects representing a moving average filter with a noisy data source
|
||||
* using a linear digital filter.
|
||||
*
|
||||
* @return a moving average filter with a noisy data source
|
||||
*/
|
||||
public FilterNoiseFixture<LinearDigitalFilter> getMovAvgNoiseFixture() {
|
||||
return new FilterNoiseFixture<LinearDigitalFilter>() {
|
||||
@Override
|
||||
protected LinearDigitalFilter giveFilter(PIDSource source) {
|
||||
return LinearDigitalFilter.movingAverage(source, kMovAvgTaps);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a new set of objects representing a single-pole IIR filter with a repeatable data
|
||||
* source.
|
||||
*
|
||||
* @return a single-pole IIR filter with a repeatable data source
|
||||
*/
|
||||
public FilterOutputFixture<LinearDigitalFilter> getSinglePoleIIROutputFixture() {
|
||||
return new FilterOutputFixture<LinearDigitalFilter>(kSinglePoleIIRExpectedOutput) {
|
||||
@Override
|
||||
protected LinearDigitalFilter giveFilter() {
|
||||
m_data = new DataWrapper(getData);
|
||||
return LinearDigitalFilter.singlePoleIIR(m_data,
|
||||
kSinglePoleIIRTimeConstant,
|
||||
kFilterStep);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a new set of objects representing a high-pass filter with a repeatable data source.
|
||||
*
|
||||
* @return a high-pass filter with a repeatable data source
|
||||
*/
|
||||
public FilterOutputFixture<LinearDigitalFilter> getHighPassOutputFixture() {
|
||||
return new FilterOutputFixture<LinearDigitalFilter>(kHighPassExpectedOutput) {
|
||||
@Override
|
||||
protected LinearDigitalFilter giveFilter() {
|
||||
m_data = new DataWrapper(getData);
|
||||
return LinearDigitalFilter.highPass(m_data, kHighPassTimeConstant,
|
||||
kFilterStep);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a new set of objects representing a moving average filter with a repeatable data
|
||||
* source using a linear digital filter.
|
||||
*
|
||||
* @return a moving average filter with a repeatable data source
|
||||
*/
|
||||
public FilterOutputFixture<LinearDigitalFilter> getMovAvgOutputFixture() {
|
||||
return new FilterOutputFixture<LinearDigitalFilter>(kMovAvgExpectedOutput) {
|
||||
@Override
|
||||
protected LinearDigitalFilter giveFilter() {
|
||||
m_data = new DataWrapper(getData);
|
||||
return LinearDigitalFilter.movingAverage(m_data, kMovAvgTaps);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a new set of objects representing a moving average filter with a repeatable data
|
||||
* source using a linear digital filter.
|
||||
*
|
||||
* @return a moving average filter with a repeatable data source
|
||||
*/
|
||||
public FilterOutputFixture<LinearDigitalFilter> getPulseFixture() {
|
||||
return new FilterOutputFixture<LinearDigitalFilter>(0.0) {
|
||||
@Override
|
||||
protected LinearDigitalFilter giveFilter() {
|
||||
m_data = new DataWrapper(getPulseData);
|
||||
return LinearDigitalFilter.movingAverage(m_data, kMovAvgTaps);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the singleton of the TestBench. If the TestBench is not already allocated in constructs an
|
||||
* new instance of it. Otherwise it returns the existing instance.
|
||||
|
||||
Reference in New Issue
Block a user