Chris@130
|
1
|
Chris@130
|
2 #include "FeatureConditioner.h"
|
Chris@130
|
3
|
Chris@130
|
4 #include <vector>
|
Chris@130
|
5 #include <iostream>
|
Chris@130
|
6 #include <cmath>
|
Chris@130
|
7
|
Chris@130
|
8 using namespace std;
|
Chris@130
|
9
|
Chris@130
|
10 #define BOOST_TEST_DYN_LINK
|
Chris@130
|
11 #define BOOST_TEST_MAIN
|
Chris@130
|
12
|
Chris@130
|
13 #include <boost/test/unit_test.hpp>
|
Chris@130
|
14
|
Chris@185
|
15 static feature_t getTestFeature(double m)
|
Chris@130
|
16 {
|
Chris@185
|
17 feature_t f;
|
Chris@185
|
18 int fd[] = { 0, 1, 2, 3 };
|
Chris@130
|
19 for (int i = 0; i < 4; ++i) {
|
Chris@185
|
20 f.push_back(featurebin_t(fd[i] * m));
|
Chris@130
|
21 }
|
Chris@130
|
22 return f;
|
Chris@130
|
23 }
|
Chris@130
|
24
|
Chris@130
|
25 BOOST_AUTO_TEST_SUITE(TestFeatureConditioner)
|
Chris@130
|
26
|
Chris@130
|
27 BOOST_AUTO_TEST_CASE(nonorm_features)
|
Chris@130
|
28 {
|
Chris@130
|
29 FeatureConditioner::Parameters params;
|
Chris@130
|
30 params.norm = FeatureConditioner::NoNormalisation;
|
Chris@130
|
31 params.order = FeatureConditioner::OutputFeatures;
|
Chris@185
|
32 feature_t
|
Chris@130
|
33 e1 = getTestFeature(1),
|
Chris@130
|
34 e2 = getTestFeature(2),
|
Chris@130
|
35 e0 = getTestFeature(0);
|
Chris@130
|
36
|
Chris@130
|
37 params.silenceThreshold = 1.0;
|
Chris@130
|
38 FeatureConditioner fc(params);
|
Chris@185
|
39 feature_t out = fc.process(e1);
|
Chris@130
|
40 BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e1.begin(), e1.end());
|
Chris@130
|
41 out = fc.process(e2);
|
Chris@130
|
42 BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e2.begin(), e2.end());
|
Chris@130
|
43
|
Chris@130
|
44 params.silenceThreshold = 7.0;
|
Chris@130
|
45 fc = FeatureConditioner(params);
|
Chris@130
|
46 out = fc.process(e1);
|
Chris@130
|
47 BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e0.begin(), e0.end());
|
Chris@130
|
48 out = fc.process(e2);
|
Chris@130
|
49 BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e2.begin(), e2.end());
|
Chris@130
|
50 }
|
Chris@130
|
51
|
Chris@130
|
52 BOOST_AUTO_TEST_CASE(nonorm_rectderiv)
|
Chris@130
|
53 {
|
Chris@130
|
54 FeatureConditioner::Parameters params;
|
Chris@130
|
55 params.norm = FeatureConditioner::NoNormalisation;
|
Chris@130
|
56 params.order = FeatureConditioner::OutputRectifiedDerivative;
|
Chris@185
|
57 feature_t
|
Chris@130
|
58 e1 = getTestFeature(1),
|
Chris@130
|
59 e2 = getTestFeature(2),
|
Chris@130
|
60 e0 = getTestFeature(0);
|
Chris@130
|
61
|
Chris@130
|
62 params.silenceThreshold = 1.0;
|
Chris@130
|
63 FeatureConditioner fc(params);
|
Chris@185
|
64 feature_t out = fc.process(e1);
|
Chris@130
|
65 BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e1.begin(), e1.end());
|
Chris@130
|
66 out = fc.process(e2);
|
Chris@130
|
67 BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e1.begin(), e1.end());
|
Chris@130
|
68 out = fc.process(e1);
|
Chris@130
|
69 BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e0.begin(), e0.end());
|
Chris@130
|
70
|
Chris@130
|
71 params.silenceThreshold = 7.0;
|
Chris@130
|
72 fc = FeatureConditioner(params);
|
Chris@130
|
73 out = fc.process(e1);
|
Chris@130
|
74 BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e0.begin(), e0.end());
|
Chris@130
|
75 out = fc.process(e2);
|
Chris@130
|
76 BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e1.begin(), e1.end());
|
Chris@130
|
77 out = fc.process(e1);
|
Chris@130
|
78 BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e0.begin(), e0.end());
|
Chris@130
|
79 out = fc.process(e2);
|
Chris@130
|
80 BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e1.begin(), e1.end());
|
Chris@130
|
81 }
|
Chris@130
|
82
|
Chris@130
|
83 BOOST_AUTO_TEST_CASE(nonorm_deriv)
|
Chris@130
|
84 {
|
Chris@130
|
85 FeatureConditioner::Parameters params;
|
Chris@130
|
86 params.norm = FeatureConditioner::NoNormalisation;
|
Chris@130
|
87 params.order = FeatureConditioner::OutputDerivative;
|
Chris@185
|
88 feature_t
|
Chris@130
|
89 e1 = getTestFeature(1),
|
Chris@130
|
90 e2 = getTestFeature(2),
|
Chris@130
|
91 e3 = getTestFeature(3),
|
Chris@130
|
92 e0 = getTestFeature(0);
|
Chris@130
|
93
|
Chris@130
|
94 params.silenceThreshold = 1.0;
|
Chris@130
|
95 FeatureConditioner fc(params);
|
Chris@185
|
96 feature_t out = fc.process(e1);
|
Chris@130
|
97 BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e1.begin(), e1.end());
|
Chris@130
|
98 out = fc.process(e2);
|
Chris@130
|
99 BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e1.begin(), e1.end());
|
Chris@130
|
100 out = fc.process(e1);
|
Chris@130
|
101 BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e1.begin(), e1.end());
|
Chris@130
|
102
|
Chris@130
|
103 params.silenceThreshold = 7.0;
|
Chris@130
|
104 fc = FeatureConditioner(params);
|
Chris@130
|
105 out = fc.process(e1);
|
Chris@130
|
106 BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e0.begin(), e0.end());
|
Chris@130
|
107 out = fc.process(e3);
|
Chris@130
|
108 BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e2.begin(), e2.end());
|
Chris@130
|
109 out = fc.process(e2);
|
Chris@130
|
110 BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e1.begin(), e1.end());
|
Chris@130
|
111 out = fc.process(e1);
|
Chris@130
|
112 BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e0.begin(), e0.end());
|
Chris@130
|
113 }
|
Chris@130
|
114
|
Chris@130
|
115 BOOST_AUTO_TEST_CASE(sum1_features)
|
Chris@130
|
116 {
|
Chris@130
|
117 FeatureConditioner::Parameters params;
|
Chris@130
|
118 params.norm = FeatureConditioner::NormaliseToSum1;
|
Chris@130
|
119 params.order = FeatureConditioner::OutputFeatures;
|
Chris@185
|
120 feature_t
|
Chris@130
|
121 e1 = getTestFeature(1),
|
Chris@130
|
122 e2 = getTestFeature(2),
|
Chris@130
|
123 en = getTestFeature(1.0/6.0),
|
Chris@130
|
124 e0 = getTestFeature(0);
|
Chris@130
|
125
|
Chris@130
|
126 params.silenceThreshold = 1.0;
|
Chris@130
|
127 FeatureConditioner fc(params);
|
Chris@185
|
128 feature_t out = fc.process(e1);
|
Chris@130
|
129 BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), en.begin(), en.end());
|
Chris@130
|
130 out = fc.process(e2);
|
Chris@130
|
131 BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), en.begin(), en.end());
|
Chris@130
|
132
|
Chris@130
|
133 params.silenceThreshold = 7.0;
|
Chris@130
|
134 fc = FeatureConditioner(params);
|
Chris@130
|
135 out = fc.process(e1);
|
Chris@130
|
136 BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e0.begin(), e0.end());
|
Chris@130
|
137 out = fc.process(e2);
|
Chris@130
|
138 BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), en.begin(), en.end());
|
Chris@130
|
139 }
|
Chris@130
|
140
|
Chris@130
|
141 BOOST_AUTO_TEST_CASE(sum1_rectderiv)
|
Chris@130
|
142 {
|
Chris@130
|
143 FeatureConditioner::Parameters params;
|
Chris@130
|
144 params.norm = FeatureConditioner::NormaliseToSum1;
|
Chris@130
|
145 params.order = FeatureConditioner::OutputRectifiedDerivative;
|
Chris@185
|
146 feature_t
|
Chris@130
|
147 e1 = getTestFeature(1),
|
Chris@130
|
148 e2 = getTestFeature(2),
|
Chris@130
|
149 en = getTestFeature(1.0/6.0),
|
Chris@130
|
150 en2 = getTestFeature(1.0/12.0),
|
Chris@130
|
151 e0 = getTestFeature(0);
|
Chris@130
|
152
|
Chris@130
|
153 params.silenceThreshold = 1.0;
|
Chris@130
|
154 FeatureConditioner fc(params);
|
Chris@185
|
155 feature_t out = fc.process(e1);
|
Chris@130
|
156 BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), en.begin(), en.end());
|
Chris@130
|
157 out = fc.process(e2);
|
Chris@130
|
158 BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), en2.begin(), en2.end());
|
Chris@130
|
159 out = fc.process(e1);
|
Chris@130
|
160 BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e0.begin(), e0.end());
|
Chris@130
|
161
|
Chris@130
|
162 params.silenceThreshold = 7.0;
|
Chris@130
|
163 fc = FeatureConditioner(params);
|
Chris@130
|
164 out = fc.process(e1);
|
Chris@130
|
165 BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e0.begin(), e0.end());
|
Chris@130
|
166 out = fc.process(e2);
|
Chris@130
|
167 BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), en2.begin(), en2.end());
|
Chris@130
|
168 out = fc.process(e1);
|
Chris@130
|
169 BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e0.begin(), e0.end());
|
Chris@130
|
170 out = fc.process(e2);
|
Chris@130
|
171 BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), en2.begin(), en2.end());
|
Chris@130
|
172 }
|
Chris@130
|
173
|
Chris@130
|
174
|
Chris@130
|
175 BOOST_AUTO_TEST_SUITE_END()
|
Chris@130
|
176
|