FastLED
3.9.15
Loading...
Searching...
No Matches
weighted_moving_average_impl.h
Go to the documentation of this file.
1
#pragma once
2
3
#include "
fl/stl/circular_buffer.h
"
4
#include "
fl/stl/span.h
"
5
#include "
fl/stl/noexcept.h
"
6
7
namespace
fl
{
8
namespace
detail
{
9
10
template
<
typename
T, fl::size N = 0>
11
class
WeightedMovingAverageImpl
{
12
public
:
13
WeightedMovingAverageImpl
()
FL_NOEXCEPT
:
mLastValue
(T(0)) {}
14
explicit
WeightedMovingAverageImpl
(fl::size
capacity
)
15
:
mBuf
(
capacity
),
mLastValue
(T(0)) {}
16
17
T
update
(T input) {
18
mBuf
.push_back(input);
19
return
recompute
();
20
}
21
22
T
update
(
fl::span<const T>
values) {
23
if
(values.
size
() == 0)
return
mLastValue
;
24
for
(fl::size i = 0; i < values.
size
(); ++i) {
25
mBuf
.push_back(values[i]);
26
}
27
return
recompute
();
28
}
29
30
T
value
()
const
{
return
mLastValue
; }
31
void
reset
() {
mBuf
.clear();
mLastValue
= T(0); }
32
bool
full
()
const
{
return
mBuf
.full(); }
33
fl::size
size
()
const
{
return
mBuf
.size(); }
34
fl::size
capacity
()
const
{
return
mBuf
.capacity(); }
35
36
void
resize
(fl::size new_capacity) {
37
mBuf
=
circular_buffer<T, N>
(new_capacity);
38
mLastValue
= T(0);
39
}
40
41
private
:
42
T
recompute
() {
43
fl::size n =
mBuf
.size();
44
T weighted_sum = T(0);
45
T weight_total = T(0);
46
for
(fl::size i = 0; i < n; ++i) {
47
T w = T(
static_cast<
float
>
(i + 1));
48
weighted_sum = weighted_sum +
mBuf
[i] * w;
49
weight_total = weight_total + w;
50
}
51
mLastValue
= weighted_sum / weight_total;
52
return
mLastValue
;
53
}
54
55
circular_buffer<T, N>
mBuf
;
56
T
mLastValue
;
57
};
58
59
}
// namespace detail
60
}
// namespace fl
circular_buffer.h
fl::circular_buffer
Definition
circular_buffer.h:165
fl::detail::WeightedMovingAverageImpl::mBuf
circular_buffer< T, N > mBuf
Definition
weighted_moving_average_impl.h:55
fl::detail::WeightedMovingAverageImpl::reset
void reset()
Definition
weighted_moving_average_impl.h:31
fl::detail::WeightedMovingAverageImpl::size
fl::size size() const
Definition
weighted_moving_average_impl.h:33
fl::detail::WeightedMovingAverageImpl::update
T update(T input)
Definition
weighted_moving_average_impl.h:17
fl::detail::WeightedMovingAverageImpl::WeightedMovingAverageImpl
WeightedMovingAverageImpl(fl::size capacity)
Definition
weighted_moving_average_impl.h:14
fl::detail::WeightedMovingAverageImpl::capacity
fl::size capacity() const
Definition
weighted_moving_average_impl.h:34
fl::detail::WeightedMovingAverageImpl::update
T update(fl::span< const T > values)
Definition
weighted_moving_average_impl.h:22
fl::detail::WeightedMovingAverageImpl::recompute
T recompute()
Definition
weighted_moving_average_impl.h:42
fl::detail::WeightedMovingAverageImpl::resize
void resize(fl::size new_capacity)
Definition
weighted_moving_average_impl.h:36
fl::detail::WeightedMovingAverageImpl::mLastValue
T mLastValue
Definition
weighted_moving_average_impl.h:56
fl::detail::WeightedMovingAverageImpl::full
bool full() const
Definition
weighted_moving_average_impl.h:32
fl::detail::WeightedMovingAverageImpl::WeightedMovingAverageImpl
WeightedMovingAverageImpl() FL_NOEXCEPT
Definition
weighted_moving_average_impl.h:13
fl::detail::WeightedMovingAverageImpl::value
T value() const
Definition
weighted_moving_average_impl.h:30
fl::span::size
constexpr fl::size size() const FL_NOEXCEPT
Definition
span.h:458
fl::span
Definition
span.h:385
fl::detail
Compile-time linker keep-alive hook for a single fl::Bus.
Definition
bus_traits.h:48
fl
Base definition for an LED controller.
Definition
crgb.hpp:179
noexcept.h
FL_NOEXCEPT
#define FL_NOEXCEPT
span.h
fl
math
filter
weighted_moving_average_impl.h
Generated on Tue Jun 16 2026 00:06:59 for FastLED by
1.13.2