fome-fw/firmware/controllers/math/biquad.cpp

35 lines
689 B
C++
Raw Normal View History

2016-09-10 13:03:27 -07:00
/*
* @file biquad.cpp
*
* @date Sep 10, 2016
2018-01-20 17:55:31 -08:00
* @author Andrey Belomutskiy, (c) 2012-2018
2016-09-10 13:03:27 -07:00
*/
#include "biquad.h"
2016-09-17 13:02:56 -07:00
EXTERN_ENGINE;
2016-09-10 13:03:27 -07:00
Biquad::Biquad() {
2016-09-17 12:02:55 -07:00
a0 = a1 = a2 = b1 = b2;
z1 = z2 = 0;
}
2017-05-15 20:33:22 -07:00
void Biquad::initValue(float input DECLARE_ENGINE_PARAMETER_SUFFIX) {
2016-09-17 13:02:56 -07:00
a0 = engineConfiguration->biQuad.a0;
a1 = engineConfiguration->biQuad.a1;
a2 = engineConfiguration->biQuad.a2;
b1 = engineConfiguration->biQuad.b1;
b2 = engineConfiguration->biQuad.b2;
2016-09-10 13:03:27 -07:00
2016-09-17 12:02:55 -07:00
z1 = input * (1 - a0);
2016-09-17 13:02:56 -07:00
z2 = input * (1 - a0 - a1 + b1);
2016-09-10 19:03:38 -07:00
}
2016-09-10 13:03:27 -07:00
float Biquad::getValue(float input) {
float result = input * a0 + z1;
z1 = input * a1 + z2 - b1 * result;
z2 = input * a2 - b2 * result;
return result;
}