Added further ability to adjust the filter adaptation in AEC3
Bug: webrtc:8609 Change-Id: I079935bd782afc89146d98fd2248a1c6389871c9 Reviewed-on: https://webrtc-review.googlesource.com/32420 Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org> Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org> Cr-Commit-Position: refs/heads/master@{#21268}
This commit is contained in:
@ -30,12 +30,14 @@ int MainFilterUpdateGain::instance_count_ = 0;
|
||||
|
||||
MainFilterUpdateGain::MainFilterUpdateGain(float leakage_converged,
|
||||
float leakage_diverged,
|
||||
float noise_gate_power)
|
||||
float noise_gate_power,
|
||||
float error_floor)
|
||||
: data_dumper_(
|
||||
new ApmDataDumper(rtc::AtomicOps::Increment(&instance_count_))),
|
||||
leakage_converged_(leakage_converged),
|
||||
leakage_diverged_(leakage_diverged),
|
||||
noise_gate_power_(noise_gate_power),
|
||||
error_floor_(error_floor),
|
||||
poor_excitation_counter_(kPoorExcitationCounterInitial) {
|
||||
H_error_.fill(kHErrorInitial);
|
||||
}
|
||||
@ -113,8 +115,9 @@ void MainFilterUpdateGain::Compute(
|
||||
std::transform(erl.begin(), erl.end(), H_error_increase.begin(),
|
||||
H_error_increase.begin(), std::multiplies<float>());
|
||||
std::transform(H_error_.begin(), H_error_.end(), H_error_increase.begin(),
|
||||
H_error_.begin(),
|
||||
[&](float a, float b) { return std::max(a + b, 0.1f); });
|
||||
H_error_.begin(), [&](float a, float b) {
|
||||
return std::max(a + b, error_floor_);
|
||||
});
|
||||
|
||||
data_dumper_->DumpRaw("aec3_main_gain_H_error", H_error_);
|
||||
}
|
||||
|
@ -30,7 +30,8 @@ class MainFilterUpdateGain {
|
||||
public:
|
||||
MainFilterUpdateGain(float leakage_converged,
|
||||
float leakage_diverged,
|
||||
float noise_gate_power);
|
||||
float noise_gate_power,
|
||||
float error_floor);
|
||||
~MainFilterUpdateGain();
|
||||
|
||||
// Takes action in the case of a known echo path change.
|
||||
@ -50,6 +51,7 @@ class MainFilterUpdateGain {
|
||||
const float leakage_converged_;
|
||||
const float leakage_diverged_;
|
||||
const float noise_gate_power_;
|
||||
const float error_floor_;
|
||||
std::array<float, kFftLengthBy2Plus1> H_error_;
|
||||
size_t poor_excitation_counter_;
|
||||
size_t call_counter_ = 0;
|
||||
|
@ -52,9 +52,9 @@ void RunFilterUpdateTest(int num_blocks_to_process,
|
||||
x_old.fill(0.f);
|
||||
ShadowFilterUpdateGain shadow_gain(config.filter.shadow_rate,
|
||||
config.filter.shadow_noise_gate);
|
||||
MainFilterUpdateGain main_gain(config.filter.leakage_converged,
|
||||
config.filter.leakage_diverged,
|
||||
config.filter.main_noise_gate);
|
||||
MainFilterUpdateGain main_gain(
|
||||
config.filter.leakage_converged, config.filter.leakage_diverged,
|
||||
config.filter.main_noise_gate, config.filter.error_floor);
|
||||
Random random_generator(42U);
|
||||
std::vector<std::vector<float>> x(3, std::vector<float>(kBlockSize, 0.f));
|
||||
std::vector<float> y(kBlockSize, 0.f);
|
||||
@ -193,9 +193,9 @@ TEST(MainFilterUpdateGain, NullDataOutputGain) {
|
||||
RenderDelayBuffer::Create(config, 3));
|
||||
RenderSignalAnalyzer analyzer;
|
||||
SubtractorOutput output;
|
||||
MainFilterUpdateGain gain(config.filter.leakage_converged,
|
||||
config.filter.leakage_diverged,
|
||||
config.filter.main_noise_gate);
|
||||
MainFilterUpdateGain gain(
|
||||
config.filter.leakage_converged, config.filter.leakage_diverged,
|
||||
config.filter.main_noise_gate, config.filter.error_floor);
|
||||
EXPECT_DEATH(gain.Compute(*render_delay_buffer->GetRenderBuffer(), analyzer,
|
||||
output, filter, false, nullptr),
|
||||
"");
|
||||
|
@ -55,7 +55,8 @@ Subtractor::Subtractor(const EchoCanceller3Config& config,
|
||||
shadow_filter_(config.filter.length_blocks, optimization, data_dumper_),
|
||||
G_main_(config.filter.leakage_converged,
|
||||
config.filter.leakage_diverged,
|
||||
config.filter.main_noise_gate),
|
||||
config.filter.main_noise_gate,
|
||||
config.filter.error_floor),
|
||||
G_shadow_(config.filter.shadow_rate, config.filter.shadow_noise_gate) {
|
||||
RTC_DCHECK(data_dumper_);
|
||||
}
|
||||
|
@ -1165,6 +1165,7 @@ struct EchoCanceller3Config {
|
||||
float shadow_rate = 0.5f;
|
||||
float leakage_converged = 0.01f;
|
||||
float leakage_diverged = 1.f / 60.f;
|
||||
float error_floor = 0.1f;
|
||||
float main_noise_gate = 220075344.f;
|
||||
float shadow_noise_gate = 220075344.f;
|
||||
} filter;
|
||||
|
Reference in New Issue
Block a user