meta data for this page
  •  

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
algo [2020/03/23 15:59]
niziak
algo [2020/04/20 07:25] (current)
niziak
Line 1: Line 1:
 +====== Algorithms ======
 +
 ====== Low-pass filters ====== ====== Low-pass filters ======
  
Line 20: Line 22:
 } }
 </​code>​ </​code>​
 +
 +===== Moving Average (MA) =====
 +aka moving average / rolling average / running average
 +
 +<code c>
 +#define LPA_NUM ​    10
 +static int16_t lpa_buf[LPA_NUM];​
 +
 +void low_pass_average_init(int16_t init_value) {
 +    for (int i = 0; i < sizeof(lpa_buf)/​sizeof(lpa_buf[0]);​ i++) {
 +        lpa_buf[i] = init_value;
 +    }
 +}
 +
 +int16_t low_pass_average(int16_t input) {
 +    int32_t sum = 0;
 +    for (unsigned int i = (LPA_NUM)-1;​ i > 0; --i) {
 +        lpa_buf[i] = lpa_buf[i-1];​
 +        sum += lpa_buf[i];
 +    }
 +    sum += input;
 +    lpa_buf[0] = input;
 +    return sum/​LPA_NUM;​
 +}
 +</​code>​
 +
 +==== Weighted Moving Average ====
 +Time-weighted moving average
 +LWMA - Linearly Weighted Moving Average
 +<code c>
 +#define LPA_NUM ​    10
 +static int16_t wma_buf[LPA_NUM];​
 +static int16_t ma_w[LPA_NUM] = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };
 +
 +void mag_moving_average_init(int16_t init_value) {
 +    for (int i = 0; i < sizeof(ma_buf)/​sizeof(ma_buf[0]);​ i++) {
 +        wma_buf[i] = init_value;
 +    }
 +}
 +
 +nt16_t mag_weighted_moving_average(int16_t input) {
 +    int32_t sum = 0;
 +    int32_t w_sum = 0;
 +    for (unsigned int i = (LPA_NUM)-1;​ i > 0; --i) {
 +        wma_buf[i] = wma_buf[i-1];​
 +        sum += wma_buf[i] * ma_w[i];
 +        w_sum += ma_w[i];
 +    }
 +    wma_buf[0] = input;
 +    sum += wma_buf[0] * ma_w[0];
 +    w_sum += ma_w[0];
 +    return sum / w_sum;
 +}
 +</​code>​
 +
  
 ====== Change detection ====== ====== Change detection ======
Line 26: Line 83:
 ===== CuSum ===== ===== CuSum =====
  
-[[https://​en.wikipedia.org/​wiki/​CUSUM|CUSUM]] - Cumulative sum control chart +  * [[https://​en.wikipedia.org/​wiki/​CUSUM|CUSUM]] - Cumulative sum control chart 
 +  * [[https://​hal.archives-ouvertes.fr/​hal-00914697/​document]]