| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- /**
- * @file welford_mean.h
- * @author liuyang (liuyangzys@outlook.com)
- * @brief Welford's online algorithm for computing mean and variance
- * @version 0.1
- * @date 2023-07-20
- *
- * @copyright Copyright (c) 2023
- *
- */
- #pragma once
- #include <stdbool.h>
- #include <stddef.h>
- #include <stdint.h>
- typedef struct {
- float _mean;
- float _M2;
- float _mean_accum;
- float _M2_accum;
- uint16_t _count;
- } WelfordMean_t;
- bool welford_mean_valid(WelfordMean_t *wm);
- void welford_mean_reset(WelfordMean_t *wm);
- bool welford_mean_updata(WelfordMean_t *wm, float new_val);
- int welford_mean_get_count(WelfordMean_t *wm);
- float welford_mean_get_mean(WelfordMean_t *wm);
- float welford_mean_get_variance(WelfordMean_t *wm);
- float welford_mean_get_stddev(WelfordMean_t *wm);
- typedef struct {
- float _mean[3];
- float _mean_accum[3];
- float _M2[3][3];
- float _M2_accum[3][3];
- uint16_t _count;
- } WelfordMeanVector3f_t;
- bool welford_mean_vector3f_valid(WelfordMeanVector3f_t *wm);
- void welford_mean_vector3f_reset(WelfordMeanVector3f_t *wm);
- bool welford_mean_vector3f_updata(WelfordMeanVector3f_t *wm, float new_val[3]);
- int welford_mean_vector3f_get_count(WelfordMeanVector3f_t *wm);
- bool welford_mean_vector3f_get_mean(WelfordMeanVector3f_t *wm, float mean[3]);
- bool welford_mean_vector3f_get_variance(WelfordMeanVector3f_t *wm,
- float variance[3]);
- float welford_mean_vector3f_get_covariance(WelfordMeanVector3f_t *wm, int x,
- int y);
|