Mercurial > hg > constant-q-cpp
comparison test/TestCQFrequency.cpp @ 144:88b8d34bfc77
Small rearrangement
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Tue, 20 May 2014 12:38:13 +0100 |
parents | 9bf76fc43844 |
children |
comparison
equal
deleted
inserted
replaced
143:c66f0f78b315 | 144:88b8d34bfc77 |
---|---|
74 BOOST_CHECK_EQUAL(maxidx, expected); | 74 BOOST_CHECK_EQUAL(maxidx, expected); |
75 } | 75 } |
76 } | 76 } |
77 | 77 |
78 void | 78 void |
79 testCQFrequencyWith(CQParameters params, | |
80 CQSpectrogram::Interpolation interp, | |
81 double freq) | |
82 { | |
83 CQSpectrogram cq(params, interp); | |
84 | |
85 BOOST_CHECK_EQUAL(cq.getBinsPerOctave(), bpo); | |
86 BOOST_CHECK_EQUAL(cq.getOctaves(), 2); | |
87 BOOST_CHECK_CLOSE(cq.getBinFrequency(0), 40, 1e-10); | |
88 BOOST_CHECK_CLOSE(cq.getBinFrequency(4), 20, 1e-10); | |
89 BOOST_CHECK_CLOSE(cq.getBinFrequency(7), cqmin, 1e-3); | |
90 | |
91 vector<double> input; | |
92 for (int i = 0; i < duration; ++i) { | |
93 input.push_back(sin((i * 2 * M_PI * freq) / sampleRate)); | |
94 } | |
95 Window<double>(HanningWindow, duration).cut(input.data()); | |
96 | |
97 CQSpectrogram::RealBlock output = cq.process(input); | |
98 CQSpectrogram::RealBlock rest = cq.getRemainingOutput(); | |
99 output.insert(output.end(), rest.begin(), rest.end()); | |
100 | |
101 BOOST_CHECK_EQUAL(output[0].size(), | |
102 cq.getBinsPerOctave() * cq.getOctaves()); | |
103 | |
104 for (int i = 0; i < int(output.size()); ++i) { | |
105 checkCQFreqColumn(i, output[i], freq, interp); | |
106 } | |
107 } | |
108 | |
109 void | |
79 testCQFrequency(double freq) | 110 testCQFrequency(double freq) |
80 { | 111 { |
81 vector<CQSpectrogram::Interpolation> interpolationTypes; | 112 vector<CQSpectrogram::Interpolation> interpolationTypes; |
82 interpolationTypes.push_back(CQSpectrogram::InterpolateZeros); | 113 interpolationTypes.push_back(CQSpectrogram::InterpolateZeros); |
83 interpolationTypes.push_back(CQSpectrogram::InterpolateHold); | 114 interpolationTypes.push_back(CQSpectrogram::InterpolateHold); |
84 interpolationTypes.push_back(CQSpectrogram::InterpolateLinear); | 115 interpolationTypes.push_back(CQSpectrogram::InterpolateLinear); |
85 | 116 |
86 for (int k = 0; k < int(interpolationTypes.size()); ++k) { | 117 for (int k = 0; k < int(interpolationTypes.size()); ++k) { |
87 | |
88 CQSpectrogram::Interpolation interp = interpolationTypes[k]; | 118 CQSpectrogram::Interpolation interp = interpolationTypes[k]; |
89 | |
90 CQParameters params(sampleRate, cqmin, cqmax, bpo); | 119 CQParameters params(sampleRate, cqmin, cqmax, bpo); |
91 CQSpectrogram cq(params, interp); | 120 testCQFrequencyWith(params, interp, freq); |
92 | |
93 BOOST_CHECK_EQUAL(cq.getBinsPerOctave(), bpo); | |
94 BOOST_CHECK_EQUAL(cq.getOctaves(), 2); | |
95 BOOST_CHECK_CLOSE(cq.getBinFrequency(0), 40, 1e-10); | |
96 BOOST_CHECK_CLOSE(cq.getBinFrequency(4), 20, 1e-10); | |
97 BOOST_CHECK_CLOSE(cq.getBinFrequency(7), cqmin, 1e-3); | |
98 | |
99 vector<double> input; | |
100 for (int i = 0; i < duration; ++i) { | |
101 input.push_back(sin((i * 2 * M_PI * freq) / sampleRate)); | |
102 } | |
103 Window<double>(HanningWindow, duration).cut(input.data()); | |
104 | |
105 CQSpectrogram::RealBlock output = cq.process(input); | |
106 CQSpectrogram::RealBlock rest = cq.getRemainingOutput(); | |
107 output.insert(output.end(), rest.begin(), rest.end()); | |
108 | |
109 BOOST_CHECK_EQUAL(output[0].size(), | |
110 cq.getBinsPerOctave() * cq.getOctaves()); | |
111 | |
112 for (int i = 0; i < int(output.size()); ++i) { | |
113 checkCQFreqColumn(i, output[i], freq, interp); | |
114 } | |
115 } | 121 } |
116 } | 122 } |
117 | 123 |
118 BOOST_AUTO_TEST_CASE(freq_11) { testCQFrequency(11); } | 124 BOOST_AUTO_TEST_CASE(freq_11) { testCQFrequency(11); } |
119 BOOST_AUTO_TEST_CASE(freq_17) { testCQFrequency(17); } | 125 BOOST_AUTO_TEST_CASE(freq_17) { testCQFrequency(17); } |