我正在寻找快速/高效中值滤波器的 Ansi C 实现。有什么指点吗?
到目前为止,我已经找到了下列的 http://www.eetindia.co.in/STATIC/PDF/200011/EEIOL_2000NOV03_EMS_EDA_TA.pdf?SOURCES=DOWNLOAD实施,这很好,但我对更快的实施感到好奇。我只需要一维。
我需要从非常嘈杂的 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 );
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)