OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
51 {0.055556f, 0.f}, | 51 {0.055556f, 0.f}, |
52 {0.055556f, 0.2f}, | 52 {0.055556f, 0.2f}, |
53 {0, 0.2f}, | 53 {0, 0.2f}, |
54 {0, 0.2f}, | 54 {0, 0.2f}, |
55 {0, 0.2f}, | 55 {0, 0.2f}, |
56 {0, 0.2f}}; | 56 {0, 0.2f}}; |
57 static_assert(arraysize(kTestCenterFreqs) == arraysize(kTestFilterBank), | 57 static_assert(arraysize(kTestCenterFreqs) == arraysize(kTestFilterBank), |
58 "Test filterbank badly initialized."); | 58 "Test filterbank badly initialized."); |
59 | 59 |
60 // Target output for gain solving test. Generated with matlab. | 60 // Target output for gain solving test. Generated with matlab. |
61 const int kTestStartFreq = 12; // Lowest integral frequency for ERBs. | 61 const size_t kTestStartFreq = 12; // Lowest integral frequency for ERBs. |
62 const float kTestZeroVar[] = {1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, | 62 const float kTestZeroVar[] = {1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, |
63 1.f, 1.f, 1.f, 0.f, 0.f, 0.f, 0.f, 0.f, | 63 1.f, 1.f, 1.f, 0.f, 0.f, 0.f, 0.f, 0.f, |
64 0.f, 0.f, 0.f, 0.f, 0.f, 0.f}; | 64 0.f, 0.f, 0.f, 0.f, 0.f, 0.f}; |
65 static_assert(arraysize(kTestCenterFreqs) == arraysize(kTestZeroVar), | 65 static_assert(arraysize(kTestCenterFreqs) == arraysize(kTestZeroVar), |
66 "Variance test data badly initialized."); | 66 "Variance test data badly initialized."); |
67 const float kTestNonZeroVarLambdaTop[] = { | 67 const float kTestNonZeroVarLambdaTop[] = { |
68 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, | 68 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, |
69 1.f, 1.f, 1.f, 0.f, 0.f, 0.0351f, 0.0636f, 0.0863f, | 69 1.f, 1.f, 1.f, 0.f, 0.f, 0.0351f, 0.0636f, 0.0863f, |
70 0.1037f, 0.1162f, 0.1236f, 0.1251f, 0.1189f, 0.0993f}; | 70 0.1037f, 0.1162f, 0.1236f, 0.1251f, 0.1189f, 0.0993f}; |
71 static_assert(arraysize(kTestCenterFreqs) == | 71 static_assert(arraysize(kTestCenterFreqs) == |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
142 } | 142 } |
143 for (auto step_type : step_types) { | 143 for (auto step_type : step_types) { |
144 std::generate(clear_data_.begin(), clear_data_.end(), float_rand); | 144 std::generate(clear_data_.begin(), clear_data_.end(), float_rand); |
145 orig_data_ = clear_data_; | 145 orig_data_ = clear_data_; |
146 EXPECT_TRUE(CheckUpdate(step_type)); | 146 EXPECT_TRUE(CheckUpdate(step_type)); |
147 } | 147 } |
148 } | 148 } |
149 | 149 |
150 // Tests ERB bank creation, comparing against matlab output. | 150 // Tests ERB bank creation, comparing against matlab output. |
151 TEST_F(IntelligibilityEnhancerTest, TestErbCreation) { | 151 TEST_F(IntelligibilityEnhancerTest, TestErbCreation) { |
152 ASSERT_EQ(static_cast<int>(arraysize(kTestCenterFreqs)), enh_->bank_size_); | 152 ASSERT_EQ(arraysize(kTestCenterFreqs), enh_->bank_size_); |
153 for (int i = 0; i < enh_->bank_size_; ++i) { | 153 for (size_t i = 0; i < enh_->bank_size_; ++i) { |
154 EXPECT_NEAR(kTestCenterFreqs[i], enh_->center_freqs_[i], kMaxTestError); | 154 EXPECT_NEAR(kTestCenterFreqs[i], enh_->center_freqs_[i], kMaxTestError); |
155 ASSERT_EQ(static_cast<int>(arraysize(kTestFilterBank[0])), enh_->freqs_); | 155 ASSERT_EQ(arraysize(kTestFilterBank[0]), enh_->freqs_); |
156 for (int j = 0; j < enh_->freqs_; ++j) { | 156 for (size_t j = 0; j < enh_->freqs_; ++j) { |
157 EXPECT_NEAR(kTestFilterBank[i][j], enh_->filter_bank_[i][j], | 157 EXPECT_NEAR(kTestFilterBank[i][j], enh_->filter_bank_[i][j], |
158 kMaxTestError); | 158 kMaxTestError); |
159 } | 159 } |
160 } | 160 } |
161 } | 161 } |
162 | 162 |
163 // Tests analytic solution for optimal gains, comparing | 163 // Tests analytic solution for optimal gains, comparing |
164 // against matlab output. | 164 // against matlab output. |
165 TEST_F(IntelligibilityEnhancerTest, TestSolveForGains) { | 165 TEST_F(IntelligibilityEnhancerTest, TestSolveForGains) { |
166 ASSERT_EQ(kTestStartFreq, enh_->start_freq_); | 166 ASSERT_EQ(kTestStartFreq, enh_->start_freq_); |
167 vector<float> sols(enh_->bank_size_); | 167 vector<float> sols(enh_->bank_size_); |
168 float lambda = -0.001f; | 168 float lambda = -0.001f; |
169 for (int i = 0; i < enh_->bank_size_; i++) { | 169 for (size_t i = 0; i < enh_->bank_size_; i++) { |
170 enh_->filtered_clear_var_[i] = 0.0f; | 170 enh_->filtered_clear_var_[i] = 0.0f; |
171 enh_->filtered_noise_var_[i] = 0.0f; | 171 enh_->filtered_noise_var_[i] = 0.0f; |
172 enh_->rho_[i] = 0.02f; | 172 enh_->rho_[i] = 0.02f; |
173 } | 173 } |
174 enh_->SolveForGainsGivenLambda(lambda, enh_->start_freq_, &sols[0]); | 174 enh_->SolveForGainsGivenLambda(lambda, enh_->start_freq_, &sols[0]); |
175 for (int i = 0; i < enh_->bank_size_; i++) { | 175 for (size_t i = 0; i < enh_->bank_size_; i++) { |
176 EXPECT_NEAR(kTestZeroVar[i], sols[i], kMaxTestError); | 176 EXPECT_NEAR(kTestZeroVar[i], sols[i], kMaxTestError); |
177 } | 177 } |
178 for (int i = 0; i < enh_->bank_size_; i++) { | 178 for (size_t i = 0; i < enh_->bank_size_; i++) { |
179 enh_->filtered_clear_var_[i] = static_cast<float>(i + 1); | 179 enh_->filtered_clear_var_[i] = static_cast<float>(i + 1); |
180 enh_->filtered_noise_var_[i] = static_cast<float>(enh_->bank_size_ - i); | 180 enh_->filtered_noise_var_[i] = static_cast<float>(enh_->bank_size_ - i); |
181 } | 181 } |
182 enh_->SolveForGainsGivenLambda(lambda, enh_->start_freq_, &sols[0]); | 182 enh_->SolveForGainsGivenLambda(lambda, enh_->start_freq_, &sols[0]); |
183 for (int i = 0; i < enh_->bank_size_; i++) { | 183 for (size_t i = 0; i < enh_->bank_size_; i++) { |
184 EXPECT_NEAR(kTestNonZeroVarLambdaTop[i], sols[i], kMaxTestError); | 184 EXPECT_NEAR(kTestNonZeroVarLambdaTop[i], sols[i], kMaxTestError); |
185 } | 185 } |
186 lambda = -1.0; | 186 lambda = -1.0; |
187 enh_->SolveForGainsGivenLambda(lambda, enh_->start_freq_, &sols[0]); | 187 enh_->SolveForGainsGivenLambda(lambda, enh_->start_freq_, &sols[0]); |
188 for (int i = 0; i < enh_->bank_size_; i++) { | 188 for (size_t i = 0; i < enh_->bank_size_; i++) { |
189 EXPECT_NEAR(kTestZeroVar[i], sols[i], kMaxTestError); | 189 EXPECT_NEAR(kTestZeroVar[i], sols[i], kMaxTestError); |
190 } | 190 } |
191 } | 191 } |
192 | 192 |
193 } // namespace webrtc | 193 } // namespace webrtc |
OLD | NEW |