如何在Matlab上对信号(数组)应用中值滤波器?

时间:2013-07-19 12:21:56

标签: matlab filter signal-processing median

我有一个信号是一个数组(长度为m),我有一种盐和纸的噪音。我已经应用了低通滤波器(LPF)并获得了非常好的结果。但是我想对信号应用中值滤波器,并与LPF的结果进行比较。

我知道函数是medfilt1(X,N),但不知道N代表什么。

该函数是:y = medfilt1(X,X,BLKSZ,DIM)我希望将其应用于数组raw_Signal <5000x1double>

对于单身X raw_Signal我使用了

N=3 %the default number
BLKSZ= 5 
DIM = 1 %apply the filter to the rows

函数的输出是滤波后的信号,但我不太了解输入N.任何人都可以通过一个例子向我解释。

3 个答案:

答案 0 :(得分:1)

N是用于计算每个中值的样本数量。因此,如果您的信号为[a b c d e f g],且N为3,则第二个输出为中位数([a b c])。第三个是中位数([b c d])等。第一个输出有点问题,因为你试图使用一个不存在的样本,所以它只是中位数([0 a b]);

手持波浪直觉建议如下(不要将其作为精确描述):通常,N越大,发生的过滤就越多。考虑一下:如果你在任何3个样本中只有一个噪点(异常值),那么另外2个的中位数将是一个非常好的估计值,并且所有噪声都被过滤掉了。如果在3个样本的特定组中有2个噪声点,则中位数将最终选择2个噪声点中的1个。 N = 5会捕获它,但会更多地扰乱你的非噪声点。

不要乱用BLKSZ。正如帮助文本所说,只有在内存不足的情况下才使用它,如果你是,请选择BLKSZ,使BLKSZ x N x 8(工作矩阵的大小,以字节为单位)介于1MB和100MB之间。否则,请将其留下。因为你有一个向量,所以假设DIM = 1,所以你需要Y = medfilt1(X,N)。

答案 1 :(得分:1)

点X上的1D中值滤波器通过获取相邻值的N/2-1,对它们进行排序并返回中值来工作。一个实际的例子:

x=[1,1,1,2,3,4,1,1,1]

x(4), N=3 => [1,(2),3] => median(x(4)) = 2

x(4), N=5 => [1,1,(2),3,4] => median(x(4)) = 2

x(6), N=3 => [3,4,1] => [1,(3),4] median(x(6)) = 3

x(6), N=5 => [2,3,4,1,1] => [1,1,(2),3,4] => median(x(6)) = 2
希望有所帮助。

答案 2 :(得分:0)

这是过滤器的长度。一般而言,第k个值是N / 2个先前值和N / 2个跟随值的中值。

即,

  

对于n odd,y(k)是x的中位数(k-(n-1)/ 2:k +(n-1)/ 2)。

     

对于n even,y(k)是x(k-n / 2),x(k-(n / 2)+1),...的中值,   X(K +(N / 2)-1)。在这种情况下,medfilt1对数字进行排序,然后进行排序   n / 2和(n / 2)+1元素的平均值