Rでコンボリューション(畳み込み)

基本は、convolve関数。線形畳み込み(普通の畳み込み)にするためには、type="o"とする。
デフォルトは循環畳み込み.

q1<-dpois(0:100,lambda=1)
q2<-dpois(0:100,lambda=1)
q3<-convolve(q2, rev(q1),type="open")

たくさん畳み込みをするときは、fft関数を利用.
0をデータの後ろにたくさん作ると循環畳み込みが線形畳み込みと同値となる。

##DFT test
q1<-dpois(0:300,lambda=1)
q1b<-c(q1,rep(0,2*length(q1)))
f=fft(fft(q1b)^365,inv=TRUE)
q3b<-Re(f)/length(f)
plot(q3b)
curve(dnorm(x,mean=365,sd=365^0.5),add=T)

線形および循環たたみこみ
http://jp.mathworks.com/help/signal/ug/linear-and-circular-convolution.html?requestedDomain=jp.mathworks.com

高速畳み込み
http://www.is.titech.ac.jp/~mase/mase/html.jp/temp/convolve.jp.html