www.pudn.com > aec.rar > ec_constants.h


// file: echoc_constants.h
//
// various constants used in the echo canceller code.
//

// make sure definitions are only made once
//
#ifndef __ECHOC_CONSTANTS
#define __ECHOC_CONSTANTS

//-----------------------------------------------------------------------------
//
// i/o related constants begin here
//
//-----------------------------------------------------------------------------

// sampling frequency of input data
//
#define SAMPLE_FREQ 8000

// the maximum magnitude of a speech sample (used to prevent overflow)
// and a scaling factor to make signals exist in the range [-1,1]
//
#define AMPL_SCALE_1 3.0518509e-05
#define AMPL_SCALE_2 32767.0
#define MAX_AMPL 1.0

//-----------------------------------------------------------------------------
//
// algorithm constants begin here
//
//-----------------------------------------------------------------------------

// first-order high-pass filter
//
#define DEFAULT_GAMMA pow(2.0, -3.0)

// the number of taps in the echo canceller (N)
//
#define DEFAULT_N   8 // 256

// the number of samples used to update coefficients using the
// the block update method (M)
//
#define DEFAULT_M  8 // 16

// the adaptation speed (beta1) and max adaptation value
// note that the max allowable adaptation value needs to be adjusted somewhat
// depending on the block update interval (the less you update, the more
// you must perturb the coefficients to keep up - but we shouldn't let
// this get out of hand or the system goes unstable) It has also been
// observed that there exits an inverse relationship between beta1 and the
// filter length we choose. For example when the filter length was 128 a
// beta1=pow(2.0, -11.0) sufficed to get convergence of the algorithm, but when
// we used a filter length of 256 we had to lower beta1 to the present value.
//  
#define DEFAULT_BETA1 pow( 2.0, -10.0 )   // -11, -12 ar ok. 

// constants for the reference and near-end power computation
//
#define DEFAULT_SIGMA_LU pow(2.0, -7.0)
#define DEFAULT_SIGMA_LY pow(2.0, -7.0)
#define DEFAULT_ALPHA_ST pow(2.0, -5.0)
#define DEFAULT_ALPHA_YT pow(2.0, -5.0)

#define DEFAULT_CUTOFF pow(2.0, -15.0)

// define the near-end speech hangover counter: if near-end speech
// is declared, hcntr is set equal to hangt (see pg. 432)
//
#define DEFAULT_HANGT  600

// define the residual error suppression threshold
//
#define DEFAULT_SUPPR   ( 16 )

//-----------------------------------------------------------------------------
//
// changes to the standard lms algorithm are documented here
// we describe two changes useful for speech recognition research:
//
//  1. exponential damping of the adaptation gain
//  2. residual error suppression based on the near-end speech energy
//
//-----------------------------------------------------------------------------
//
// in a departure from the standard lms algorithm, we add an
// exponentially decaying weight to the adaptation constant. this
// serves to slow the rate of adaptation the further into the file we get.
//
// the equation of this decay is:
//
//  beta_actual = max[beta * exp[-tau*(t - t0 - t_onset)]
//			u(t - t0 - t_onset), MIN_BETA]
//
// where tau is the decay constant, and t0 is measured from the first
// onset of speech
//
// define the value of t0 in secs
//
#define DEFAULT_T0   5

// define default value for tau
//
#define DEFAULT_TAU 1

// we also need to define a threshold for which we decide that near-end
// speech has begun. in a standard echo cancellation algorithm, we have an
// outgoing signal that is typically larger than the echo. when the
// outgoing speech is much larger than the echo, we declare this event the
// onset of speech activity - this is t0. we need a threshold to
// define this event. we use the ratio of the far-end speech to
// near-end speech in db.
//
#define ONSET_THRESH  -20

// constants for error suppression
//

// in a second departure, we calculate the residual error suppression
// as a percentage of the reference signal energy level. the threshold
// is defined in terms of dB below the reference signal.
//
#define RES_SUPR_FACTOR -20

// we need a dynamic level of suppression varying with the ratio of the
// power of the echo to the power of the reference signal
// this is done so that we have a  smoother background. 
// we have a higher suppression when the power ratio is closer to
// suppr_ceil and reduces logarithmically as we approach suppr_floor.
//
#define SUPPR_FLOOR -64
// #define SUPPR_CEIL -24
#define SUPPR_CEIL -2

// to avoid problems when the input data is zeroed out, we have a minimum
// dB value specified for the ratio of the power of the echo to the power
// of the reference signal
//
#define EC_MIN_DB_VALUE -70

// end of include file
#endif