| /* |
| * 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_COMMON_H_ |
| #define MODULES_AUDIO_PROCESSING_AGC2_AGC2_COMMON_H_ |
| |
| #include <stddef.h> |
| |
| namespace webrtc { |
| |
| constexpr float kMinFloatS16Value = -32768.f; |
| constexpr float kMaxFloatS16Value = 32767.f; |
| constexpr float kMaxAbsFloatS16Value = 32768.0f; |
| |
| constexpr size_t kFrameDurationMs = 10; |
| constexpr size_t kSubFramesInFrame = 20; |
| constexpr size_t kMaximalNumberOfSamplesPerChannel = 480; |
| |
| constexpr float kAttackFilterConstant = 0.f; |
| |
| // Adaptive digital gain applier settings below. |
| constexpr float kMaxGainChangePerSecondDb = 3.f; |
| constexpr float kMaxGainChangePerFrameDb = |
| kMaxGainChangePerSecondDb * kFrameDurationMs / 1000.f; |
| constexpr float kHeadroomDbfs = 1.f; |
| constexpr float kMaxGainDb = 30.f; |
| constexpr float kInitialAdaptiveDigitalGainDb = 8.f; |
| // At what limiter levels should we start decreasing the adaptive digital gain. |
| constexpr float kLimiterThresholdForAgcGainDbfs = -kHeadroomDbfs; |
| |
| // This parameter must be tuned together with the noise estimator. |
| constexpr float kMaxNoiseLevelDbfs = -50.f; |
| |
| // This is the threshold for speech. Speech frames are used for updating the |
| // speech level, measuring the amount of speech, and decide when to allow target |
| // gain reduction. |
| constexpr float kVadConfidenceThreshold = 0.9f; |
| |
| // The amount of 'memory' of the Level Estimator. Decides leak factors. |
| constexpr size_t kFullBufferSizeMs = 1200; |
| constexpr float kFullBufferLeakFactor = 1.f - 1.f / kFullBufferSizeMs; |
| |
| constexpr float kInitialSpeechLevelEstimateDbfs = -30.f; |
| |
| // Saturation Protector settings. |
| float GetInitialSaturationMarginDb(); |
| float GetExtraSaturationMarginOffsetDb(); |
| |
| constexpr size_t kPeakEnveloperSuperFrameLengthMs = 400; |
| static_assert(kFullBufferSizeMs % kPeakEnveloperSuperFrameLengthMs == 0, |
| "Full buffer size should be a multiple of super frame length for " |
| "optimal Saturation Protector performance."); |
| |
| constexpr size_t kPeakEnveloperBufferSize = |
| kFullBufferSizeMs / kPeakEnveloperSuperFrameLengthMs + 1; |
| |
| // This value is 10 ** (-1/20 * frame_size_ms / satproc_attack_ms), |
| // where satproc_attack_ms is 5000. |
| constexpr float kSaturationProtectorAttackConstant = 0.9988493699365052f; |
| |
| // This value is 10 ** (-1/20 * frame_size_ms / satproc_decay_ms), |
| // where satproc_decay_ms is 1000. |
| constexpr float kSaturationProtectorDecayConstant = 0.9997697679981565f; |
| |
| // This is computed from kDecayMs by |
| // 10 ** (-1/20 * subframe_duration / kDecayMs). |
| // |subframe_duration| is |kFrameDurationMs / kSubFramesInFrame|. |
| // kDecayMs is defined in agc2_testing_common.h |
| constexpr float kDecayFilterConstant = 0.9998848773724686f; |
| |
| // Number of interpolation points for each region of the limiter. |
| // These values have been tuned to limit the interpolated gain curve error given |
| // the limiter parameters and allowing a maximum error of +/- 32768^-1. |
| constexpr size_t kInterpolatedGainCurveKneePoints = 22; |
| constexpr size_t kInterpolatedGainCurveBeyondKneePoints = 10; |
| constexpr size_t kInterpolatedGainCurveTotalPoints = |
| kInterpolatedGainCurveKneePoints + kInterpolatedGainCurveBeyondKneePoints; |
| |
| } // namespace webrtc |
| |
| #endif // MODULES_AUDIO_PROCESSING_AGC2_AGC2_COMMON_H_ |