28 std::vector<double> *denominators,
29 std::vector<double> *numerators) {
30 denominators->clear();
32 denominators->reserve(3);
33 numerators->reserve(3);
35 double wa = 2.0 * M_PI * cutoff_freq;
36 double alpha = wa * ts / 2.0;
37 double alpha_sqr = alpha * alpha;
38 double tmp_term = std::sqrt(2.0) * alpha + alpha_sqr;
39 double gain = alpha_sqr / (1.0 + tmp_term);
41 denominators->push_back(1.0);
42 denominators->push_back(2.0 * (alpha_sqr - 1.0) / (1.0 + tmp_term));
43 denominators->push_back((1.0 - std::sqrt(2.0) * alpha + alpha_sqr) /
46 numerators->push_back(gain);
47 numerators->push_back(2.0 * gain);
48 numerators->push_back(gain);
52 const double dead_time,
53 std::vector<double> *denominators,
54 std::vector<double> *numerators) {
56 if (ts <= 0.0 || settling_time < 0.0 || dead_time < 0.0) {
57 AERROR <<
"time cannot be negative";
61 const size_t k_d =
static_cast<size_t>(dead_time / ts);
64 denominators->clear();
66 denominators->reserve(2);
67 numerators->reserve(k_d + 1);
69 if (settling_time == 0.0) {
72 a_term = exp(-1 * ts / settling_time);
75 denominators->push_back(1.0);
76 denominators->push_back(-a_term);
77 numerators->insert(numerators->end(), k_d, 0.0);
78 numerators->push_back(1 - a_term);
void LpFirstOrderCoefficients(const double ts, const double settling_time, const double dead_time, std::vector< double > *denominators, std::vector< double > *numerators)
Get first order low-pass coefficients for ZOH digital filter.
void LpfCoefficients(const double ts, const double cutoff_freq, std::vector< double > *denominators, std::vector< double > *numerators)
Get low-pass coefficients for digital filter.