【问题标题】:How does convolution work in stats::filter卷积如何在 stats::filter 中工作
【发布时间】:2020-01-14 22:57:30
【问题描述】:

我读了一些关于 stats:filter 的答案,他们已经部分阐明了卷积的工作原理(与系数排列有关的部分),但还有其他一些内容。

示例:

# convolution with 3 coefficients in filter
filter(1:5,c(f1,f2,f3),method="convolution")
[1] NA  6  9 12 NA

#equivalent to:
 NA  * f3 + x[1] * f2 + x[2] * f1  #x[0] = doesn't exist/NA
x[1] * f3 + x[2] * f2 + x[3] * f1
x[2] * f3 + x[3] * f2 + x[4] * f1 
x[3] * f3 + x[4] * f2 + x[5] * f1 
x[4] * f3 + x[5] * f2 + x[6] * f1 #x[6] also doesn't exist

我不明白 X[0] 是从哪里来的;我以为我们会从 x[1] 开始。我怀疑这可能与stats::filter 的帮助文档中提到的偏移有关。

卷积滤波器是

y[i] = f[1]*x[i+o] + … + f[p]*x[i+o-(p-1)]

其中 o 是偏移量:请参阅侧面了解它是如何确定的。

sides:仅适用于卷积过滤器。如果边 = 1 过滤器 系数仅适用于过去的值;如果边 = 2,则它们居中 大约滞后 0。在这种情况下,过滤器的长度应该是奇数,但是 如果是偶数,则更多的过滤器在时间上是向前的而不是向后的。

我仍然很困惑。我看不出双方是如何解释偏移的,也不确定x[0]' 是由于偏移造成的。

卷积如何在 stats::filter 中真正起作用?

【问题讨论】:

    标签: r filter statistics convolution


    【解决方案1】:

    也许您应该了解什么是卷积。从最简单的开始。即卷积两个信号。我将仅描述细节。但是你可以在网上搜索 WHY。

    所以filter(1:5,c(f1,f2,f3),method="convolution"),使用默认的2边。那就是过滤器将居中的过滤器,如果不可能,则较大的一端将进入数据。计算从滤波器的中心与信号的第一个值重合的地方开始。回想一下,由于滤波器在信号上滚动,它必须小于或等于信号的长度。这是一个例子。

    如果过滤器是c(1,2,3),那么我们将其居中在2。

    因此要将c(1,2,3,4,5)c(1,2,3) 进行卷积,我们首先将reverse 过滤,然后将rollapply 贯穿signal

    第一步

        1  2  3  4  5
     3  2  1
      We see that 3 is not multiplied by anything! Thus `3*NA + 2*1+1*2 = NA`
    

    然后我们将过滤器移动一步并再次进行数学运算

         1  2  3  4  5
         3  2  1
       Here all the values are present: 3*1+2*2+1*3 = 10
    

    第三步:

      1  2  3  4  5
         3  2  1
      3*2+2*3+1*4 = 16
    

    我们重复此操作,直到居中的值(即 2)与最后一个值重合。

    如果您选择side = 1,则它不会居中,而是首先将滤波器的最后一个值与信号的第一个值重合,然后将滤波器的最后一个值与信号的最后一个值重合。

    【讨论】:

    • 感谢您的回答,它现在明确了“中心”的含义。我并没有花太多时间在卷积上,但现在我想我会花更多时间在它上面。但是我不得不说我遇到的关于卷积的在线资料,并没有你的回答那么好。如果你有好的材料可以分享,那就太好了!
    猜你喜欢
    • 2014-04-10
    • 2019-07-10
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-28
    相关资源
    最近更新 更多