中值过滤器超高效实施

use*_*749 5 algorithm median

我正在寻找一个快速/有效的中值滤波器的Ansi C实现.有什么指针吗?

到目前为止,我已经找到了以下实现,这很好,但我对更快的实现感到好奇.我只需要一维.

Jef*_*ock 12

我需要从非常嘈杂的CPU消耗数据中提取信号.这是Jeff McClintock中值滤波器......

将平均值和中位数初始化为零,然后对于每个样本"英寸",将输入样本的中位数小幅增加.最终它将在大约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 );
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述