webrtc/modules/audio_processing/agc2/agc2_testing_common.h
Alessio Bazzica 70b775d77f AGC2 noise estimator code style improvements
Code style improvements done in preparation for a bug fix (TODO added)
which requires changes in the unit tests.

Note that one expected value in the unit tests has been adjusted since
the white noise generator is now instanced in each separate test and
therefore, even if the seed remained the same, the generated sequences
differ.

Bug: webrtc:7494
Change-Id: I497513b84f50b5c66cf6241a09946ce853eb1cd2
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/214122
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Reviewed-by: Ivo Creusen <ivoc@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33636}
2021-04-07 11:57:55 +00:00

82 lines
2.1 KiB
C++

/*
* Copyright (c) 2018 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#ifndef MODULES_AUDIO_PROCESSING_AGC2_AGC2_TESTING_COMMON_H_
#define MODULES_AUDIO_PROCESSING_AGC2_AGC2_TESTING_COMMON_H_
#include <limits>
#include <vector>
#include "rtc_base/random.h"
namespace webrtc {
namespace test {
constexpr float kMinS16 =
static_cast<float>(std::numeric_limits<int16_t>::min());
constexpr float kMaxS16 =
static_cast<float>(std::numeric_limits<int16_t>::max());
// Level Estimator test parameters.
constexpr float kDecayMs = 500.f;
// Limiter parameters.
constexpr float kLimiterMaxInputLevelDbFs = 1.f;
constexpr float kLimiterKneeSmoothnessDb = 1.f;
constexpr float kLimiterCompressionRatio = 5.f;
// Returns evenly spaced `num_points` numbers over a specified interval [l, r].
std::vector<double> LinSpace(double l, double r, int num_points);
// Generates white noise.
class WhiteNoiseGenerator {
public:
WhiteNoiseGenerator(int min_amplitude, int max_amplitude);
float operator()();
private:
Random rand_gen_;
const int min_amplitude_;
const int max_amplitude_;
};
// Generates a sine function.
class SineGenerator {
public:
SineGenerator(float amplitude, float frequency_hz, int sample_rate_hz);
float operator()();
private:
const float amplitude_;
const float frequency_hz_;
const int sample_rate_hz_;
float x_radians_;
};
// Generates periodic pulses.
class PulseGenerator {
public:
PulseGenerator(float pulse_amplitude,
float no_pulse_amplitude,
float frequency_hz,
int sample_rate_hz);
float operator()();
private:
const float pulse_amplitude_;
const float no_pulse_amplitude_;
const int samples_period_;
int sample_counter_;
};
} // namespace test
} // namespace webrtc
#endif // MODULES_AUDIO_PROCESSING_AGC2_AGC2_TESTING_COMMON_H_