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