some new algorithm for initialization phase of auto jitter buffer setting (contains some other test code -> backup checkin)

This commit is contained in:
Volker Fischer 2011-06-29 20:13:52 +00:00
parent 4f757574bb
commit 1a8b049c5a
2 changed files with 52 additions and 11 deletions

View file

@ -127,8 +127,6 @@ CNetBufWithStats::CNetBufWithStats() :
viBufSizesForSim[8] = 10; viBufSizesForSim[8] = 10;
viBufSizesForSim[9] = 11; viBufSizesForSim[9] = 11;
viBufSizesForSim[10] = 12; viBufSizesForSim[10] = 12;
viBufSizesForSim[11] = 14;
viBufSizesForSim[12] = 16;
// set all simulation buffers in simulation mode // set all simulation buffers in simulation mode
for ( int i = 0; i < NUM_STAT_SIMULATION_BUFFERS; i++ ) for ( int i = 0; i < NUM_STAT_SIMULATION_BUFFERS; i++ )
@ -156,15 +154,20 @@ void CNetBufWithStats::Init ( const int iNewBlockSize,
ErrorRateStatistic[i].Init ( MAX_STATISTIC_COUNT, true ); ErrorRateStatistic[i].Init ( MAX_STATISTIC_COUNT, true );
} }
// start initialization phase of IIR filtering, use half the size of // start initialization phase of IIR filtering, use a quarter the size
// the error rate statistic buffers which should be ok for a good // of the error rate statistic buffers which should be ok for a good
// initialization value (initialization phase should be as short as // initialization value (initialization phase should be as short as
// possible // possible
iInitCounter = MAX_STATISTIC_COUNT / 2; iInitCounter = MAX_STATISTIC_COUNT / 4;
// init auto buffer setting with a meaningful value (should not be used // init auto buffer setting with a meaningful value (should not be used
// anyway) // anyway)
iCurAutoBufferSizeSetting = 5; iCurAutoBufferSizeSetting = 5;
// TEST
dCurIIRFilterResult = iCurAutoBufferSizeSetting;
iCurDecidedResult = iCurAutoBufferSizeSetting;
} }
} }
@ -206,7 +209,7 @@ bool CNetBufWithStats::Get ( CVector<uint8_t>& vecbyData )
const double dInitState = const double dInitState =
ErrorRateStatistic[NUM_STAT_SIMULATION_BUFFERS - 1].InitializationState(); ErrorRateStatistic[NUM_STAT_SIMULATION_BUFFERS - 1].InitializationState();
if ( dInitState < 0.1 ) if ( ( dInitState > 0.15 ) && ( dInitState < 0.16 ) )
{ {
if ( ErrorRateStatistic[NUM_STAT_SIMULATION_BUFFERS - 1].GetAverage() > ERROR_RATE_BOUND ) if ( ErrorRateStatistic[NUM_STAT_SIMULATION_BUFFERS - 1].GetAverage() > ERROR_RATE_BOUND )
{ {
@ -227,6 +230,26 @@ void CNetBufWithStats::UpdateAutoSetting()
bool bDecisionFound = false; bool bDecisionFound = false;
// TEST initialization phase
const double dInitState =
ErrorRateStatistic[NUM_STAT_SIMULATION_BUFFERS - 1].InitializationState();
const bool bIsInitePhase = ( dInitState < 0.7 );
double dErrorRateBound = ERROR_RATE_BOUND;
/*
if ( bIsInitePhase )
{
const double dCurErrRateLargestBuffer =
ErrorRateStatistic[NUM_STAT_SIMULATION_BUFFERS - 1].GetAverage();
dErrorRateBound = dCurErrRateLargestBuffer +
(1.0 - dCurErrRateLargestBuffer) / 500;
}
*/
// Get error rate decision ------------------------------------------------- // Get error rate decision -------------------------------------------------
// Use a specified error bound to identify the best buffer size for the // Use a specified error bound to identify the best buffer size for the
// current network situation. Start with the smallest buffer and // current network situation. Start with the smallest buffer and
@ -234,7 +257,7 @@ void CNetBufWithStats::UpdateAutoSetting()
for ( int i = 0; i < NUM_STAT_SIMULATION_BUFFERS - 1; i++ ) for ( int i = 0; i < NUM_STAT_SIMULATION_BUFFERS - 1; i++ )
{ {
if ( ( !bDecisionFound ) && if ( ( !bDecisionFound ) &&
( ErrorRateStatistic[i].GetAverage() <= ERROR_RATE_BOUND ) ) ( ErrorRateStatistic[i].GetAverage() <= dErrorRateBound ) )
{ {
iCurDecision = viBufSizesForSim[i]; iCurDecision = viBufSizesForSim[i];
bDecisionFound = true; bDecisionFound = true;
@ -249,6 +272,23 @@ void CNetBufWithStats::UpdateAutoSetting()
// Post calculation (filtering) -------------------------------------------- // Post calculation (filtering) --------------------------------------------
// TEST
double dWeightUp = 0.999995;
double dWeightDown = 0.9999;
if ( iInitCounter > 0 )
{
// decrease init counter
iInitCounter--;
dWeightUp = 0.9995;
dWeightDown = 0.999;
}
/*
if ( iInitCounter > 0 ) if ( iInitCounter > 0 )
{ {
// for initialization phase, use current decision without applying // for initialization phase, use current decision without applying
@ -267,6 +307,7 @@ void CNetBufWithStats::UpdateAutoSetting()
} }
} }
else else
*/
{ {
// Define different weigths for up and down direction. Up direction // Define different weigths for up and down direction. Up direction
// filtering shall be slower than for down direction since we assume // filtering shall be slower than for down direction since we assume
@ -274,8 +315,8 @@ void CNetBufWithStats::UpdateAutoSetting()
// the current network condition. If the current error rate estimation // the current network condition. If the current error rate estimation
// is higher, it may be a temporary problem which should not change // is higher, it may be a temporary problem which should not change
// the current jitter buffer size significantly. // the current jitter buffer size significantly.
const double dWeightUp = 0.999995; // const double dWeightUp = 0.999995;
const double dWeightDown = 0.9999; // const double dWeightDown = 0.9999;
const double dHysteresisValue = 0.1; const double dHysteresisValue = 0.1;
// apply non-linear IIR filter // apply non-linear IIR filter
@ -317,5 +358,5 @@ void CNetBufWithStats::StoreAllSimAverages()
fclose ( pFile ); fclose ( pFile );
// scilab: // scilab:
// close;x=read('c:/temp/test.dat',-1,13);plot2d([2,3,4,5,6,7,8,9,10,11,12,14,16], x, style=-1 , logflag = 'nl');plot2d([2 20],[1 1]*0.01);plot2d([2 20],[1 1]*0.005);x // close;x=read('c:/temp/test.dat',-1,13);plot2d([2,3,4,5,6,7,8,9,10,11,12], x, style=-1 , logflag = 'nl');plot2d([2 20],[1 1]*0.01);plot2d([2 20],[1 1]*0.005);x
} }

View file

@ -38,7 +38,7 @@
#define ERROR_RATE_BOUND 0.002 #define ERROR_RATE_BOUND 0.002
// number of simulation network jitter buffers for evaluating the statistic // number of simulation network jitter buffers for evaluating the statistic
#define NUM_STAT_SIMULATION_BUFFERS 13 #define NUM_STAT_SIMULATION_BUFFERS 11
/* Classes ********************************************************************/ /* Classes ********************************************************************/