Mercurial > hg > qm-dsp
comparison dsp/rateconversion/TestResampler.cpp @ 137:dce8337a83c8
First cut at resampler (not quite correct)
author | Chris Cannam |
---|---|
date | Fri, 11 Oct 2013 18:00:51 +0100 |
parents | |
children | e89d489af128 |
comparison
equal
deleted
inserted
replaced
136:9c16683f58eb | 137:dce8337a83c8 |
---|---|
1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ | |
2 | |
3 #include "Resampler.h" | |
4 | |
5 #include <iostream> | |
6 | |
7 #include <cmath> | |
8 | |
9 #define BOOST_TEST_DYN_LINK | |
10 #define BOOST_TEST_MAIN | |
11 | |
12 #include <boost/test/unit_test.hpp> | |
13 | |
14 BOOST_AUTO_TEST_SUITE(TestResampler) | |
15 | |
16 using std::cout; | |
17 using std::endl; | |
18 | |
19 void | |
20 testResampler(int sourceRate, | |
21 int targetRate, | |
22 int n, | |
23 double *in, | |
24 int m, | |
25 double *expected) | |
26 { | |
27 Resampler r(sourceRate, targetRate); | |
28 int latency = r.getLatency(); | |
29 std::cerr << "latency = " << latency << std::endl; | |
30 | |
31 int m1 = m + latency; | |
32 int n1 = int((m1 * sourceRate) / targetRate); | |
33 | |
34 double *inPadded = new double[n1]; | |
35 double *outPadded = new double[m1]; | |
36 | |
37 for (int i = 0; i < n1; ++i) { | |
38 if (i < n) inPadded[i] = in[i]; | |
39 else inPadded[i] = 0.0; | |
40 } | |
41 | |
42 for (int i = 0; i < m1; ++i) { | |
43 outPadded[i] = -999.0; | |
44 } | |
45 | |
46 int got = r.process(inPadded, outPadded, n1); | |
47 | |
48 std::cerr << n1 << " in, " << got << " out" << std::endl; | |
49 | |
50 BOOST_CHECK_EQUAL(got, m1); | |
51 | |
52 std::cerr << "results including latency padding:" << std::endl; | |
53 for (int i = 0; i < m1; ++i) { | |
54 std::cerr << outPadded[i] << " "; | |
55 if (i % 6 == 5) std::cerr << "\n"; | |
56 } | |
57 std::cerr << "\n"; | |
58 | |
59 for (int i = latency; i < m1; ++i) { | |
60 BOOST_CHECK_CLOSE(outPadded[i], expected[i-latency], 1e-8); | |
61 } | |
62 delete[] outPadded; | |
63 delete[] inPadded; | |
64 } | |
65 | |
66 BOOST_AUTO_TEST_CASE(sameRate) | |
67 { | |
68 double d[] = { 0, 0.1, -0.3, -0.4, -0.3, 0, 0.5, 0.2, 0.8, -0.1 }; | |
69 testResampler(4, 4, 10, d, 10, d); | |
70 } | |
71 | |
72 BOOST_AUTO_TEST_SUITE_END() | |
73 |