【问题标题】:How can I apply a median filter to an signal (array) on Matlab?如何在 Matlab 上对信号(数组)应用中值滤波器?
【发布时间】:2013-07-19 12:21:56
【问题描述】:

我有一个信号,它是一个数组(长度为 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不是很了解。谁能举个例子给我解释一下。

【问题讨论】:

    标签: matlab filter signal-processing median


    【解决方案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)。

    【讨论】:

    • 好吧,其实我误解了 N 和 BLKSZ。其实我不知道BLKSZ是什么但我知道N是什么。你能解释一下什么是BLKSZ吗?它与CPU的内存有什么关系?
    • 您阅读文档了吗? y = medfilt1(x,n,blksz) 使用 for 循环一次计算 blksz(块大小)输出样本。 它进一步描述了计算 blksz 输出样本将需要 N 的工作矩阵x 块大小。 blksize 默认为 length(x)(换句话说,一次计算所有输出样本)。如果这会挂起您的机器,或者无法完成,请按照我上面的描述选择 blksize。
    【解决方案2】:

    点 X 上的一维中值滤波器的工作原理是采用 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
    

    希望有帮助。

    【讨论】:

      【解决方案3】:

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

      即,

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

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

      【讨论】:

        猜你喜欢
        • 2012-09-22
        • 1970-01-01
        • 1970-01-01
        • 2011-10-26
        • 1970-01-01
        • 1970-01-01
        • 2010-12-19
        • 2015-08-04
        • 2017-04-08
        相关资源
        最近更新 更多