我正在寻找快速/高效中值滤波器的 Ansi C 实现。任何指针?
到目前为止,我已经找到了以下实现,这很好,但我对更快的实现很好奇。我只需要一维。
我需要从非常嘈杂的 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 );
}