Libary for control.
AvgFilter.cpp@10:eb29810d831b, 2022-05-05 (annotated)
- 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?
User | Revision | Line number | New 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 | } |