c@416: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ c@416: c@416: #include "dsp/signalconditioning/Filter.h" c@416: c@416: #define BOOST_TEST_DYN_LINK c@416: #define BOOST_TEST_MAIN c@416: c@416: #include c@416: c@416: #include c@416: c@416: using namespace std; c@416: c@416: BOOST_AUTO_TEST_SUITE(TestFilter) c@416: c@416: static vector in { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }; c@416: c@416: static vector iir_a { 1,5.75501989315662,16.326056867468,28.779190797823,34.2874379215653,28.137815126537,15.6064643257793,5.37874515231553,0.913800050254382,0.0,0.0 }; c@416: static vector iir_b { 0.0031954608137085,0.0180937089815597,0.0508407778575426,0.0895040074158415,0.107385387168148,0.0895040074158415,0.0508407778575426,0.0180937089815597,0.0031954608137085,0.0,0.0 }; c@416: static vector iir_expected { 0.003195460813709, 0.006094690058282, 0.009370240771381, 0.012857578361690, 0.015328760300750, 0.019107809614909, 0.022257958968869, 0.024598034053011, 0.029106103380941, 0.031152166476509, 0.034424013713795, 0.038775350541015, 0.039924063374886, 0.044846280036012, 0.047614917256999, 0.049338485830505 }; c@416: c@416: static vector fir_b { -1.5511e-18,-0.022664,1.047e-17,0.27398,0.49737,0.27398,1.047e-17,-0.022664,-1.5511e-18 }; c@416: static vector fir_expected { -1.5511e-18,-0.022664,-0.045328,0.20599,0.95467,1.9773,3,4,5,6,7,8,9,10,11,12 }; c@416: c@416: BOOST_AUTO_TEST_CASE(iir) c@416: { c@416: vector a(iir_a); c@416: vector b(iir_b); c@416: vector expected(iir_expected); c@416: c@417: Filter f({ a, b }); c@416: c@416: int n = expected.size(); c@416: vector out(n, 0.0); c@416: c@416: f.process(in.data(), out.data(), n); c@416: c@416: double thresh = 1e-12; c@416: c@416: for (int i = 0; i < n; ++i) { cannam@476: BOOST_CHECK_SMALL(out[i] - expected[i], thresh); c@416: } c@416: } c@416: c@416: BOOST_AUTO_TEST_CASE(iir_chunked) c@416: { c@416: vector a(iir_a); c@416: vector b(iir_b); c@416: vector expected(iir_expected); c@416: c@417: Filter f({ a, b }); c@416: c@416: int n = expected.size(); c@416: vector out(n, 0.0); c@416: c@416: int j = 0; c@416: int i = 0; c@416: while (j < n) { cannam@476: if (++i == 4) { cannam@476: i = 1; cannam@476: } cannam@476: if (j + i >= n) { cannam@476: i = n - j; cannam@476: } cannam@476: f.process(in.data() + j, out.data() + j, i); cannam@476: j += i; c@416: } c@416: c@416: double thresh = 1e-12; c@416: c@416: for (int i = 0; i < n; ++i) { cannam@476: BOOST_CHECK_SMALL(out[i] - expected[i], thresh); c@416: } c@416: } c@416: c@416: BOOST_AUTO_TEST_CASE(fir) c@416: { c@416: vector b(fir_b); c@416: vector expected(fir_expected); c@416: c@417: Filter f({ {}, b }); c@416: c@416: int n = expected.size(); c@416: vector out(n, 0.0); c@416: c@416: f.process(in.data(), out.data(), n); c@416: c@416: double thresh = 1e-4; c@416: c@416: for (int i = 0; i < n; ++i) { cannam@476: BOOST_CHECK_SMALL(out[i] - expected[i], thresh); c@416: } c@416: } c@416: c@416: BOOST_AUTO_TEST_SUITE_END() c@416: