• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright (c) 2019 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 #ifndef MODULES_AUDIO_PROCESSING_AEC3_SUBBAND_NEAREND_DETECTOR_H_
12 #define MODULES_AUDIO_PROCESSING_AEC3_SUBBAND_NEAREND_DETECTOR_H_
13 
14 #include <vector>
15 
16 #include "api/array_view.h"
17 #include "api/audio/echo_canceller3_config.h"
18 #include "modules/audio_processing/aec3/moving_average.h"
19 #include "modules/audio_processing/aec3/nearend_detector.h"
20 
21 namespace webrtc {
22 // Class for selecting whether the suppressor is in the nearend or echo state.
23 class SubbandNearendDetector : public NearendDetector {
24  public:
25   SubbandNearendDetector(
26       const EchoCanceller3Config::Suppressor::SubbandNearendDetection& config,
27       size_t num_capture_channels);
28 
29   // Returns whether the current state is the nearend state.
IsNearendState()30   bool IsNearendState() const override { return nearend_state_; }
31 
32   // Updates the state selection based on latest spectral estimates.
33   void Update(rtc::ArrayView<const std::array<float, kFftLengthBy2Plus1>>
34                   nearend_spectrum,
35               rtc::ArrayView<const std::array<float, kFftLengthBy2Plus1>>
36                   residual_echo_spectrum,
37               rtc::ArrayView<const std::array<float, kFftLengthBy2Plus1>>
38                   comfort_noise_spectrum,
39               bool initial_state) override;
40 
41  private:
42   const EchoCanceller3Config::Suppressor::SubbandNearendDetection config_;
43   const size_t num_capture_channels_;
44   std::vector<aec3::MovingAverage> nearend_smoothers_;
45   const float one_over_subband_length1_;
46   const float one_over_subband_length2_;
47   bool nearend_state_ = false;
48 };
49 
50 }  // namespace webrtc
51 
52 #endif  // MODULES_AUDIO_PROCESSING_AEC3_SUBBAND_NEAREND_DETECTOR_H_
53