1 /* 2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. 3 * 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 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #include "modules/audio_processing/echo_detector/mean_variance_estimator.h" 12 13 #include <math.h> 14 15 #include "rtc_base/checks.h" 16 17 namespace webrtc { 18 namespace { 19 20 // Parameter controlling the adaptation speed. 21 constexpr float kAlpha = 0.001f; 22 23 } // namespace 24 Update(float value)25void MeanVarianceEstimator::Update(float value) { 26 mean_ = (1.f - kAlpha) * mean_ + kAlpha * value; 27 variance_ = 28 (1.f - kAlpha) * variance_ + kAlpha * (value - mean_) * (value - mean_); 29 RTC_DCHECK(isfinite(mean_)); 30 RTC_DCHECK(isfinite(variance_)); 31 } 32 std_deviation() const33float MeanVarianceEstimator::std_deviation() const { 34 RTC_DCHECK_GE(variance_, 0.f); 35 return sqrtf(variance_); 36 } 37 mean() const38float MeanVarianceEstimator::mean() const { 39 return mean_; 40 } 41 Clear()42void MeanVarianceEstimator::Clear() { 43 mean_ = 0.f; 44 variance_ = 0.f; 45 } 46 47 } // namespace webrtc 48