blob: 46b16b82bc45ae186afba02f4d3499635b2b8f23 [file] [log] [blame]
pbos@webrtc.org788acd12014-12-15 09:41:24 +00001/*
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
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020011#include "modules/audio_processing/transient/moving_moments.h"
pbos@webrtc.org788acd12014-12-15 09:41:24 +000012
13#include <math.h>
14#include <string.h>
15
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020016#include "rtc_base/checks.h"
pbos@webrtc.org788acd12014-12-15 09:41:24 +000017
18namespace webrtc {
19
20MovingMoments::MovingMoments(size_t length)
21 : length_(length),
22 queue_(),
23 sum_(0.0),
24 sum_of_squares_(0.0) {
kwibergaf476c72016-11-28 15:21:39 -080025 RTC_DCHECK_GT(length, 0);
pbos@webrtc.org788acd12014-12-15 09:41:24 +000026 for (size_t i = 0; i < length; ++i) {
27 queue_.push(0.0);
28 }
29}
30
31MovingMoments::~MovingMoments() {}
32
33void MovingMoments::CalculateMoments(const float* in, size_t in_length,
34 float* first, float* second) {
kwibergee89e782017-08-09 17:22:01 -070035 RTC_DCHECK(in);
36 RTC_DCHECK_GT(in_length, 0);
37 RTC_DCHECK(first);
38 RTC_DCHECK(second);
pbos@webrtc.org788acd12014-12-15 09:41:24 +000039
40 for (size_t i = 0; i < in_length; ++i) {
41 const float old_value = queue_.front();
42 queue_.pop();
43 queue_.push(in[i]);
44
45 sum_ += in[i] - old_value;
46 sum_of_squares_ += in[i] * in[i] - old_value * old_value;
47 first[i] = sum_ / length_;
48 second[i] = sum_of_squares_ / length_;
49 }
50}
51
52} // namespace webrtc