
BUG=314 Review URL: https://webrtc-codereview.appspot.com/1271006 git-svn-id: http://webrtc.googlecode.com/svn/trunk@3789 4adac7df-926f-26a2-2b94-8c16560cd09d
221 lines
6.8 KiB
C
221 lines
6.8 KiB
C
/*
|
|
* 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.
|
|
*/
|
|
|
|
/*
|
|
* Various help functions used by the DSP functions.
|
|
*/
|
|
|
|
#ifndef DSP_HELPFUNCTIONS_H
|
|
#define DSP_HELPFUNCTIONS_H
|
|
|
|
#include "typedefs.h"
|
|
|
|
#include "dsp.h"
|
|
|
|
/****************************************************************************
|
|
* WebRtcNetEQ_Correlator(...)
|
|
*
|
|
* Calculate signal correlation.
|
|
*
|
|
* Input:
|
|
* - inst : DSP instance
|
|
* - data : Speech history to do expand from (older history in data[-4..-1])
|
|
* - dataLen : Length of data
|
|
*
|
|
* Output:
|
|
* - corrOut : CC of downsampled signal
|
|
* - corrScale : Scale factor for correlation (-Qdomain)
|
|
*
|
|
* Return value : Length of correlated data
|
|
*/
|
|
|
|
int16_t WebRtcNetEQ_Correlator(DSPInst_t *inst,
|
|
#ifdef SCRATCH
|
|
int16_t *pw16_scratchPtr,
|
|
#endif
|
|
int16_t *pw16_data, int16_t w16_dataLen,
|
|
int16_t *pw16_corrOut,
|
|
int16_t *pw16_corrScale);
|
|
|
|
/****************************************************************************
|
|
* WebRtcNetEQ_PeakDetection(...)
|
|
*
|
|
* Peak detection with parabolic fit.
|
|
*
|
|
* Input:
|
|
* - data : Data sequence for peak detection
|
|
* - dataLen : Length of data
|
|
* - nmbPeaks : Number of peaks to detect
|
|
* - fs_mult : Sample rate multiplier
|
|
*
|
|
* Output:
|
|
* - corrIndex : Index of the peak
|
|
* - winner : Value of the peak
|
|
*
|
|
* Return value : 0 for ok
|
|
*/
|
|
|
|
int16_t WebRtcNetEQ_PeakDetection(int16_t *pw16_data, int16_t w16_dataLen,
|
|
int16_t w16_nmbPeaks, int16_t fs_mult,
|
|
int16_t *pw16_corrIndex,
|
|
int16_t *pw16_winners);
|
|
|
|
/****************************************************************************
|
|
* WebRtcNetEQ_PrblFit(...)
|
|
*
|
|
* Three-point parbola fit.
|
|
*
|
|
* Input:
|
|
* - 3pts : Three input samples
|
|
* - fs_mult : Sample rate multiplier
|
|
*
|
|
* Output:
|
|
* - Ind : Index of the peak
|
|
* - outVal : Value of the peak
|
|
*
|
|
* Return value : 0 for ok
|
|
*/
|
|
|
|
int16_t WebRtcNetEQ_PrblFit(int16_t *pw16_3pts, int16_t *pw16_Ind,
|
|
int16_t *pw16_outVal, int16_t fs_mult);
|
|
|
|
/****************************************************************************
|
|
* WebRtcNetEQ_MinDistortion(...)
|
|
*
|
|
* Find the lag that results in minimum distortion.
|
|
*
|
|
* Input:
|
|
* - data : Start of speech to perform distortion on, second vector is assumed
|
|
* to be data[-Lag]
|
|
* - minLag : Start lag
|
|
* - maxLag : End lag
|
|
* - len : Length to correlate
|
|
*
|
|
* Output:
|
|
* - dist : Distorion value
|
|
*
|
|
* Return value : Lag for minimum distortion
|
|
*/
|
|
|
|
int16_t WebRtcNetEQ_MinDistortion(const int16_t *pw16_data,
|
|
int16_t w16_minLag, int16_t w16_maxLag,
|
|
int16_t len, int32_t *pw16_dist);
|
|
|
|
/****************************************************************************
|
|
* WebRtcNetEQ_RandomVec(...)
|
|
*
|
|
* Generate random vector.
|
|
*
|
|
* Input:
|
|
* - seed : Current seed (input/output)
|
|
* - len : Number of samples to generate
|
|
* - incVal : Jump step
|
|
*
|
|
* Output:
|
|
* - randVec : Generated random vector
|
|
*/
|
|
|
|
void WebRtcNetEQ_RandomVec(uint32_t *w32_seed, int16_t *pw16_randVec,
|
|
int16_t w16_len, int16_t w16_incval);
|
|
|
|
/****************************************************************************
|
|
* WebRtcNetEQ_MixVoiceUnvoice(...)
|
|
*
|
|
* Mix voiced and unvoiced signal.
|
|
*
|
|
* Input:
|
|
* - voicedVec : Voiced input signal
|
|
* - unvoicedVec : Unvoiced input signal
|
|
* - current_vfraction : Current mixing factor
|
|
* - vfraction_change : Mixing factor change per sample
|
|
* - N : Number of samples
|
|
*
|
|
* Output:
|
|
* - outData : Mixed signal
|
|
*/
|
|
|
|
void WebRtcNetEQ_MixVoiceUnvoice(int16_t *pw16_outData, int16_t *pw16_voicedVec,
|
|
int16_t *pw16_unvoicedVec,
|
|
int16_t *w16_current_vfraction,
|
|
int16_t w16_vfraction_change, int16_t N);
|
|
|
|
/****************************************************************************
|
|
* WebRtcNetEQ_UnmuteSignal(...)
|
|
*
|
|
* Gradually reduce attenuation.
|
|
*
|
|
* Input:
|
|
* - inVec : Input signal
|
|
* - startMuteFact : Starting attenuation
|
|
* - unmuteFact : Factor to "unmute" with (Q20)
|
|
* - N : Number of samples
|
|
*
|
|
* Output:
|
|
* - outVec : Output signal
|
|
*/
|
|
|
|
void WebRtcNetEQ_UnmuteSignal(int16_t *pw16_inVec, int16_t *startMuteFact,
|
|
int16_t *pw16_outVec, int16_t unmuteFact,
|
|
int16_t N);
|
|
|
|
/****************************************************************************
|
|
* WebRtcNetEQ_MuteSignal(...)
|
|
*
|
|
* Gradually increase attenuation.
|
|
*
|
|
* Input:
|
|
* - inout : Input/output signal
|
|
* - muteSlope : Slope of muting
|
|
* - N : Number of samples
|
|
*/
|
|
|
|
void WebRtcNetEQ_MuteSignal(int16_t *pw16_inout, int16_t muteSlope,
|
|
int16_t N);
|
|
|
|
/****************************************************************************
|
|
* WebRtcNetEQ_CalcFsMult(...)
|
|
*
|
|
* Calculate the sample rate divided by 8000.
|
|
*
|
|
* Input:
|
|
* - fsHz : Sample rate in Hz in {8000, 16000, 32000, 48000}.
|
|
*
|
|
* Return value : fsHz/8000 for the valid values, 1 for other inputs
|
|
*/
|
|
|
|
int16_t WebRtcNetEQ_CalcFsMult(uint16_t fsHz);
|
|
|
|
/****************************************************************************
|
|
* WebRtcNetEQ_DownSampleTo4kHz(...)
|
|
*
|
|
* Lowpass filter and downsample a signal to 4 kHz sample rate.
|
|
*
|
|
* Input:
|
|
* - in : Input signal samples.
|
|
* - inLen : Number of input samples.
|
|
* - inFsHz : Input sample rate in Hz.
|
|
* - outLen : Desired number of samples in decimated signal.
|
|
* - compensateDelay : If non-zero, compensate for the phase delay of
|
|
* of the anti-alias filter.
|
|
*
|
|
* Output:
|
|
* - out : Output signal samples.
|
|
*
|
|
* Return value : 0 - Ok
|
|
* -1 - Error
|
|
*
|
|
*/
|
|
|
|
int WebRtcNetEQ_DownSampleTo4kHz(const int16_t *in, int inLen, uint16_t inFsHz,
|
|
int16_t *out, int outLen, int compensateDelay);
|
|
|
|
#endif
|
|
|