OLD | NEW |
| (Empty) |
1 /* | |
2 * Copyright (c) 2012 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_MODULES_AUDIO_PROCESSING_VAD_VAD_CIRCULAR_BUFFER_H_ | |
12 #define WEBRTC_MODULES_AUDIO_PROCESSING_VAD_VAD_CIRCULAR_BUFFER_H_ | |
13 | |
14 #include "webrtc/base/scoped_ptr.h" | |
15 | |
16 namespace webrtc { | |
17 | |
18 // A circular buffer tailored to the need of this project. It stores last | |
19 // K samples of the input, and keeps track of the mean of the last samples. | |
20 // | |
21 // It is used in class "PitchBasedActivity" to keep track of posterior | |
22 // probabilities in the past few seconds. The posterior probabilities are used | |
23 // to recursively update prior probabilities. | |
24 class VadCircularBuffer { | |
25 public: | |
26 static VadCircularBuffer* Create(int buffer_size); | |
27 ~VadCircularBuffer(); | |
28 | |
29 // If buffer is wrapped around. | |
30 bool is_full() const { return is_full_; } | |
31 // Get the oldest entry in the buffer. | |
32 double Oldest() const; | |
33 // Insert new value into the buffer. | |
34 void Insert(double value); | |
35 // Reset buffer, forget the past, start fresh. | |
36 void Reset(); | |
37 | |
38 // The mean value of the elements in the buffer. The return value is zero if | |
39 // buffer is empty, i.e. no value is inserted. | |
40 double Mean(); | |
41 // Remove transients. If the values exceed |val_threshold| for a period | |
42 // shorter then or equal to |width_threshold|, then that period is considered | |
43 // transient and set to zero. | |
44 int RemoveTransient(int width_threshold, double val_threshold); | |
45 | |
46 private: | |
47 explicit VadCircularBuffer(int buffer_size); | |
48 // Get previous values. |index = 0| corresponds to the most recent | |
49 // insertion. |index = 1| is the one before the most recent insertion, and | |
50 // so on. | |
51 int Get(int index, double* value) const; | |
52 // Set a given position to |value|. |index| is interpreted as above. | |
53 int Set(int index, double value); | |
54 // Return the number of valid elements in the buffer. | |
55 int BufferLevel(); | |
56 | |
57 // Convert an index with the interpretation as get() method to the | |
58 // corresponding linear index. | |
59 int ConvertToLinearIndex(int* index) const; | |
60 | |
61 rtc::scoped_ptr<double[]> buffer_; | |
62 bool is_full_; | |
63 int index_; | |
64 int buffer_size_; | |
65 double sum_; | |
66 }; | |
67 | |
68 } // namespace webrtc | |
69 #endif // WEBRTC_MODULES_AUDIO_PROCESSING_VAD_VAD_CIRCULAR_BUFFER_H_ | |
OLD | NEW |