Vulcan
Aerospace Engineering Utilities Built on Janus
Loading...
Searching...
No Matches
Distributions.hpp
Go to the documentation of this file.
1
8
9#pragma once
10
11#include <Eigen/Core>
13
14namespace vulcan::rng {
15
36template <typename RNGType>
39 for (int i = 0; i < 3; ++i) {
40 input.gyro_arw(i) = rng.gaussian();
41 input.gyro_bias(i) = rng.gaussian();
42 input.gyro_rrw(i) = rng.gaussian();
43 input.accel_arw(i) = rng.gaussian();
44 input.accel_bias(i) = rng.gaussian();
45 input.accel_rrw(i) = rng.gaussian();
46 }
47 return input;
48}
49
57template <typename RNGType> Eigen::Vector3d generate_noise3(RNGType &rng) {
58 return Eigen::Vector3d(rng.gaussian(), rng.gaussian(), rng.gaussian());
59}
60
69template <int N, typename RNGType>
70Eigen::Vector<double, N> generate_noiseN(RNGType &rng) {
71 Eigen::Vector<double, N> v;
72 for (int i = 0; i < N; ++i) {
73 v(i) = rng.gaussian();
74 }
75 return v;
76}
77
90template <int N, typename RNGType>
91Eigen::Vector<double, N>
92generate_correlated_noise(RNGType &rng, const Eigen::Matrix<double, N, N> &L) {
93 Eigen::Vector<double, N> w;
94 for (int i = 0; i < N; ++i) {
95 w(i) = rng.gaussian();
96 }
97 return L * w;
98}
99
108template <typename RNGType>
109Eigen::VectorXd generate_correlated_noise(RNGType &rng,
110 const Eigen::MatrixXd &L) {
111 Eigen::VectorXd w(L.rows());
112 for (int i = 0; i < L.rows(); ++i) {
113 w(i) = rng.gaussian();
114 }
115 return L * w;
116}
117
129template <typename RNGType>
130void generate_turbulence_noise(RNGType &rng, double &noise_u, double &noise_v,
131 double &noise_w) {
132 noise_u = rng.gaussian();
133 noise_v = rng.gaussian();
134 noise_w = rng.gaussian();
135}
136
137} // namespace vulcan::rng
Definition Distributions.hpp:14
Eigen::Vector3d generate_noise3(RNGType &rng)
Generate 3-axis white noise.
Definition Distributions.hpp:57
Eigen::Vector< double, N > generate_noiseN(RNGType &rng)
Generate N-dimensional white noise.
Definition Distributions.hpp:70
Eigen::Vector< double, N > generate_correlated_noise(RNGType &rng, const Eigen::Matrix< double, N, N > &L)
Generate correlated noise with given Cholesky factor.
Definition Distributions.hpp:92
void generate_turbulence_noise(RNGType &rng, double &noise_u, double &noise_v, double &noise_w)
Generate turbulence forcing noise (3 independent channels).
Definition Distributions.hpp:130
allan::IMUNoiseInput< double > generate_imu_noise(RNGType &rng)
Generate IMU noise input for Allan variance model.
Definition Distributions.hpp:37
Noise input structure for IMU step.
Definition AllanVarianceNoise.hpp:192
Eigen::Vector< Scalar, 3 > gyro_rrw
Gyro RRW noise (3 axes).
Definition AllanVarianceNoise.hpp:195
Eigen::Vector< Scalar, 3 > gyro_bias
Gyro bias noise (3 axes).
Definition AllanVarianceNoise.hpp:194
Eigen::Vector< Scalar, 3 > gyro_arw
Gyro ARW noise (3 axes).
Definition AllanVarianceNoise.hpp:193
Eigen::Vector< Scalar, 3 > accel_bias
Accel bias noise (3 axes).
Definition AllanVarianceNoise.hpp:197
Eigen::Vector< Scalar, 3 > accel_rrw
Accel RRW noise (3 axes).
Definition AllanVarianceNoise.hpp:198
Eigen::Vector< Scalar, 3 > accel_arw
Accel ARW noise (3 axes).
Definition AllanVarianceNoise.hpp:196