6#define _USE_MATH_DEFINES
15const std::vector<double>
MovingAverage(
const std::vector<double> & y,
const unsigned int n)
17 Eigen::VectorXd yy = Eigen::VectorXd::Map(y.data(), y.size());
21 std::vector<double> result_y(result.size());
22 Eigen::VectorXd::Map(result_y.data(), result_y.size()) = result;
32 Eigen::VectorXd yy = Eigen::VectorXd::Map(y.data(), y.size());
33 Eigen::VectorXd ww = Eigen::VectorXd::Map(w.data(), w.size());
37 std::vector<double> result_y(result.size());
38 Eigen::VectorXd::Map(result_y.data(), result_y.size()) = result;
46const std::vector<double>
GaussianKernel(
const unsigned int n,
const double sigma)
49 throw std::invalid_argument(
"GaussianKernel(): n is zero.");
53 throw std::invalid_argument(
"GaussianKernel(): non-positive sigma value is given.");
56 int points = 2 * n + 1;
57 std::vector<double> result(points);
59 double coeff = 1.0 / (std::sqrt(2 * M_PI) * sigma);
60 auto gaussian = [&](
const double xx) {
61 double t = xx / sigma;
62 return coeff * std::exp(-t * t / 2);
66 for(
int i = -(
int)n; i <= (int)n; i++) {
67 result[i + n] = gaussian(i);
71 for(
int i = 0; i < points; i++) {
const std::vector< double > GaussianKernel(const unsigned int n, const double sigma)
Generates a Gaussian kernel.
const std::vector< double > WeightedMovingAverage(const std::vector< double > &y, const std::vector< double > &w)
Calculates the weighted moving average of the input signal (std::vector<double> version).
const std::vector< double > MovingAverage(const std::vector< double > &y, const unsigned int n)
Calculates the simple moving average of the input signal (std::vector<double> version).
Smoothing using simple/weighted moving average.