|  | /* | 
|  | *  Copyright (c) 2019 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_NS_NOISE_ESTIMATOR_H_ | 
|  | #define MODULES_AUDIO_PROCESSING_NS_NOISE_ESTIMATOR_H_ | 
|  |  | 
|  | #include <array> | 
|  |  | 
|  | #include "api/array_view.h" | 
|  | #include "modules/audio_processing/ns/ns_common.h" | 
|  | #include "modules/audio_processing/ns/quantile_noise_estimator.h" | 
|  | #include "modules/audio_processing/ns/suppression_params.h" | 
|  |  | 
|  | namespace webrtc { | 
|  |  | 
|  | // Class for estimating the spectral characteristics of the noise in an incoming | 
|  | // signal. | 
|  | class NoiseEstimator { | 
|  | public: | 
|  | explicit NoiseEstimator(const SuppressionParams& suppression_params); | 
|  |  | 
|  | // Prepare the estimator for analysis of a new frame. | 
|  | void PrepareAnalysis(); | 
|  |  | 
|  | // Performs the first step of the estimator update. | 
|  | void PreUpdate(int32_t num_analyzed_frames, | 
|  | rtc::ArrayView<const float, kFftSizeBy2Plus1> signal_spectrum, | 
|  | float signal_spectral_sum); | 
|  |  | 
|  | // Performs the second step of the estimator update. | 
|  | void PostUpdate( | 
|  | rtc::ArrayView<const float> speech_probability, | 
|  | rtc::ArrayView<const float, kFftSizeBy2Plus1> signal_spectrum); | 
|  |  | 
|  | // Returns the noise spectral estimate. | 
|  | rtc::ArrayView<const float, kFftSizeBy2Plus1> get_noise_spectrum() const { | 
|  | return noise_spectrum_; | 
|  | } | 
|  |  | 
|  | // Returns the noise from the previous frame. | 
|  | rtc::ArrayView<const float, kFftSizeBy2Plus1> get_prev_noise_spectrum() | 
|  | const { | 
|  | return prev_noise_spectrum_; | 
|  | } | 
|  |  | 
|  | // Returns a noise spectral estimate based on white and pink noise parameters. | 
|  | rtc::ArrayView<const float, kFftSizeBy2Plus1> get_parametric_noise_spectrum() | 
|  | const { | 
|  | return parametric_noise_spectrum_; | 
|  | } | 
|  | rtc::ArrayView<const float, kFftSizeBy2Plus1> | 
|  | get_conservative_noise_spectrum() const { | 
|  | return conservative_noise_spectrum_; | 
|  | } | 
|  |  | 
|  | private: | 
|  | const SuppressionParams& suppression_params_; | 
|  | float white_noise_level_ = 0.f; | 
|  | float pink_noise_numerator_ = 0.f; | 
|  | float pink_noise_exp_ = 0.f; | 
|  | std::array<float, kFftSizeBy2Plus1> prev_noise_spectrum_; | 
|  | std::array<float, kFftSizeBy2Plus1> conservative_noise_spectrum_; | 
|  | std::array<float, kFftSizeBy2Plus1> parametric_noise_spectrum_; | 
|  | std::array<float, kFftSizeBy2Plus1> noise_spectrum_; | 
|  | QuantileNoiseEstimator quantile_noise_estimator_; | 
|  | }; | 
|  |  | 
|  | }  // namespace webrtc | 
|  |  | 
|  | #endif  // MODULES_AUDIO_PROCESSING_NS_NOISE_ESTIMATOR_H_ |