public void Consume(double[] frame)
{
for (int i = 0; i < NumBands(); i++)
{
int first = FirstIndex(i);
int last = LastIndex(i);
double numerator = 0.0;
double denominator = 0.0;
for (int j = first; j < last; j++)
{
double s = frame[j];
numerator += j * s;
denominator += s;
}
double centroid = numerator / denominator;
if (Double.IsNaN(centroid))
{
centroid = (first + last) / 2.0; // handle NaN
}
m_features[i] = (centroid - first) / (last - first);
}
m_consumer.Consume(m_features);
}