Libary for control.

Dependencies:   FastPWM

Dependents:   RT2_Cuboid

Committer:
pmic
Date:
Thu May 05 09:18:40 2022 +0000
Revision:
10:eb29810d831b
Parent:
9:9a2672ac2ef4
Adjusted AvgFilter (damn...)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pmic 8:3a2131231969 1 #include "AvgFilter.h"
pmic 8:3a2131231969 2
pmic 8:3a2131231969 3 AvgFilter::AvgFilter(uint8_t _N)
pmic 8:3a2131231969 4 {
pmic 8:3a2131231969 5 setup(_N);
pmic 8:3a2131231969 6 }
pmic 8:3a2131231969 7
pmic 8:3a2131231969 8 AvgFilter::~AvgFilter()
pmic 8:3a2131231969 9 {
pmic 8:3a2131231969 10 }
pmic 8:3a2131231969 11
pmic 8:3a2131231969 12 void AvgFilter::setup(uint8_t _N)
pmic 8:3a2131231969 13 {
pmic 8:3a2131231969 14 m_N = _N;
pmic 8:3a2131231969 15 m_ring_buffer = (float*)malloc(m_N*sizeof(float));
pmic 8:3a2131231969 16 reset();
pmic 8:3a2131231969 17 }
pmic 8:3a2131231969 18
pmic 9:9a2672ac2ef4 19 void AvgFilter::reset(float _avg)
pmic 9:9a2672ac2ef4 20 {
pmic 9:9a2672ac2ef4 21 m_avg = _avg;
pmic 9:9a2672ac2ef4 22 float scaled_inp = m_avg / (float)m_N;
pmic 9:9a2672ac2ef4 23 m_idx = 0;
pmic 9:9a2672ac2ef4 24 for(uint8_t i = 0; i < m_N; i++) {
pmic 9:9a2672ac2ef4 25 m_ring_buffer[i] = scaled_inp;
pmic 9:9a2672ac2ef4 26 }
pmic 9:9a2672ac2ef4 27 }
pmic 9:9a2672ac2ef4 28
pmic 8:3a2131231969 29 void AvgFilter::reset()
pmic 8:3a2131231969 30 {
pmic 9:9a2672ac2ef4 31 reset(0.0f);
pmic 8:3a2131231969 32 }
pmic 8:3a2131231969 33
pmic 8:3a2131231969 34 float AvgFilter::update(float _inp)
pmic 8:3a2131231969 35 {
pmic 8:3a2131231969 36 // remove last value from ringbuffer
pmic 8:3a2131231969 37 m_avg -= m_ring_buffer[m_idx];
pmic 8:3a2131231969 38
pmic 8:3a2131231969 39 // add new value and update ringbuffer, rinbuffer stores the scaled value
pmic 8:3a2131231969 40 float scaled_inp = _inp / (float)m_N;
pmic 8:3a2131231969 41 m_avg += scaled_inp;
pmic 8:3a2131231969 42 m_ring_buffer[m_idx] = scaled_inp;
pmic 8:3a2131231969 43
pmic 8:3a2131231969 44 // check if we are at the end of the ringbuffer
pmic 8:3a2131231969 45 m_idx++;
pmic 8:3a2131231969 46 if (m_idx == m_N)
pmic 8:3a2131231969 47 {
pmic 8:3a2131231969 48 m_idx = 0;
pmic 8:3a2131231969 49 }
pmic 8:3a2131231969 50
pmic 8:3a2131231969 51 return m_avg;
pmic 8:3a2131231969 52 }