/* * Copyright (c) 2011 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 WEBRTC_MODULES_AUDIO_PROCESSING_NS_NS_CORE_H_ #define WEBRTC_MODULES_AUDIO_PROCESSING_NS_NS_CORE_H_ #include "webrtc/modules/audio_processing/ns/defines.h" typedef struct NSParaExtract_ { // Bin size of histogram. float binSizeLrt; float binSizeSpecFlat; float binSizeSpecDiff; // Range of histogram over which LRT threshold is computed. float rangeAvgHistLrt; // Scale parameters: multiply dominant peaks of the histograms by scale factor // to obtain thresholds for prior model. float factor1ModelPars; // For LRT and spectral difference. float factor2ModelPars; // For spectral_flatness: used when noise is flatter // than speech. // Peak limit for spectral flatness (varies between 0 and 1). float thresPosSpecFlat; // Limit on spacing of two highest peaks in histogram: spacing determined by // bin size. float limitPeakSpacingSpecFlat; float limitPeakSpacingSpecDiff; // Limit on relevance of second peak. float limitPeakWeightsSpecFlat; float limitPeakWeightsSpecDiff; // Limit on fluctuation of LRT feature. float thresFluctLrt; // Limit on the max and min values for the feature thresholds. float maxLrt; float minLrt; float maxSpecFlat; float minSpecFlat; float maxSpecDiff; float minSpecDiff; // Criteria of weight of histogram peak to accept/reject feature. int thresWeightSpecFlat; int thresWeightSpecDiff; } NSParaExtract; typedef struct NoiseSuppressionC_ { uint32_t fs; size_t blockLen; size_t windShift; size_t anaLen; size_t magnLen; int aggrMode; const float* window; float analyzeBuf[ANAL_BLOCKL_MAX]; float dataBuf[ANAL_BLOCKL_MAX]; float syntBuf[ANAL_BLOCKL_MAX]; int initFlag; // Parameters for quantile noise estimation. float density[SIMULT * HALF_ANAL_BLOCKL]; float lquantile[SIMULT * HALF_ANAL_BLOCKL]; float quantile[HALF_ANAL_BLOCKL]; int counter[SIMULT]; int updates; // Parameters for Wiener filter. float smooth[HALF_ANAL_BLOCKL]; float overdrive; float denoiseBound; int gainmap; // FFT work arrays. size_t ip[IP_LENGTH]; float wfft[W_LENGTH]; // Parameters for new method: some not needed, will reduce/cleanup later. int32_t blockInd; // Frame index counter. int modelUpdatePars[4]; // Parameters for updating or estimating. // Thresholds/weights for prior model. float priorModelPars[7]; // Parameters for prior model. float noise[HALF_ANAL_BLOCKL]; // Noise spectrum from current frame. float noisePrev[HALF_ANAL_BLOCKL]; // Noise spectrum from previous frame. // Magnitude spectrum of previous analyze frame. float magnPrevAnalyze[HALF_ANAL_BLOCKL]; // Magnitude spectrum of previous process frame. float magnPrevProcess[HALF_ANAL_BLOCKL]; float logLrtTimeAvg[HALF_ANAL_BLOCKL]; // Log LRT factor with time-smoothing. float priorSpeechProb; // Prior speech/noise probability. float featureData[7]; // Conservative noise spectrum estimate. float magnAvgPause[HALF_ANAL_BLOCKL]; float signalEnergy; // Energy of |magn|. float sumMagn; float whiteNoiseLevel; // Initial noise estimate. float initMagnEst[HALF_ANAL_BLOCKL]; // Initial magnitude spectrum estimate. float pinkNoiseNumerator; // Pink noise parameter: numerator. float pinkNoiseExp; // Pink noise parameter: power of frequencies. float parametricNoise[HALF_ANAL_BLOCKL]; // Parameters for feature extraction. NSParaExtract featureExtractionParams; // Histograms for parameter estimation. int histLrt[HIST_PAR_EST]; int histSpecFlat[HIST_PAR_EST]; int histSpecDiff[HIST_PAR_EST]; // Quantities for high band estimate. float speechProb[HALF_ANAL_BLOCKL]; // Final speech/noise prob: prior + LRT. // Buffering data for HB. float dataBufHB[NUM_HIGH_BANDS_MAX][ANAL_BLOCKL_MAX]; } NoiseSuppressionC; #ifdef __cplusplus extern "C" { #endif /**************************************************************************** * WebRtcNs_InitCore(...) * * This function initializes a noise suppression instance * * Input: * - self : Instance that should be initialized * - fs : Sampling frequency * * Output: * - self : Initialized instance * * Return value : 0 - Ok * -1 - Error */ int WebRtcNs_InitCore(NoiseSuppressionC* self, uint32_t fs); /**************************************************************************** * WebRtcNs_set_policy_core(...) * * This changes the aggressiveness of the noise suppression method. * * Input: * - self : Instance that should be initialized * - mode : 0: Mild (6dB), 1: Medium (10dB), 2: Aggressive (15dB) * * Output: * - self : Initialized instance * * Return value : 0 - Ok * -1 - Error */ int WebRtcNs_set_policy_core(NoiseSuppressionC* self, int mode); /**************************************************************************** * WebRtcNs_AnalyzeCore * * Estimate the background noise. * * Input: * - self : Instance that should be initialized * - speechFrame : Input speech frame for lower band * * Output: * - self : Updated instance */ void WebRtcNs_AnalyzeCore(NoiseSuppressionC* self, const float* speechFrame); /**************************************************************************** * WebRtcNs_ProcessCore * * Do noise suppression. * * Input: * - self : Instance that should be initialized * - inFrame : Input speech frame for each band * - num_bands : Number of bands * * Output: * - self : Updated instance * - outFrame : Output speech frame for each band */ void WebRtcNs_ProcessCore(NoiseSuppressionC* self, const float* const* inFrame, size_t num_bands, float* const* outFrame); #ifdef __cplusplus } #endif #endif // WEBRTC_MODULES_AUDIO_PROCESSING_NS_NS_CORE_H_