| /* |
| * 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_COMPUTE_INTERPOLATED_GAIN_CURVE_H_ |
| #define MODULES_AUDIO_PROCESSING_AGC2_COMPUTE_INTERPOLATED_GAIN_CURVE_H_ |
| |
| #include <array> |
| |
| #include "modules/audio_processing/agc2/agc2_common.h" |
| |
| namespace webrtc { |
| |
| namespace test { |
| |
| // Parameters for interpolated gain curve using under-approximation to |
| // avoid saturation. |
| // |
| // The saturation gain is defined in order to let hard-clipping occur for |
| // those samples having a level that falls in the saturation region. It is an |
| // upper bound of the actual gain to apply - i.e., that returned by the |
| // limiter. |
| |
| // Knee and beyond-knee regions approximation parameters. |
| // The gain curve is approximated as a piece-wise linear function. |
| // |approx_params_x_| are the boundaries between adjacent linear pieces, |
| // |approx_params_m_| and |approx_params_q_| are the slope and the y-intercept |
| // values of each piece. |
| struct InterpolatedParameters { |
| std::array<float, kInterpolatedGainCurveTotalPoints> |
| computed_approximation_params_x; |
| std::array<float, kInterpolatedGainCurveTotalPoints> |
| computed_approximation_params_m; |
| std::array<float, kInterpolatedGainCurveTotalPoints> |
| computed_approximation_params_q; |
| }; |
| |
| InterpolatedParameters ComputeInterpolatedGainCurveApproximationParams(); |
| } // namespace test |
| } // namespace webrtc |
| |
| #endif // MODULES_AUDIO_PROCESSING_AGC2_COMPUTE_INTERPOLATED_GAIN_CURVE_H_ |