中位数过滤器出错了。什么是正确的中值滤波算法?

时间:2016-06-25 12:33:36

标签: matlab filter median

我想写一个1-D中值滤波器来消除信号中的毛刺。 我在matlab上写了中值滤波器代码,然后将它与medfilt1函数进行比较。我的中值滤波器不起作用。

- 我的中位数过滤顺序是8。

在我的实施中, 当数据到来时,我填充数组(数组的大小为8)。 当输入数据计数为8时,我取中间值并写入 中间值到中值滤波器输出数组。然后我等待接下来的8个数据。当ı取8个数据时,ı取中间值并将此中间值写入中值滤波器输出数组。等等。 (我实现了排序算法和ı测试它。它运作良好)。

这是我的截图,

我的传入数据颜色为红色。 matlab的medfilt1是绿色的。 我的中值滤波器输出为蓝色。

Overall picture

blown-up image

我认为我的算法错了,但我不知道什么是正确的算法?

1 个答案:

答案 0 :(得分:1)

您的实施错误,可能有两种方式(很难说,因为您没有向我们展示您的代码)。

  1. 您应该一次滚动1个元素,而不是一次滚动8个元素。也就是说,在取中位数之前,你应该只删除最旧的元素并添加最新的元素。 (请注意,由于要替换所有8个元素,因此输出的频率太高了8倍。)
  2. 你说你取中间值。中间值不是中位数。但也许你忘了告诉我们你先做点什么?