Index: webrtc/modules/audio_processing/aec3/matched_filter_unittest.cc |
diff --git a/webrtc/modules/audio_processing/aec3/matched_filter_unittest.cc b/webrtc/modules/audio_processing/aec3/matched_filter_unittest.cc |
index 952b3710fe04deff81f157e6a8612500c1a65685..2dc27375a4dfd9d684b4dc503678f2cf6f133355 100644 |
--- a/webrtc/modules/audio_processing/aec3/matched_filter_unittest.cc |
+++ b/webrtc/modules/audio_processing/aec3/matched_filter_unittest.cc |
@@ -20,6 +20,8 @@ |
#include "webrtc/base/random.h" |
#include "webrtc/modules/audio_processing/aec3/aec3_common.h" |
+#include "webrtc/modules/audio_processing/aec3/decimator_by_4.h" |
+#include "webrtc/modules/audio_processing/aec3/render_delay_buffer.h" |
#include "webrtc/modules/audio_processing/logging/apm_data_dumper.h" |
#include "webrtc/modules/audio_processing/test/echo_canceller_test_tools.h" |
#include "webrtc/system_wrappers/include/cpu_features_wrapper.h" |
@@ -87,23 +89,31 @@ TEST(MatchedFilter, TestOptimizations) { |
// delayed signals. |
TEST(MatchedFilter, LagEstimation) { |
Random random_generator(42U); |
- std::array<float, kSubBlockSize> render; |
- std::array<float, kSubBlockSize> capture; |
- render.fill(0.f); |
+ std::vector<std::vector<float>> render(3, |
+ std::vector<float>(kBlockSize, 0.f)); |
+ std::array<float, kBlockSize> capture; |
capture.fill(0.f); |
ApmDataDumper data_dumper(0); |
for (size_t delay_samples : {5, 64, 150, 200, 800, 1000}) { |
SCOPED_TRACE(ProduceDebugText(delay_samples)); |
- DelayBuffer<float> signal_delay_buffer(delay_samples); |
+ DecimatorBy4 capture_decimator; |
+ DelayBuffer<float> signal_delay_buffer(4 * delay_samples); |
MatchedFilter filter(&data_dumper, DetectOptimization(), |
kWindowSizeSubBlocks, kNumMatchedFilters, |
kAlignmentShiftSubBlocks); |
+ std::unique_ptr<RenderDelayBuffer> render_delay_buffer( |
+ RenderDelayBuffer::Create(3)); |
// Analyze the correlation between render and capture. |
for (size_t k = 0; k < (100 + delay_samples / kSubBlockSize); ++k) { |
- RandomizeSampleVector(&random_generator, render); |
- signal_delay_buffer.Delay(render, capture); |
- filter.Update(render, capture); |
+ RandomizeSampleVector(&random_generator, render[0]); |
+ signal_delay_buffer.Delay(render[0], capture); |
+ render_delay_buffer->Insert(&render); |
+ render_delay_buffer->UpdateBuffers(); |
+ std::array<float, kSubBlockSize> downsampled_capture; |
+ capture_decimator.Decimate(capture, downsampled_capture); |
+ filter.Update(render_delay_buffer->GetDownsampledRenderBuffer(), |
+ downsampled_capture); |
} |
// Obtain the lag estimates. |
@@ -151,19 +161,22 @@ TEST(MatchedFilter, LagEstimation) { |
// estimates for uncorrelated render and capture signals. |
TEST(MatchedFilter, LagNotReliableForUncorrelatedRenderAndCapture) { |
Random random_generator(42U); |
- std::array<float, kSubBlockSize> render; |
+ std::vector<std::vector<float>> render(3, |
+ std::vector<float>(kBlockSize, 0.f)); |
std::array<float, kSubBlockSize> capture; |
- render.fill(0.f); |
capture.fill(0.f); |
ApmDataDumper data_dumper(0); |
+ std::unique_ptr<RenderDelayBuffer> render_delay_buffer( |
+ RenderDelayBuffer::Create(3)); |
MatchedFilter filter(&data_dumper, DetectOptimization(), kWindowSizeSubBlocks, |
kNumMatchedFilters, kAlignmentShiftSubBlocks); |
// Analyze the correlation between render and capture. |
for (size_t k = 0; k < 100; ++k) { |
- RandomizeSampleVector(&random_generator, render); |
+ RandomizeSampleVector(&random_generator, render[0]); |
RandomizeSampleVector(&random_generator, capture); |
- filter.Update(render, capture); |
+ render_delay_buffer->Insert(&render); |
+ filter.Update(render_delay_buffer->GetDownsampledRenderBuffer(), capture); |
} |
// Obtain the lag estimates. |
@@ -180,22 +193,28 @@ TEST(MatchedFilter, LagNotReliableForUncorrelatedRenderAndCapture) { |
// render signals of low level. |
TEST(MatchedFilter, LagNotUpdatedForLowLevelRender) { |
Random random_generator(42U); |
- std::array<float, kSubBlockSize> render; |
- std::array<float, kSubBlockSize> capture; |
- render.fill(0.f); |
+ std::vector<std::vector<float>> render(3, |
+ std::vector<float>(kBlockSize, 0.f)); |
+ std::array<float, kBlockSize> capture; |
capture.fill(0.f); |
ApmDataDumper data_dumper(0); |
MatchedFilter filter(&data_dumper, DetectOptimization(), kWindowSizeSubBlocks, |
kNumMatchedFilters, kAlignmentShiftSubBlocks); |
+ std::unique_ptr<RenderDelayBuffer> render_delay_buffer( |
+ RenderDelayBuffer::Create(3)); |
+ DecimatorBy4 capture_decimator; |
// Analyze the correlation between render and capture. |
for (size_t k = 0; k < 100; ++k) { |
- RandomizeSampleVector(&random_generator, render); |
- for (auto& render_k : render) { |
+ RandomizeSampleVector(&random_generator, render[0]); |
+ for (auto& render_k : render[0]) { |
render_k *= 149.f / 32767.f; |
} |
- std::copy(render.begin(), render.end(), capture.begin()); |
- filter.Update(render, capture); |
+ std::copy(render[0].begin(), render[0].end(), capture.begin()); |
+ std::array<float, kSubBlockSize> downsampled_capture; |
+ capture_decimator.Decimate(capture, downsampled_capture); |
+ filter.Update(render_delay_buffer->GetDownsampledRenderBuffer(), |
+ downsampled_capture); |
} |
// Obtain the lag estimates. |