Эффективная реализация Median Filter

Я ищу реализацию 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 );
}

enter image description here