R 矩阵的低通滤波

R 矩阵的低通滤波,r,R,我试图在R中编写一个低通滤波器,以清除“脏”数据矩阵 我在谷歌上搜索了一下,找到了一系列令人眼花缭乱的软件包。有些适用于一维信号(例如,时间序列);有些应用于图像。然而,我试图过滤一个普通的R数据矩阵。图像过滤器是最接近的等效物,但我有点不愿意这样做,因为它们通常涉及(I)安装或多或少复杂/繁重的解决方案(imageMagick…),和/或(ii)从矩阵到图像的转换 以下是示例数据: r<-seq(0:360)/360*(2*pi) x<-cos(r) y<-sin(r) z

我试图在R中编写一个低通滤波器,以清除“脏”数据矩阵

我在谷歌上搜索了一下,找到了一系列令人眼花缭乱的软件包。有些适用于一维信号(例如,时间序列);有些应用于图像。然而,我试图过滤一个普通的R数据矩阵。图像过滤器是最接近的等效物,但我有点不愿意这样做,因为它们通常涉及(I)安装或多或少复杂/繁重的解决方案(imageMagick…),和/或(ii)从矩阵到图像的转换

以下是示例数据:

r<-seq(0:360)/360*(2*pi)
x<-cos(r)
y<-sin(r)

z<-outer(x,y,"*")
noise<-0.3*matrix(runif(length(x)*length(y)),nrow=length(x))

zz<-z+noise

image(zz)

r一种选择可能是使用非线性预测方法,并从模型中获得拟合值

例如,通过使用多项式回归,我们可以将原始数据预测为紫色数据

通过遵循相同的逻辑,您可以对
zz
矩阵的所有列执行相同的操作

predictions <- matrix(, nrow = 361, ncol = 0)

for(i in 1:ncol(zz)) {

    pred <- as.matrix(fitted(lm(zz[,i]~poly(1:nrow(zz),2,raw=TRUE))))
    predictions <- cbind(predictions,pred)  

} 


请注意,我使用了2次多项式回归,您可以更改次数以更好地跨列拟合。或者,您可以使用其他一些强大的非线性预测方法(可能是SVM、ANN等)来获得更精确的模型。

可能相关吗?这实际上是我发现的东西之一(->编辑)。据我所知,package
signal
仅在1D中工作,还是我遗漏了什么?@jmoyen您始终可以
函数应用于R中的向量。请参见下面的答案,将多项式回归拟合到每个向量在技术上是正确的,但我不确定应用于每行/每列的一系列1D过滤器是否与2D过滤器相同。例如,如果按行过滤,则应用于所有行的1D过滤器不会过滤出异常高值的行。另一方面,由于它是一个高频特性(在另一个方向),它将被一个适当的低通过滤掉,在总“距离”上运行。是的,你是对的,同样的问题适用于下面的解决方案,我没有注意到…一点也不坏!我最初是在寻找一个“合适的”低通滤波器,似乎更合适,但这是一个很好的代理,如果没有其他。。。
par(mfrow=c(1,3))

image(z,main="Original")
image(zz,main="Noisy")
image(predictions,main="Predicted")