| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 | 
							- /*
 
-  *  Copyright (c) 2017 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_AEC3_SUPPRESSION_GAIN_H_
 
- #define MODULES_AUDIO_PROCESSING_AEC3_SUPPRESSION_GAIN_H_
 
- #include <array>
 
- #include <memory>
 
- #include <vector>
 
- #include "absl/types/optional.h"
 
- #include "api/array_view.h"
 
- #include "api/audio/echo_canceller3_config.h"
 
- #include "modules/audio_processing/aec3/aec3_common.h"
 
- #include "modules/audio_processing/aec3/aec_state.h"
 
- #include "modules/audio_processing/aec3/fft_data.h"
 
- #include "modules/audio_processing/aec3/moving_average.h"
 
- #include "modules/audio_processing/aec3/nearend_detector.h"
 
- #include "modules/audio_processing/aec3/render_signal_analyzer.h"
 
- #include "modules/audio_processing/logging/apm_data_dumper.h"
 
- #include "rtc_base/constructor_magic.h"
 
- namespace webrtc {
 
- class SuppressionGain {
 
-  public:
 
-   SuppressionGain(const EchoCanceller3Config& config,
 
-                   Aec3Optimization optimization,
 
-                   int sample_rate_hz,
 
-                   size_t num_capture_channels);
 
-   ~SuppressionGain();
 
-   void GetGain(
 
-       rtc::ArrayView<const std::array<float, kFftLengthBy2Plus1>>
 
-           nearend_spectrum,
 
-       rtc::ArrayView<const std::array<float, kFftLengthBy2Plus1>> echo_spectrum,
 
-       rtc::ArrayView<const std::array<float, kFftLengthBy2Plus1>>
 
-           residual_echo_spectrum,
 
-       rtc::ArrayView<const std::array<float, kFftLengthBy2Plus1>>
 
-           comfort_noise_spectrum,
 
-       const RenderSignalAnalyzer& render_signal_analyzer,
 
-       const AecState& aec_state,
 
-       const std::vector<std::vector<std::vector<float>>>& render,
 
-       float* high_bands_gain,
 
-       std::array<float, kFftLengthBy2Plus1>* low_band_gain);
 
-   // Toggles the usage of the initial state.
 
-   void SetInitialState(bool state);
 
-  private:
 
-   // Computes the gain to apply for the bands beyond the first band.
 
-   float UpperBandsGain(
 
-       rtc::ArrayView<const std::array<float, kFftLengthBy2Plus1>> echo_spectrum,
 
-       rtc::ArrayView<const std::array<float, kFftLengthBy2Plus1>>
 
-           comfort_noise_spectrum,
 
-       const absl::optional<int>& narrow_peak_band,
 
-       bool saturated_echo,
 
-       const std::vector<std::vector<std::vector<float>>>& render,
 
-       const std::array<float, kFftLengthBy2Plus1>& low_band_gain) const;
 
-   void GainToNoAudibleEcho(const std::array<float, kFftLengthBy2Plus1>& nearend,
 
-                            const std::array<float, kFftLengthBy2Plus1>& echo,
 
-                            const std::array<float, kFftLengthBy2Plus1>& masker,
 
-                            std::array<float, kFftLengthBy2Plus1>* gain) const;
 
-   void LowerBandGain(
 
-       bool stationary_with_low_power,
 
-       const AecState& aec_state,
 
-       rtc::ArrayView<const std::array<float, kFftLengthBy2Plus1>>
 
-           suppressor_input,
 
-       rtc::ArrayView<const std::array<float, kFftLengthBy2Plus1>> residual_echo,
 
-       rtc::ArrayView<const std::array<float, kFftLengthBy2Plus1>> comfort_noise,
 
-       std::array<float, kFftLengthBy2Plus1>* gain);
 
-   void GetMinGain(rtc::ArrayView<const float> weighted_residual_echo,
 
-                   rtc::ArrayView<const float> last_nearend,
 
-                   rtc::ArrayView<const float> last_echo,
 
-                   bool low_noise_render,
 
-                   bool saturated_echo,
 
-                   rtc::ArrayView<float> min_gain) const;
 
-   void GetMaxGain(rtc::ArrayView<float> max_gain) const;
 
-   class LowNoiseRenderDetector {
 
-    public:
 
-     bool Detect(const std::vector<std::vector<std::vector<float>>>& render);
 
-    private:
 
-     float average_power_ = 32768.f * 32768.f;
 
-   };
 
-   struct GainParameters {
 
-     explicit GainParameters(
 
-         const EchoCanceller3Config::Suppressor::Tuning& tuning);
 
-     const float max_inc_factor;
 
-     const float max_dec_factor_lf;
 
-     std::array<float, kFftLengthBy2Plus1> enr_transparent_;
 
-     std::array<float, kFftLengthBy2Plus1> enr_suppress_;
 
-     std::array<float, kFftLengthBy2Plus1> emr_transparent_;
 
-   };
 
-   static int instance_count_;
 
-   std::unique_ptr<ApmDataDumper> data_dumper_;
 
-   const Aec3Optimization optimization_;
 
-   const EchoCanceller3Config config_;
 
-   const size_t num_capture_channels_;
 
-   const int state_change_duration_blocks_;
 
-   std::array<float, kFftLengthBy2Plus1> last_gain_;
 
-   std::vector<std::array<float, kFftLengthBy2Plus1>> last_nearend_;
 
-   std::vector<std::array<float, kFftLengthBy2Plus1>> last_echo_;
 
-   LowNoiseRenderDetector low_render_detector_;
 
-   bool initial_state_ = true;
 
-   int initial_state_change_counter_ = 0;
 
-   std::vector<aec3::MovingAverage> nearend_smoothers_;
 
-   const GainParameters nearend_params_;
 
-   const GainParameters normal_params_;
 
-   std::unique_ptr<NearendDetector> dominant_nearend_detector_;
 
-   RTC_DISALLOW_COPY_AND_ASSIGN(SuppressionGain);
 
- };
 
- }  // namespace webrtc
 
- #endif  // MODULES_AUDIO_PROCESSING_AEC3_SUPPRESSION_GAIN_H_
 
 
  |