Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2276)

Unified Diff: webrtc/modules/audio_processing/aec3/aec_state_unittest.cc

Issue 2974583004: Transparency improvements in the echo canceller 3 (Closed)
Patch Set: Corrected wrong echo estimate vector in unittest Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/modules/audio_processing/aec3/aec_state_unittest.cc
diff --git a/webrtc/modules/audio_processing/aec3/aec_state_unittest.cc b/webrtc/modules/audio_processing/aec3/aec_state_unittest.cc
index 682126e1ce0265c8da3d253244adcc78ecea8ede..7062d244b8200d0442c344bca276ff89f6b48688 100644
--- a/webrtc/modules/audio_processing/aec3/aec_state_unittest.cc
+++ b/webrtc/modules/audio_processing/aec3/aec_state_unittest.cc
@@ -25,6 +25,8 @@ TEST(AecState, NormalUsage) {
std::array<float, kFftLengthBy2Plus1> Y2 = {};
std::vector<std::vector<float>> x(3, std::vector<float>(kBlockSize, 0.f));
EchoPathVariability echo_path_variability(false, false);
+ std::array<float, kBlockSize> s;
+ s.fill(100.f);
std::vector<std::array<float, kFftLengthBy2Plus1>>
converged_filter_frequency_response(10);
@@ -36,47 +38,57 @@ TEST(AecState, NormalUsage) {
converged_filter_frequency_response[2].fill(100.f);
converged_filter_frequency_response[2][0] = 1.f;
+ std::array<float, kAdaptiveFilterTimeDomainLength> impulse_response;
+ impulse_response.fill(0.f);
+
// Verify that linear AEC usability is false when the filter is diverged and
// there is no external delay reported.
- state.Update(diverged_filter_frequency_response, rtc::Optional<size_t>(),
- render_buffer, E2_main, Y2, x[0], false);
+ state.Update(diverged_filter_frequency_response, impulse_response,
+ rtc::Optional<size_t>(), render_buffer, E2_main, Y2, x[0], s,
+ false);
EXPECT_FALSE(state.UsableLinearEstimate());
// Verify that linear AEC usability is true when the filter is converged
std::fill(x[0].begin(), x[0].end(), 101.f);
for (int k = 0; k < 3000; ++k) {
- state.Update(converged_filter_frequency_response, rtc::Optional<size_t>(2),
- render_buffer, E2_main, Y2, x[0], false);
+ state.Update(converged_filter_frequency_response, impulse_response,
+ rtc::Optional<size_t>(2), render_buffer, E2_main, Y2, x[0], s,
+ false);
}
EXPECT_TRUE(state.UsableLinearEstimate());
// Verify that linear AEC usability becomes false after an echo path change is
// reported
state.HandleEchoPathChange(EchoPathVariability(true, false));
- state.Update(converged_filter_frequency_response, rtc::Optional<size_t>(2),
- render_buffer, E2_main, Y2, x[0], false);
+ state.Update(converged_filter_frequency_response, impulse_response,
+ rtc::Optional<size_t>(2), render_buffer, E2_main, Y2, x[0], s,
+ false);
EXPECT_FALSE(state.UsableLinearEstimate());
// Verify that the active render detection works as intended.
std::fill(x[0].begin(), x[0].end(), 101.f);
state.HandleEchoPathChange(EchoPathVariability(true, true));
- state.Update(converged_filter_frequency_response, rtc::Optional<size_t>(2),
- render_buffer, E2_main, Y2, x[0], false);
+ state.Update(converged_filter_frequency_response, impulse_response,
+ rtc::Optional<size_t>(2), render_buffer, E2_main, Y2, x[0], s,
+ false);
EXPECT_FALSE(state.ActiveRender());
for (int k = 0; k < 1000; ++k) {
- state.Update(converged_filter_frequency_response, rtc::Optional<size_t>(2),
- render_buffer, E2_main, Y2, x[0], false);
+ state.Update(converged_filter_frequency_response, impulse_response,
+ rtc::Optional<size_t>(2), render_buffer, E2_main, Y2, x[0], s,
+ false);
}
EXPECT_TRUE(state.ActiveRender());
// Verify that echo leakage is properly reported.
- state.Update(converged_filter_frequency_response, rtc::Optional<size_t>(2),
- render_buffer, E2_main, Y2, x[0], false);
+ state.Update(converged_filter_frequency_response, impulse_response,
+ rtc::Optional<size_t>(2), render_buffer, E2_main, Y2, x[0], s,
+ false);
EXPECT_FALSE(state.EchoLeakageDetected());
- state.Update(converged_filter_frequency_response, rtc::Optional<size_t>(2),
- render_buffer, E2_main, Y2, x[0], true);
+ state.Update(converged_filter_frequency_response, impulse_response,
+ rtc::Optional<size_t>(2), render_buffer, E2_main, Y2, x[0], s,
+ true);
EXPECT_TRUE(state.EchoLeakageDetected());
// Verify that the ERL is properly estimated
@@ -91,8 +103,9 @@ TEST(AecState, NormalUsage) {
Y2.fill(10.f * 10000.f * 10000.f);
for (size_t k = 0; k < 1000; ++k) {
- state.Update(converged_filter_frequency_response, rtc::Optional<size_t>(2),
- render_buffer, E2_main, Y2, x[0], false);
+ state.Update(converged_filter_frequency_response, impulse_response,
+ rtc::Optional<size_t>(2), render_buffer, E2_main, Y2, x[0], s,
+ false);
}
ASSERT_TRUE(state.UsableLinearEstimate());
@@ -107,8 +120,9 @@ TEST(AecState, NormalUsage) {
E2_main.fill(1.f * 10000.f * 10000.f);
Y2.fill(10.f * E2_main[0]);
for (size_t k = 0; k < 1000; ++k) {
- state.Update(converged_filter_frequency_response, rtc::Optional<size_t>(2),
- render_buffer, E2_main, Y2, x[0], false);
+ state.Update(converged_filter_frequency_response, impulse_response,
+ rtc::Optional<size_t>(2), render_buffer, E2_main, Y2, x[0], s,
+ false);
}
ASSERT_TRUE(state.UsableLinearEstimate());
{
@@ -127,8 +141,9 @@ TEST(AecState, NormalUsage) {
E2_main.fill(1.f * 10000.f * 10000.f);
Y2.fill(5.f * E2_main[0]);
for (size_t k = 0; k < 1000; ++k) {
- state.Update(converged_filter_frequency_response, rtc::Optional<size_t>(2),
- render_buffer, E2_main, Y2, x[0], false);
+ state.Update(converged_filter_frequency_response, impulse_response,
+ rtc::Optional<size_t>(2), render_buffer, E2_main, Y2, x[0], s,
+ false);
}
ASSERT_TRUE(state.UsableLinearEstimate());
@@ -155,6 +170,8 @@ TEST(AecState, NonSignificantDelay) {
std::array<float, kFftLengthBy2Plus1> Y2;
std::array<float, kBlockSize> x;
EchoPathVariability echo_path_variability(false, false);
+ std::array<float, kBlockSize> s;
+ s.fill(100.f);
x.fill(0.f);
std::vector<std::array<float, kFftLengthBy2Plus1>> frequency_response(30);
@@ -162,10 +179,13 @@ TEST(AecState, NonSignificantDelay) {
v.fill(0.01f);
}
+ std::array<float, kAdaptiveFilterTimeDomainLength> impulse_response;
+ impulse_response.fill(0.f);
+
// Verify that a non-significant filter delay is identified correctly.
state.HandleEchoPathChange(echo_path_variability);
- state.Update(frequency_response, rtc::Optional<size_t>(), render_buffer,
- E2_main, Y2, x, false);
+ state.Update(frequency_response, impulse_response, rtc::Optional<size_t>(),
+ render_buffer, E2_main, Y2, x, s, false);
EXPECT_FALSE(state.FilterDelay());
}
@@ -179,11 +199,16 @@ TEST(AecState, ConvergedFilterDelay) {
std::array<float, kFftLengthBy2Plus1> Y2;
std::array<float, kBlockSize> x;
EchoPathVariability echo_path_variability(false, false);
+ std::array<float, kBlockSize> s;
+ s.fill(100.f);
x.fill(0.f);
std::vector<std::array<float, kFftLengthBy2Plus1>> frequency_response(
kFilterLength);
+ std::array<float, kAdaptiveFilterTimeDomainLength> impulse_response;
+ impulse_response.fill(0.f);
+
// Verify that the filter delay for a converged filter is properly identified.
for (int k = 0; k < kFilterLength; ++k) {
for (auto& v : frequency_response) {
@@ -192,8 +217,8 @@ TEST(AecState, ConvergedFilterDelay) {
frequency_response[k].fill(100.f);
frequency_response[k][0] = 0.f;
state.HandleEchoPathChange(echo_path_variability);
- state.Update(frequency_response, rtc::Optional<size_t>(), render_buffer,
- E2_main, Y2, x, false);
+ state.Update(frequency_response, impulse_response, rtc::Optional<size_t>(),
+ render_buffer, E2_main, Y2, x, s, false);
EXPECT_TRUE(k == (kFilterLength - 1) || state.FilterDelay());
if (k != (kFilterLength - 1)) {
EXPECT_EQ(k, state.FilterDelay());
@@ -208,6 +233,8 @@ TEST(AecState, ExternalDelay) {
std::array<float, kFftLengthBy2Plus1> E2_shadow;
std::array<float, kFftLengthBy2Plus1> Y2;
std::array<float, kBlockSize> x;
+ std::array<float, kBlockSize> s;
+ s.fill(100.f);
E2_main.fill(0.f);
E2_shadow.fill(0.f);
Y2.fill(0.f);
@@ -219,10 +246,14 @@ TEST(AecState, ExternalDelay) {
v.fill(0.01f);
}
+ std::array<float, kAdaptiveFilterTimeDomainLength> impulse_response;
+ impulse_response.fill(0.f);
+
for (size_t k = 0; k < frequency_response.size() - 1; ++k) {
state.HandleEchoPathChange(EchoPathVariability(false, false));
- state.Update(frequency_response, rtc::Optional<size_t>(k * kBlockSize + 5),
- render_buffer, E2_main, Y2, x, false);
+ state.Update(frequency_response, impulse_response,
+ rtc::Optional<size_t>(k * kBlockSize + 5), render_buffer,
+ E2_main, Y2, x, s, false);
EXPECT_TRUE(state.ExternalDelay());
EXPECT_EQ(k, state.ExternalDelay());
}
@@ -230,8 +261,8 @@ TEST(AecState, ExternalDelay) {
// Verify that the externally reported delay is properly unset when it is no
// longer present.
state.HandleEchoPathChange(EchoPathVariability(false, false));
- state.Update(frequency_response, rtc::Optional<size_t>(), render_buffer,
- E2_main, Y2, x, false);
+ state.Update(frequency_response, impulse_response, rtc::Optional<size_t>(),
+ render_buffer, E2_main, Y2, x, s, false);
EXPECT_FALSE(state.ExternalDelay());
}
« no previous file with comments | « webrtc/modules/audio_processing/aec3/aec_state.cc ('k') | webrtc/modules/audio_processing/aec3/echo_remover.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698