提交 330cdc2f 编写于 作者: K kevin-y-wang 提交者: Xiangquan Xiao

Common: refactor the deadtime processing in the 1st-order digital filter

上级 44d26157
......@@ -56,13 +56,13 @@ void LpFirstOrderCoefficients(const double ts, const double settling_time,
return;
}
const size_t k_d = static_cast<int>(dead_time / ts);
const size_t k_d = static_cast<size_t>(dead_time / ts);
double a_term;
denominators->clear();
numerators->clear();
denominators->reserve(2);
numerators->reserve(k_d); // size depends on dead-time
numerators->reserve(k_d + 1); // size depends on dead-time
if (settling_time == 0.0) {
a_term = 0.0;
......@@ -72,7 +72,7 @@ void LpFirstOrderCoefficients(const double ts, const double settling_time,
denominators->push_back(1.0);
denominators->push_back(-a_term);
numerators->insert(numerators->end(), k_d - 1, 0.0);
numerators->insert(numerators->end(), k_d, 0.0);
numerators->push_back(1 - a_term);
}
......
......@@ -44,7 +44,7 @@ TEST_F(DigitalFilterCoefficientsTest, LpfCoefficients) {
TEST_F(DigitalFilterCoefficientsTest, LpFirstOrderCoefficients) {
double ts = 0.01;
double settling_time = 0.005;
double dead_time = 0.05;
double dead_time = 0.04;
std::vector<double> den;
std::vector<double> num;
LpFirstOrderCoefficients(ts, settling_time, dead_time, &den, &num);
......@@ -54,6 +54,12 @@ TEST_F(DigitalFilterCoefficientsTest, LpFirstOrderCoefficients) {
EXPECT_DOUBLE_EQ(num[0], 0.0);
EXPECT_DOUBLE_EQ(num[1], 0.0);
EXPECT_NEAR(num[4], 1 - 0.13533, 0.01);
dead_time = 0.0;
LpFirstOrderCoefficients(ts, settling_time, dead_time, &den, &num);
EXPECT_EQ(den.size(), 2);
EXPECT_EQ(num.size(), 1);
EXPECT_NEAR(den[1], -0.13533, 0.01);
EXPECT_NEAR(num[0], 1 - 0.13533, 0.01);
}
} // namespace common
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册