some new algorithm for initialization phase of auto jitter buffer setting (contains some other test code -> backup checkin)
This commit is contained in:
parent
4f757574bb
commit
1a8b049c5a
2 changed files with 52 additions and 11 deletions
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 ********************************************************************/
|
||||||
|
|
Loading…
Reference in a new issue