我有一个信号是一个数组(长度为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.任何人都可以通过一个例子向我解释。
答案 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元素的平均值