Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Matlab上对信号(阵列)应用中值滤波器?_Matlab_Filter_Signal Processing_Median - Fatal编程技术网

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

如何在Matlab上对信号(阵列)应用中值滤波器?,matlab,filter,signal-processing,median,Matlab,Filter,Signal Processing,Median,我有一个信号,它是一个数组(长度m),我有一个salt和papper类型的噪声。我已经应用了一个低通滤波器(LPF),并得到了很好的效果。然而,我想对信号应用中值滤波器,并与应用LPF的结果进行比较 我知道函数是medfilt1(X,N),但不知道N代表什么 函数是:y=medfilt1(X,X,BLKSZ,DIM),我想将其应用于阵列原始信号 对于信号Xraw\u信号I使用 N=3 %the default number BLKSZ= 5 DIM = 1 %apply the filter

我有一个信号,它是一个数组(长度m),我有一个salt和papper类型的噪声。我已经应用了一个低通滤波器(LPF),并得到了很好的效果。然而,我想对信号应用中值滤波器,并与应用LPF的结果进行比较

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

函数是:
y=medfilt1(X,X,BLKSZ,DIM)
,我想将其应用于阵列
原始信号

对于信号X
raw\u信号
I使用

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

函数的输出是一个滤波信号,但我不太理解输入N。谁能给我举个例子解释一下。

这是过滤器的长度。一般来说,第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元素的平均值


N是用于计算每个中值的样本数。所以如果你的信号是[abcdefg],N是3,那么第二个输出就是中值([abc])。第三个是中位数([bcd]),等等。第一个输出有点问题,因为您试图使用一个不存在的样本,所以它只是中位数([0ab])

手摇直觉的建议如下(不要把这当作一个确切的描述):一般来说,N越大,发生的过滤就越多。考虑这一点:如果你在任何3个样本中只有一个噪声点(离群点),那么另一个2的中值将是一个非常好的估计,并且所有的噪声都被过滤。如果在由3个采样组成的特定组中有2个噪波点,则中值将最终选择2个噪波点中的1个。N=5会捕捉到它,但会更多地干扰非噪声点


别惹布莱克斯。正如帮助文本所说,仅当内存不足时才使用它,如果内存不足,请选择BLKSZ,使BLKSZ x N x 8(工作矩阵的大小,以字节为单位)介于1MB和100MB之间。否则,请将其忽略。因为你有一个向量,所以假设DIM=1,所以Y=medfilt1(X,N)就是你所需要的。

点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
但是


希望能有所帮助。

好吧,实际上我误解了BLKSZ的N。实际上我不知道什么是BLKSZ,但我知道什么是N。你能解释一下BLKSZ是什么吗?它与CPU的内存有什么关系?你读过文档了吗?y=medfilt1(x,n,blksz)使用for循环一次计算blksz(块大小)输出样本。它进一步描述了计算blksz输出样本将需要N x blksize的工作矩阵。blksize默认为长度(x)(换句话说,一次计算所有输出样本)。如果这会挂断您的机器,或者无法完成,请选择我上面描述的blksize。
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