R ...中的自适应时间/位置系列滤波器?

时间:2011-09-21 16:47:13

标签: r

我正在尝试过滤时间/位置数据系列以生成平滑的图。我正在测量深度与时间(机械系统)的速度变化。我从测量的深度/时间值计算速度并且可以绘制速度与深度的关系,但是在低速时,噪声过大(由于各种原因)。低速时的趋势是正确的,但我希望能够应用一个使用自适应平滑程序的滤波器,即低速(我有很多数据点)我需要使用更大的平滑窗口,对于高速(几个数据点),我需要使用一个较小的窗口。

我看了一下并且已经找到了使用rollapply()的解决方案但是想知道是否还有其他方法。特别是,我不清楚如何“矢量化”一个操作。我是一个相对较新的编码器,所以如果我的代码有点业余,我很抱歉。我的解决方案如下:

adapt<-function(x,wmin,wmax) {
# adapt takes a vector of calculated velocities (x), a minimum window size (wmin),
# and a maximum window size (wmax).  It returns a vector of filtered velocities
# 
    x<-ifelse(is.na(x),0,x)  # check for na values
    x<-ifelse(is.infinite(1/x),1/wmax,x)  # check for infinite values
    x<-runmed(x,11)  # smooth raw velocities using 11 point window
    wins<-ceiling(ifelse(is.infinite(1/x),wmin,1+wmax/(1+x)^15))  # set window widths
    wins<-ifelse(wins<=wmin,wmin,wins)  # set min windows
    wins<-ifelse(wins>wmax,wmax,wins)  # set max windows
    out<-rollapply(x,width=wins,median)  # apply filter to each element
    out[length(x)]<-0  # set last value to zero
    return(out)
}

0 个答案:

没有答案