2013-07-19 65 views
-1

我有一个信号,它是一个数组(长度为m),并且我有一个类型为salt和papper的噪音。我已经应用了低通滤波器(LPF),并取得了非常好的结果。不过,我想对信号应用中值滤波器,并与LPF的结果进行比较)。如何在Matlab上将中值滤波器应用于信号(数组)?

我知道功能是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

它是过滤器的长度。一般来说,第k个值是N/2个先前值和N/2个后续值的中值。

即,

对于n奇数,Y(k)是x的值(K-(N-1)/ 2:K +(N-1)/ 2)。对于n偶数,y(k)是x(kn/2),x(k-(n/2)+1)的中值,..., x(k +(n/2) - 1)。在这种情况下,medfilt1排序号码,然后取平均 第n/2的和(n/2)+1元素

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)就是你所需要的。

+0

好吧,其实我误解了N与BLKSZ。其实我不知道这是什么BLKSZ,但我知道什么是N. 你能解释一下BLKSZ是什么吗?它与CPU的内存有什么关系? –

+0

您是否阅读过文档? ** y = medfilt1(x,n,blksz)使用for循环一次计算blksz(块大小)输出采样。**它进一步描述计算blksz输出采样将需要N×blksize的工作矩阵。 blksize默认是长度(x)(换句话说,计算一遍中的所有输出样本)。如果这会挂断您的机器,或者无法完成,请按照上述说明选择blksize。 – Peter

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 

希望帮助。

相关问题