Line data Source code
1 : /*
2 : * Copyright (c) 2011 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 "webrtc/base/numerics/exp_filter.h"
12 :
13 : #include <math.h>
14 :
15 : namespace rtc {
16 :
17 : const float ExpFilter::kValueUndefined = -1.0f;
18 :
19 0 : void ExpFilter::Reset(float alpha) {
20 0 : alpha_ = alpha;
21 0 : filtered_ = kValueUndefined;
22 0 : }
23 :
24 0 : float ExpFilter::Apply(float exp, float sample) {
25 0 : if (filtered_ == kValueUndefined) {
26 : // Initialize filtered value.
27 0 : filtered_ = sample;
28 0 : } else if (exp == 1.0) {
29 0 : filtered_ = alpha_ * filtered_ + (1 - alpha_) * sample;
30 : } else {
31 0 : float alpha = pow(alpha_, exp);
32 0 : filtered_ = alpha * filtered_ + (1 - alpha) * sample;
33 : }
34 0 : if (max_ != kValueUndefined && filtered_ > max_) {
35 0 : filtered_ = max_;
36 : }
37 0 : return filtered_;
38 : }
39 :
40 0 : void ExpFilter::UpdateBase(float alpha) {
41 0 : alpha_ = alpha;
42 0 : }
43 : } // namespace rtc
|