kopia lustrzana https://github.com/mobilinkd/tnc3-firmware
Small cleanup of IIR filter code.
rodzic
ba8c0edc8c
commit
139b05205d
|
@ -1,4 +1,4 @@
|
|||
// Copyright 2015-2020 Rob Riggs <rob@mobilinkd.com>
|
||||
// Copyright 2015-2021 Rob Riggs <rob@mobilinkd.com>
|
||||
// All rights reserved.
|
||||
|
||||
#pragma once
|
||||
|
@ -15,31 +15,32 @@ struct IirFilter {
|
|||
const std::array<float, N>& numerator_;
|
||||
const std::array<float, N>& denominator_;
|
||||
std::array<float, N> history_;
|
||||
size_t size_;
|
||||
|
||||
IirFilter(const std::array<float, N>& b,
|
||||
const std::array<float, N>& a)
|
||||
: numerator_(b), denominator_(a)
|
||||
, history_(), size_(N)
|
||||
, history_()
|
||||
{
|
||||
history_.fill(0.0f);
|
||||
}
|
||||
|
||||
~IirFilter() {}
|
||||
|
||||
static constexpr size_t size() { return N; }
|
||||
|
||||
float operator()(float input)
|
||||
{
|
||||
|
||||
for(size_t i = size_ - 1; i != 0; i--) history_[i] = history_[i - 1];
|
||||
for (size_t i = N - 1; i != 0; i--) history_[i] = history_[i - 1];
|
||||
|
||||
history_[0] = input;
|
||||
|
||||
for (size_t i = 1; i != size_; i++) {
|
||||
for (size_t i = 1; i != N; i++) {
|
||||
history_[0] -= denominator_[i] * history_[i];
|
||||
}
|
||||
|
||||
float result = 0;
|
||||
for (size_t i = 0; i != size_; i++) {
|
||||
for (size_t i = 0; i != N; i++) {
|
||||
result += numerator_[i] * history_[i];
|
||||
}
|
||||
|
||||
|
@ -48,5 +49,3 @@ struct IirFilter {
|
|||
};
|
||||
|
||||
}} // mobilinkd::tnc
|
||||
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue