annotate garage-resampler/TestResampler.cpp @ 0:8dd4134043a1

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