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 : #ifndef WEBRTC_BASE_NUMERICS_EXP_FILTER_H_
12 : #define WEBRTC_BASE_NUMERICS_EXP_FILTER_H_
13 :
14 : namespace rtc {
15 :
16 : // This class can be used, for example, for smoothing the result of bandwidth
17 : // estimation and packet loss estimation.
18 :
19 : class ExpFilter {
20 : public:
21 : static const float kValueUndefined;
22 :
23 0 : explicit ExpFilter(float alpha, float max = kValueUndefined) : max_(max) {
24 0 : Reset(alpha);
25 0 : }
26 :
27 : // Resets the filter to its initial state, and resets filter factor base to
28 : // the given value |alpha|.
29 : void Reset(float alpha);
30 :
31 : // Applies the filter with a given exponent on the provided sample:
32 : // y(k) = min(alpha_^ exp * y(k-1) + (1 - alpha_^ exp) * sample, max_).
33 : float Apply(float exp, float sample);
34 :
35 : // Returns current filtered value.
36 0 : float filtered() const { return filtered_; }
37 :
38 : // Changes the filter factor base to the given value |alpha|.
39 : void UpdateBase(float alpha);
40 :
41 : private:
42 : float alpha_; // Filter factor base.
43 : float filtered_; // Current filter output.
44 : const float max_;
45 : };
46 : } // namespace rtc
47 :
48 : #endif // WEBRTC_BASE_NUMERICS_EXP_FILTER_H_
|