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); }