annotate dsp/rateconversion/TestResampler.cpp @ 362:3953f3ef1b62

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