blob: bc0b6f0b9193a7f09cb73d1e343ed0a6b8d3b782 [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
11#include "webrtc/modules/audio_processing/transient/moving_moments.h"
12
13#include <math.h>
14#include <string.h>
15
kwiberg85d8bb02016-02-16 20:39:36 -080016#include "webrtc/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) {
kwiberg85d8bb02016-02-16 20:39:36 -080025 RTC_DCHECK_GT(length, 0u);
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) {
kwiberg85d8bb02016-02-16 20:39:36 -080035 RTC_DCHECK(in && in_length > 0 && first && second);
pbos@webrtc.org788acd12014-12-15 09:41:24 +000036
37 for (size_t i = 0; i < in_length; ++i) {
38 const float old_value = queue_.front();
39 queue_.pop();
40 queue_.push(in[i]);
41
42 sum_ += in[i] - old_value;
43 sum_of_squares_ += in[i] * in[i] - old_value * old_value;
44 first[i] = sum_ / length_;
45 second[i] = sum_of_squares_ / length_;
46 }
47}
48
49} // namespace webrtc