moving_moments.h 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. /*
  2. * Copyright (c) 2013 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. #ifndef MODULES_AUDIO_PROCESSING_TRANSIENT_MOVING_MOMENTS_H_
  11. #define MODULES_AUDIO_PROCESSING_TRANSIENT_MOVING_MOMENTS_H_
  12. #include <stddef.h>
  13. #include <queue>
  14. namespace webrtc {
  15. // Calculates the first and second moments for each value of a buffer taking
  16. // into account a given number of previous values.
  17. // It preserves its state, so it can be multiple-called.
  18. // TODO(chadan): Implement a function that takes a buffer of first moments and a
  19. // buffer of second moments; and calculates the variances. When needed.
  20. // TODO(chadan): Add functionality to update with a buffer but only output are
  21. // the last values of the moments. When needed.
  22. class MovingMoments {
  23. public:
  24. // Creates a Moving Moments object, that uses the last |length| values
  25. // (including the new value introduced in every new calculation).
  26. explicit MovingMoments(size_t length);
  27. ~MovingMoments();
  28. // Calculates the new values using |in|. Results will be in the out buffers.
  29. // |first| and |second| must be allocated with at least |in_length|.
  30. void CalculateMoments(const float* in,
  31. size_t in_length,
  32. float* first,
  33. float* second);
  34. private:
  35. size_t length_;
  36. // A queue holding the |length_| latest input values.
  37. std::queue<float> queue_;
  38. // Sum of the values of the queue.
  39. float sum_;
  40. // Sum of the squares of the values of the queue.
  41. float sum_of_squares_;
  42. };
  43. } // namespace webrtc
  44. #endif // MODULES_AUDIO_PROCESSING_TRANSIENT_MOVING_MOMENTS_H_