public int getBandwidth()
{
// sorting
int[] pi = m_piProbeWindow;
for (int i = 0, n = (m_iPWSize >> 1) + 1; i < n; ++i)
{
int* pj = pi;
for (int j = i, m = m_iPWSize; j < m; ++j)
{
if (*pi > *pj)
{
int temp = *pi;
*pi = *pj;
*pj = temp;
}
++pj;
}
++pi;
}
// read the median value
int median = (m_piProbeWindow[(m_iPWSize >> 1) - 1] + m_piProbeWindow[m_iPWSize >> 1]) >> 1;
int count = 1;
int sum = median;
int upper = median << 3;
int lower = median >> 3;
// median filtering
int[] pk = m_piProbeWindow;
for (int k = 0, l = m_iPWSize; k < l; ++k)
{
if ((*pk < upper) && (*pk > lower))
{
++count;
sum += *pk;
}
++pk;
}
return (int)Math.Ceiling(1000000.0 / ((double)(sum) / (double)(count)));
}