12 #include <initializer_list>
15 #include <hal/FRCUsageReporting.h>
16 #include <units/units.h>
17 #include <wpi/ArrayRef.h>
18 #include <wpi/circular_buffer.h>
82 : m_inputs(ffGains.size()),
83 m_outputs(fbGains.size()),
84 m_inputGains(ffGains),
85 m_outputGains(fbGains) {
86 static int instances = 0;
88 HAL_Report(HALUsageReporting::kResourceType_LinearFilter, instances);
98 std::initializer_list<double> fbGains)
100 wpi::makeArrayRef(fbGains.begin(), fbGains.end())) {}
115 units::second_t period) {
116 double gain = std::exp(-period.to<
double>() / timeConstant);
132 double gain = std::exp(-period.to<
double>() / timeConstant);
148 std::vector<double> gains(taps, 1.0 / taps);
171 m_inputs.push_front(input);
174 for (
size_t i = 0; i < m_inputGains.size(); i++) {
175 retVal += m_inputs[i] * m_inputGains[i];
177 for (
size_t i = 0; i < m_outputGains.size(); i++) {
178 retVal -= m_outputs[i] * m_outputGains[i];
182 m_outputs.push_front(retVal);
190 std::vector<double> m_inputGains;
191 std::vector<double> m_outputGains;
static LinearFilter< T > MovingAverage(int taps)
Creates a K-tap FIR moving average filter of the form: y[n] = 1/k * (x[k] + x[k-1] + … + x[0])
Definition: LinearFilter.h:145
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
Definition: ArrayRef.h:42
LinearFilter(wpi::ArrayRef< double > ffGains, wpi::ArrayRef< double > fbGains)
Create a linear FIR or IIR filter.
Definition: LinearFilter.h:81
WPILib C++ utilities (wpiutil) namespace.
Definition: EventLoopRunner.h:17
T Calculate(T input)
Calculates the next value of the filter.
Definition: LinearFilter.h:167
static LinearFilter< T > SinglePoleIIR(double timeConstant, units::second_t period)
Creates a one-pole IIR low-pass filter of the form: y[n] = (1 - gain) * x[n] + gain * y[n-1] where ...
Definition: LinearFilter.h:114
This is a simple circular buffer so we don't need to "bucket brigade" copy old values.
Definition: circular_buffer.h:20
static LinearFilter< T > HighPass(double timeConstant, units::second_t period)
Creates a first-order high-pass filter of the form: y[n] = gain * x[n] + (-gain) * x[n-1] + gain * y...
Definition: LinearFilter.h:131
void Reset()
Reset the filter state.
Definition: LinearFilter.h:155
A class that enforces constraints on the differential drive kinematics.
Definition: SPIAccelerometerSim.h:16
This class implements a linear, digital filter.
Definition: LinearFilter.h:73
LinearFilter(std::initializer_list< double > ffGains, std::initializer_list< double > fbGains)
Create a linear FIR or IIR filter.
Definition: LinearFilter.h:97