1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifndef WEBRTC_MODULES_AUDIO_PROCESSING_NS_MAIN_SOURCE_NSX_CORE_H_ 12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WEBRTC_MODULES_AUDIO_PROCESSING_NS_MAIN_SOURCE_NSX_CORE_H_ 13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef NS_FILEDEBUG 15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <stdio.h> 16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 18bc2021598db16f4355c064bad9355bb73d59456fbjornv@webrtc.org#include "webrtc/common_audio/signal_processing/include/signal_processing_library.h" 19bc2021598db16f4355c064bad9355bb73d59456fbjornv@webrtc.org#include "webrtc/modules/audio_processing/ns/nsx_defines.h" 20bc2021598db16f4355c064bad9355bb73d59456fbjornv@webrtc.org#include "webrtc/typedefs.h" 21bc2021598db16f4355c064bad9355bb73d59456fbjornv@webrtc.org 22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgtypedef struct NsxInst_t_ { 233f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org uint32_t fs; 243f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org 253f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org const int16_t* window; 263f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org int16_t analysisBuffer[ANAL_BLOCKL_MAX]; 273f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org int16_t synthesisBuffer[ANAL_BLOCKL_MAX]; 283f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org uint16_t noiseSupFilter[HALF_ANAL_BLOCKL]; 293f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org uint16_t overdrive; /* Q8 */ 303f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org uint16_t denoiseBound; /* Q14 */ 313f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org const int16_t* factor2Table; 323f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org int16_t noiseEstLogQuantile[SIMULT* HALF_ANAL_BLOCKL]; 333f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org int16_t noiseEstDensity[SIMULT* HALF_ANAL_BLOCKL]; 343f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org int16_t noiseEstCounter[SIMULT]; 353f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org int16_t noiseEstQuantile[HALF_ANAL_BLOCKL]; 36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 37aecc559aad6adc94be5f25fed8847fa7be066488kma@webrtc.org int anaLen; 38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int anaLen2; 39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int magnLen; 40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int aggrMode; 41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int stages; 42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int initFlag; 43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int gainMap; 44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 453f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org int32_t maxLrt; 463f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org int32_t minLrt; 47bc2021598db16f4355c064bad9355bb73d59456fbjornv@webrtc.org // Log LRT factor with time-smoothing in Q8. 483f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org int32_t logLrtTimeAvgW32[HALF_ANAL_BLOCKL]; 493f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org int32_t featureLogLrt; 503f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org int32_t thresholdLogLrt; 513f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org int16_t weightLogLrt; 52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 533f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org uint32_t featureSpecDiff; 543f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org uint32_t thresholdSpecDiff; 553f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org int16_t weightSpecDiff; 56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 573f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org uint32_t featureSpecFlat; 583f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org uint32_t thresholdSpecFlat; 593f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org int16_t weightSpecFlat; 60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 61bc2021598db16f4355c064bad9355bb73d59456fbjornv@webrtc.org // Conservative estimate of noise spectrum. 623f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org int32_t avgMagnPause[HALF_ANAL_BLOCKL]; 633f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org uint32_t magnEnergy; 643f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org uint32_t sumMagn; 653f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org uint32_t curAvgMagnEnergy; 663f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org uint32_t timeAvgMagnEnergy; 673f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org uint32_t timeAvgMagnEnergyTmp; 683f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org 693f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org uint32_t whiteNoiseLevel; // Initial noise estimate. 70bc2021598db16f4355c064bad9355bb73d59456fbjornv@webrtc.org // Initial magnitude spectrum estimate. 713f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org uint32_t initMagnEst[HALF_ANAL_BLOCKL]; 72bc2021598db16f4355c064bad9355bb73d59456fbjornv@webrtc.org // Pink noise parameters: 733f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org int32_t pinkNoiseNumerator; // Numerator. 743f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org int32_t pinkNoiseExp; // Power of freq. 75bc2021598db16f4355c064bad9355bb73d59456fbjornv@webrtc.org int minNorm; // Smallest normalization factor. 76bc2021598db16f4355c064bad9355bb73d59456fbjornv@webrtc.org int zeroInputSignal; // Zero input signal flag. 77bc2021598db16f4355c064bad9355bb73d59456fbjornv@webrtc.org 78bc2021598db16f4355c064bad9355bb73d59456fbjornv@webrtc.org // Noise spectrum from previous frame. 793f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org uint32_t prevNoiseU32[HALF_ANAL_BLOCKL]; 80bc2021598db16f4355c064bad9355bb73d59456fbjornv@webrtc.org // Magnitude spectrum from previous frame. 813f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org uint16_t prevMagnU16[HALF_ANAL_BLOCKL]; 82bc2021598db16f4355c064bad9355bb73d59456fbjornv@webrtc.org // Prior speech/noise probability in Q14. 833f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org int16_t priorNonSpeechProb; 84bc2021598db16f4355c064bad9355bb73d59456fbjornv@webrtc.org 85bc2021598db16f4355c064bad9355bb73d59456fbjornv@webrtc.org int blockIndex; // Frame index counter. 86bc2021598db16f4355c064bad9355bb73d59456fbjornv@webrtc.org // Parameter for updating or estimating thresholds/weights for prior model. 87bc2021598db16f4355c064bad9355bb73d59456fbjornv@webrtc.org int modelUpdate; 88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int cntThresUpdate; 89b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 90bc2021598db16f4355c064bad9355bb73d59456fbjornv@webrtc.org // Histograms for parameter estimation. 913f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org int16_t histLrt[HIST_PAR_EST]; 923f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org int16_t histSpecFlat[HIST_PAR_EST]; 933f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org int16_t histSpecDiff[HIST_PAR_EST]; 94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 95bc2021598db16f4355c064bad9355bb73d59456fbjornv@webrtc.org // Quantities for high band estimate. 963f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org int16_t dataBufHBFX[ANAL_BLOCKL_MAX]; // Q0 97b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 98b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int qNoise; 99b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int prevQNoise; 100b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int prevQMagn; 101b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int blockLen10ms; 102b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1033f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org int16_t real[ANAL_BLOCKL_MAX]; 1043f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org int16_t imag[ANAL_BLOCKL_MAX]; 1053f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.org int32_t energyIn; 106b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int scaleEnergyIn; 107b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int normData; 108b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 109b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org struct RealFFT* real_fft; 110b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} NsxInst_t; 111b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 112b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef __cplusplus 113b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgextern "C" 114b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 115b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 116b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 117b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/**************************************************************************** 118b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * WebRtcNsx_InitCore(...) 119b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 120b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * This function initializes a noise suppression instance 121b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 122b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Input: 123b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - inst : Instance that should be initialized 124b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - fs : Sampling frequency 125b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 126b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Output: 127b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - inst : Initialized instance 128b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 129b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Return value : 0 - Ok 130b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * -1 - Error 131b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 1323f6d5e0bded85b8b0d055da8fa49e8d7137fe8edpbos@webrtc.orgint32_t WebRtcNsx_InitCore(NsxInst_t* inst, uint32_t fs); 133b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 134b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/**************************************************************************** 135b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * WebRtcNsx_set_policy_core(...) 136b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 137b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * This changes the aggressiveness of the noise suppression method. 138b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 139b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Input: 140b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - inst : Instance that should be initialized 141b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - mode : 0: Mild (6 dB), 1: Medium (10 dB), 2: Aggressive (15 dB) 142b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 143b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Output: 144b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - inst : Initialized instance 145b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 146b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Return value : 0 - Ok 147b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * -1 - Error 148b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 149b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint WebRtcNsx_set_policy_core(NsxInst_t* inst, int mode); 150b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 151b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/**************************************************************************** 152b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * WebRtcNsx_ProcessCore 153b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 154b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Do noise suppression. 155b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 156b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Input: 157b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - inst : Instance that should be initialized 158b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - inFrameLow : Input speech frame for lower band 159b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - inFrameHigh : Input speech frame for higher band 160b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 161b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Output: 162b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - inst : Updated instance 163b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - outFrameLow : Output speech frame for lower band 164b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * - outFrameHigh : Output speech frame for higher band 165b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 166b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Return value : 0 - OK 167b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * -1 - Error 168b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 169b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint WebRtcNsx_ProcessCore(NsxInst_t* inst, 170b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org short* inFrameLow, 171b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org short* inFrameHigh, 172b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org short* outFrameLow, 173b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org short* outFrameHigh); 174b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 175b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/**************************************************************************** 176b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Some function pointers, for internal functions shared by ARM NEON and 177b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * generic C code. 178b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 179b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Noise Estimation. 180b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgtypedef void (*NoiseEstimation)(NsxInst_t* inst, 181b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org uint16_t* magn, 182b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org uint32_t* noise, 183b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int16_t* q_noise); 184b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgextern NoiseEstimation WebRtcNsx_NoiseEstimation; 185b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 186b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Filter the data in the frequency domain, and create spectrum. 187b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgtypedef void (*PrepareSpectrum)(NsxInst_t* inst, 188b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int16_t* freq_buff); 189b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgextern PrepareSpectrum WebRtcNsx_PrepareSpectrum; 190b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 191b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// For the noise supression process, synthesis, read out fully processed 192b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// segment, and update synthesis buffer. 193b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgtypedef void (*SynthesisUpdate)(NsxInst_t* inst, 194b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int16_t* out_frame, 195b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int16_t gain_factor); 196b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgextern SynthesisUpdate WebRtcNsx_SynthesisUpdate; 197b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 198b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Update analysis buffer for lower band, and window data before FFT. 199b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgtypedef void (*AnalysisUpdate)(NsxInst_t* inst, 200b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int16_t* out, 201b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int16_t* new_speech); 202b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgextern AnalysisUpdate WebRtcNsx_AnalysisUpdate; 203b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 204556423fc442dd37b8140a86b87f818ba2de4931bandrew@webrtc.org// Denormalize the real-valued signal |in|, the output from inverse FFT. 205556423fc442dd37b8140a86b87f818ba2de4931bandrew@webrtc.orgtypedef void (*Denormalize) (NsxInst_t* inst, int16_t* in, int factor); 206556423fc442dd37b8140a86b87f818ba2de4931bandrew@webrtc.orgextern Denormalize WebRtcNsx_Denormalize; 207556423fc442dd37b8140a86b87f818ba2de4931bandrew@webrtc.org 208556423fc442dd37b8140a86b87f818ba2de4931bandrew@webrtc.org// Normalize the real-valued signal |in|, the input to forward FFT. 209556423fc442dd37b8140a86b87f818ba2de4931bandrew@webrtc.orgtypedef void (*NormalizeRealBuffer) (NsxInst_t* inst, 210556423fc442dd37b8140a86b87f818ba2de4931bandrew@webrtc.org const int16_t* in, 211556423fc442dd37b8140a86b87f818ba2de4931bandrew@webrtc.org int16_t* out); 212556423fc442dd37b8140a86b87f818ba2de4931bandrew@webrtc.orgextern NormalizeRealBuffer WebRtcNsx_NormalizeRealBuffer; 213556423fc442dd37b8140a86b87f818ba2de4931bandrew@webrtc.org 214556423fc442dd37b8140a86b87f818ba2de4931bandrew@webrtc.org// Compute speech/noise probability. 215556423fc442dd37b8140a86b87f818ba2de4931bandrew@webrtc.org// Intended to be private. 216556423fc442dd37b8140a86b87f818ba2de4931bandrew@webrtc.orgvoid WebRtcNsx_SpeechNoiseProb(NsxInst_t* inst, 217556423fc442dd37b8140a86b87f818ba2de4931bandrew@webrtc.org uint16_t* nonSpeechProbFinal, 218556423fc442dd37b8140a86b87f818ba2de4931bandrew@webrtc.org uint32_t* priorLocSnr, 219556423fc442dd37b8140a86b87f818ba2de4931bandrew@webrtc.org uint32_t* postLocSnr); 220556423fc442dd37b8140a86b87f818ba2de4931bandrew@webrtc.org 221b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if (defined WEBRTC_DETECT_ARM_NEON) || defined (WEBRTC_ARCH_ARM_NEON) 222b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// For the above function pointers, functions for generic platforms are declared 223b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// and defined as static in file nsx_core.c, while those for ARM Neon platforms 224b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// are declared below and defined in file nsx_core_neon.S. 225b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid WebRtcNsx_NoiseEstimationNeon(NsxInst_t* inst, 226b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org uint16_t* magn, 227b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org uint32_t* noise, 228b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int16_t* q_noise); 229b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid WebRtcNsx_SynthesisUpdateNeon(NsxInst_t* inst, 230b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int16_t* out_frame, 231b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int16_t gain_factor); 232b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid WebRtcNsx_AnalysisUpdateNeon(NsxInst_t* inst, 233b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int16_t* out, 234b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int16_t* new_speech); 235b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid WebRtcNsx_PrepareSpectrumNeon(NsxInst_t* inst, int16_t* freq_buff); 236b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 237b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 238556423fc442dd37b8140a86b87f818ba2de4931bandrew@webrtc.org#if defined(MIPS32_LE) 239556423fc442dd37b8140a86b87f818ba2de4931bandrew@webrtc.org// For the above function pointers, functions for generic platforms are declared 240556423fc442dd37b8140a86b87f818ba2de4931bandrew@webrtc.org// and defined as static in file nsx_core.c, while those for MIPS platforms 241556423fc442dd37b8140a86b87f818ba2de4931bandrew@webrtc.org// are declared below and defined in file nsx_core_mips.c. 242556423fc442dd37b8140a86b87f818ba2de4931bandrew@webrtc.orgvoid WebRtcNsx_SynthesisUpdate_mips(NsxInst_t* inst, 243556423fc442dd37b8140a86b87f818ba2de4931bandrew@webrtc.org int16_t* out_frame, 244556423fc442dd37b8140a86b87f818ba2de4931bandrew@webrtc.org int16_t gain_factor); 245556423fc442dd37b8140a86b87f818ba2de4931bandrew@webrtc.orgvoid WebRtcNsx_AnalysisUpdate_mips(NsxInst_t* inst, 246556423fc442dd37b8140a86b87f818ba2de4931bandrew@webrtc.org int16_t* out, 247556423fc442dd37b8140a86b87f818ba2de4931bandrew@webrtc.org int16_t* new_speech); 248556423fc442dd37b8140a86b87f818ba2de4931bandrew@webrtc.orgvoid WebRtcNsx_PrepareSpectrum_mips(NsxInst_t* inst, int16_t* freq_buff); 249556423fc442dd37b8140a86b87f818ba2de4931bandrew@webrtc.orgvoid WebRtcNsx_NormalizeRealBuffer_mips(NsxInst_t* inst, 250556423fc442dd37b8140a86b87f818ba2de4931bandrew@webrtc.org const int16_t* in, 251556423fc442dd37b8140a86b87f818ba2de4931bandrew@webrtc.org int16_t* out); 252556423fc442dd37b8140a86b87f818ba2de4931bandrew@webrtc.org#if defined(MIPS_DSP_R1_LE) 253556423fc442dd37b8140a86b87f818ba2de4931bandrew@webrtc.orgvoid WebRtcNsx_Denormalize_mips(NsxInst_t* inst, int16_t* in, int factor); 254556423fc442dd37b8140a86b87f818ba2de4931bandrew@webrtc.org#endif 255556423fc442dd37b8140a86b87f818ba2de4931bandrew@webrtc.org 256556423fc442dd37b8140a86b87f818ba2de4931bandrew@webrtc.org#endif 257556423fc442dd37b8140a86b87f818ba2de4931bandrew@webrtc.org 258b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef __cplusplus 259b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 260b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 261b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 262b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif // WEBRTC_MODULES_AUDIO_PROCESSING_NS_MAIN_SOURCE_NSX_CORE_H_ 263