blob: dce60fb04cb8cf83184a7ff414bd2daa86f064a5 [file] [log] [blame]
Daniel Petti339f88a2015-02-07 22:51:20 -08001#ifndef FRC971_CONTROL_LOOPS_GAUSSIAN_NOISE_H_
2#define FRC971_CONTROL_LOOPS_GAUSSIAN_NOISE_H_
3
4#include <unistd.h>
5
6#include <memory>
7#include <random>
8
9namespace frc971 {
10namespace control_loops {
11
12class GaussianNoise {
13 public:
14 // seed: The seed for the random number generator.
15 // stddev: The standard deviation of the distribution.
16 GaussianNoise(unsigned int seed, double stddev);
17
18 // Returns a version of the sample with gaussian noise added in.
19 double AddNoiseToSample(double sample);
20
21 // Sets the standard deviation of the gaussian noise.
Philipp Schrader790cb542023-07-05 21:06:52 -070022 inline void set_standard_deviation(double stddev) { stddev_ = stddev; }
Daniel Petti339f88a2015-02-07 22:51:20 -080023
24 private:
25 double stddev_;
26
27 std::default_random_engine generator_;
28 std::normal_distribution<double> distribution_;
29};
30
31} // namespace control_loops
32} // namespace frc971
33
34#endif // FRC971_CONTROL_LOOPS_GAUSSIAN_NOISE_H_