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