From 139b05205d8553d8aac2133c85d549c3016ad92d Mon Sep 17 00:00:00 2001 From: Rob Riggs Date: Sat, 24 Jul 2021 17:30:21 -0500 Subject: [PATCH] Small cleanup of IIR filter code. --- TNC/IirFilter.hpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/TNC/IirFilter.hpp b/TNC/IirFilter.hpp index 84394ca..d441147 100644 --- a/TNC/IirFilter.hpp +++ b/TNC/IirFilter.hpp @@ -1,4 +1,4 @@ -// Copyright 2015-2020 Rob Riggs +// Copyright 2015-2021 Rob Riggs // All rights reserved. #pragma once @@ -15,31 +15,32 @@ struct IirFilter { const std::array& numerator_; const std::array& denominator_; std::array history_; - size_t size_; IirFilter(const std::array& b, const std::array& 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 - -