【发布时间】:2020-01-19 13:50:56
【问题描述】:
我正在尝试在 R 中编写一个低通滤波器,以清理“脏”数据矩阵。
我做了一个谷歌搜索,想出了一系列令人眼花缭乱的软件包。有些适用于一维信号(主要是时间序列,例如How do I run a high pass or low pass filter on data points in 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)
我正在寻找的是一个过滤器,它将返回一个“清理过的”矩阵(在这种情况下,即接近 z 的东西)。
我知道这是一个相当开放的问题,我也很满意指针(“你看过某某软件包吗”),尽管我当然会重视用户的示例代码有信号处理经验!
谢谢。
【问题讨论】:
-
这实际上是我发现的东西之一(--> 编辑)。据我了解,
signal包仅适用于 1D,还是我错过了什么? -
@jmoyen 你总是可以
apply函数到 R 中的向量,请参阅下面的答案,将多项式回归拟合到每个向量 -
技术上正确,但我不确定应用于每行/列的一系列 1D 过滤器是否与 2D 过滤器相同。例如,如果您按行过滤,则应用到所有行的一维过滤器不会过滤掉异常高值的行。另一方面,由于它是高频特征(在另一个方向上),它会被适当的低通过滤掉,对总“距离”进行操作。
-
是的,你是对的,同样的问题适用于下面的解决方案,我没有注意到......
标签: r