From: wsimpson@gcal.ac.uk Full_Name: Bill Simpson Version: 65.1 , 0.90.1 OS: Linux Submission from: (NULL) (193.62.250.209) I reported this on r-help, but here is official bug report. The present convolve() does not do convolution by default. Its default behaviour is correlation. This is a bug. The default argument conj should be set to FALSE. The zero-padding should be on the right for linear convolution (don't ask me why you call this type="open"; I suggest type="linear"). Here is what I expect linear convolution to do: myconvolve<-function (x,h) { nx <- length(x) nh <- length(h) #zero pad if(nx>nh) { x <- c(x,rep(0, nh-1)) h<-c(h,rep(0,nx-1)) } else { h <- c(h,rep(0, nx-1)) x<-c(x,rep(0,nh-1)) } x <- fft(fft(x) * fft(h), inv = TRUE) Re(x)/length(x) #I am not sure about this, the R IFFT is weird } What "circular" convolution should do is just eliminate the zero-padding: myconvolve2<-function (x,h) { #no padding, circular convolution nx <- length(x) nh <- length(h) x <- fft(fft(x) * fft(h), inv = TRUE) Re(x)/(nx) } I suggest that you create two functions, convolve() and correlate(), and get rid of the conj argument in convolve().

NOTES: Is this a bug?

Audit (from Jitterbug): Wed Feb 16 19:28:42 2000 ripley moved from incoming to Language Thu Aug 12 01:36:19 2004 thomas changed notes