Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.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
R..中的自适应时间/位置序列滤波器。。。?_R - Fatal编程技术网

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

R..中的自适应时间/位置序列滤波器。。。?,r,R,我正在尝试过滤时间/位置数据序列,以生成平滑的绘图。我在测量速度变化的机械系统的深度和时间。我根据测得的深度/时间值计算速度,并可以绘制速度与深度的关系图,但在低速时,由于各种原因,噪音过大。低速时的趋势是正确的,但我希望能够应用一个使用自适应平滑例程的过滤器,即对于有许多数据点的低速,我需要使用较大的平滑窗口,对于高速,我需要使用较小的窗口 我看了一下,找到了一个使用rollapply的解决方案,但想知道是否还有其他方法。特别是,我不清楚如何对操作进行矢量化。我是一个相对较新的程序员,所以如果

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

我看了一下,找到了一个使用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)
}

您可能会在这里得到一些好的建议,但是stat.stackexchange.com也可能是一个询问的好地方。这是正确的网站吗?是的,很抱歉输入错误。你可能会在这里得到一些好的建议,但是stat.stackexchange.com可能也是一个询问的好地方。这是正确的网站吗?是的,很抱歉输入错误。