/* * 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_RNN_VAD_SPECTRAL_FEATURES_H_ #define MODULES_AUDIO_PROCESSING_AGC2_RNN_VAD_SPECTRAL_FEATURES_H_ #include #include #include #include #include "api/array_view.h" #include "modules/audio_processing/agc2/rnn_vad/common.h" #include "modules/audio_processing/agc2/rnn_vad/ring_buffer.h" #include "modules/audio_processing/agc2/rnn_vad/spectral_features_internal.h" #include "modules/audio_processing/agc2/rnn_vad/symmetric_matrix_buffer.h" #include "modules/audio_processing/utility/pffft_wrapper.h" namespace webrtc { namespace rnn_vad { // Class to compute spectral features. class SpectralFeaturesExtractor { public: SpectralFeaturesExtractor(); SpectralFeaturesExtractor(const SpectralFeaturesExtractor&) = delete; SpectralFeaturesExtractor& operator=(const SpectralFeaturesExtractor&) = delete; ~SpectralFeaturesExtractor(); // Resets the internal state of the feature extractor. void Reset(); // Analyzes a pair of reference and lagged frames from the pitch buffer, // detects silence and computes features. If silence is detected, the output // is neither computed nor written. bool CheckSilenceComputeFeatures( rtc::ArrayView reference_frame, rtc::ArrayView lagged_frame, rtc::ArrayView higher_bands_cepstrum, rtc::ArrayView average, rtc::ArrayView first_derivative, rtc::ArrayView second_derivative, rtc::ArrayView bands_cross_corr, float* variability); private: void ComputeAvgAndDerivatives( rtc::ArrayView average, rtc::ArrayView first_derivative, rtc::ArrayView second_derivative) const; void ComputeNormalizedCepstralCorrelation( rtc::ArrayView bands_cross_corr); float ComputeVariability() const; const std::array half_window_; Pffft fft_; std::unique_ptr fft_buffer_; std::unique_ptr reference_frame_fft_; std::unique_ptr lagged_frame_fft_; SpectralCorrelator spectral_correlator_; std::array reference_frame_bands_energy_; std::array lagged_frame_bands_energy_; std::array bands_cross_corr_; const std::array dct_table_; RingBuffer cepstral_coeffs_ring_buf_; SymmetricMatrixBuffer cepstral_diffs_buf_; }; } // namespace rnn_vad } // namespace webrtc #endif // MODULES_AUDIO_PROCESSING_AGC2_RNN_VAD_SPECTRAL_FEATURES_H_