のfilter
関数のいくつかの単純な(つまり、数式表記法、長い形式の再現可能なコードの)例を探しています。再帰的オプションを一般化する際に立ち往生しています。私は様々な文書を読んで戦いましたが、助けは私には少し不透明です。私は私のかわいそうな脳幹を傷つけていたときに今だフィルター関数、再帰オプションの簡単な例は具体的には
# basic convolution filter
filter(1:5,f1,method="convolution")
[1] 1 2 3 4 5
#equivalent to:
x[1] * f1
x[2] * f1
x[3] * f1
x[4] * f1
x[5] * f1
# convolution with 2 coefficients in filter
filter(1:5,c(f1,f2),method="convolution")
[1] 3 5 7 9 NA
#equivalent to:
x[1] * f2 + x[2] * f1
x[2] * f2 + x[3] * f1
x[3] * f2 + x[4] * f1
x[4] * f2 + x[5] * f1
x[5] * f2 + x[6] * f1
# 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
:
# Set some values for filter components
f1 <- 1; f2 <- 1; f3 <- 1;
そして、私たちが行く上:
は、ここで私はこれまで考え出した例です。 私はこの記事で情報を使用して、最も基本的な例を把握するために管理:https://stackoverflow.com/a/11552765/496803
filter(1:5, f1, method="recursive")
[1] 1 3 6 10 15
#equivalent to:
x[1]
x[2] + f1*x[1]
x[3] + f1*x[2] + f1^2*x[1]
x[4] + f1*x[3] + f1^2*x[2] + f1^3*x[1]
x[5] + f1*x[4] + f1^2*x[3] + f1^3*x[2] + f1^4*x[1]
誰かが私がfilter = c(f1,f2)
とfilter = c(f1,f2,f3)
と再帰バージョンのための畳み込み例については上記の持っているものに類似したコードを提供することはできますか?
回答は、関数からの結果と一致する必要があります:@のagstudyのきちんとした答えを使用して完了させるには
filter(1:5, c(f1,f2), method="recursive")
[1] 1 3 7 14 26
filter(1:5, c(f1,f2,f3), method="recursive")
[1] 1 3 7 15 30
EDIT
:
> filter(1:5, f1, method="recursive")
Time Series:
Start = 1
End = 5
Frequency = 1
[1] 1 3 6 10 15
> y1 <- x[1]
> y2 <- x[2] + f1*y1
> y3 <- x[3] + f1*y2
> y4 <- x[4] + f1*y3
> y5 <- x[5] + f1*y4
> c(y1,y2,y3,y4,y5)
[1] 1 3 6 10 15
と...
> filter(1:5, c(f1,f2), method="recursive")
Time Series:
Start = 1
End = 5
Frequency = 1
[1] 1 3 7 14 26
> y1 <- x[1]
> y2 <- x[2] + f1*y1
> y3 <- x[3] + f1*y2 + f2*y1
> y4 <- x[4] + f1*y3 + f2*y2
> y5 <- x[5] + f1*y4 + f2*y3
> c(y1,y2,y3,y4,y5)
[1] 1 3 7 14 26
を
D ...
> filter(1:5, c(f1,f2,f3), method="recursive")
Time Series:
Start = 1
End = 5
Frequency = 1
[1] 1 3 7 15 30
> y1 <- x[1]
> y2 <- x[2] + f1*y1
> y3 <- x[3] + f1*y2 + f2*y1
> y4 <- x[4] + f1*y3 + f2*y2 + f3*y1
> y5 <- x[5] + f1*y4 + f2*y3 + f3*y2
> c(y1,y2,y3,y4,y5)
[1] 1 3 7 15 30
と思うで、IIRのためです。再帰的フィルタは、重みf1、...、fnが自動的にc(1、f1、...、fn)になることを除いて、畳み込みフィルタと同様であり、各ステップ1で現在の値に適用され、 ...、fnは、元の値の代わりに、作成されている新しい修正ベクトルから最後のn個の値に適用されます。畳み込みでは(デフォルトの辺が2の場合)、ウェイトは次のn/2の元の値と前のn/2の元の値で他方の値にまたがります。 –