Я ищу реализацию Ansi C быстрого/эффективного срединного фильтра. Любые указатели?
До сих пор я нашел следующую реализацию, что хорошо, но мне интересно, как быстрее. Мне нужно только одно измерение.
Ответ 1
Мне нужно было извлечь сигнал из очень шумных данных потребления ЦП. Здесь средний фильтр Джеффа МакКлинток...
Инициализируйте средний и средний к нулю, затем для каждого образца "дюйм" медианный по отношению к входному образцу с небольшим шагом. В конце концов, он будет оседать в точке, где около 50% входных образцов больше, а 50% меньше, чем медиана.
Размер приращения должен быть пропорционален фактической медиане. Поскольку мы не знаем фактической медианы, я использую среднее значение как приблизительную оценку. Размер шага вычисляется как 0,01 раз по сравнению с оценкой. Меньшие размеры шага являются более точными, но занимают больше времени.
float median = 0.0f;
float average = 0.0f;
// for each sample
{
average += ( abs(sample) - average ) * 0.1f; // rough running average magnitude.
median += _copysign( average * 0.01, sample - median );
}