[R] FFT (fast fourier transform) function

Yudi Pawitan yudi at stat.ucc.ie
Wed May 31 12:33:51 CEST 2000


>On Tue, 30 May 2000, mike olsen wrote:
>
>> I'm having trouble with the fast fourier transform function ("fft").
Apparently, I'm not understanding what R's function is actually doing, let
me show you with the example in the R manual:
>> 
>> if I put in:
>> 
>>     y <- 1:4
>>     fft(x)
>I think you mean
>fft(y)
>
>> i'll get this back:
>> 
>> 10+0i    -2+2i    -2+0i    -2-2i
>> 
>> this is what I'm assuming:
>> 
>> R is interpreting the increasing values of y to have an associated value
that is >incremented as x increases (a plot will show y against an index,
so in this case we >have something like y=x over the interval 1 to 4).
>> The real value returned represents the coeffient of the cosine value,
the imaginary >value that of the sine, for n=0 to N-1 where N is the number
of data points and n is the >coeffient inside the sine/cosine terms, so
that the output would be interpreted as:
>> 
>> 10 - 2 cos(2 pi*x) + 2 sin (2 pi * x) -2 cos (4 pi * x) -2 cos(6 pi * x)
- 2 sin (6 pi * x)
>> 
>> which looks nothing like y=x over the interval (1,4).
Not true. The inverse FT (starting with real series) should be 
10 - 2 cos(2 pi*x) - 2 sin (2 pi * x) -2 cos (4 pi * x) -2 cos(6 pi * x) +
2 sin (6 pi * x)

(The sine coef's should minus the imag component).

>> 
>> Basically, I want to be able to fit fast fourier transforms to several
sets of empirical >data. Controlling the period would also be important
here, and the R function does not >seem to have a way of handling that.  I
would appreciate any information on what this >function is actually doing,
or information on other R packages that are able to do >transforms.
>
'To fit fast fourier transforms' to data is not very meaningful. What you 
are doing is probably looking for some strong periodicity in the data, 
in which case a bit of spectral analysis would be useful. If your data 
analysis is serious, it'll be worth investing some time reading some
time series texts (e.g., Shumway).


Regarding the above exercise, try the following to see that the 
function does recover 1:4, but **only on the Fourier frequencies**:

x_ seq(0,3,by=.25)/4   # note division by N=4
y _  10 - 2* cos(2* pi*x) - 2* sin (2* pi * x) -
     2* cos (4* pi * x) -2* cos(6* pi * x) + 2* sin (6* pi * x)
plot(x,y)
lines(0:3/4,1:4*4)  
abline(v=0:3/4)    # Fourier frequencies only !!


Yudi Pawitan     yudi at stat.ucc.ie
Department of Statistics UCC
Cork, Ireland
Ph   353-21-490 2906
Fax 353-21-427 1040 
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._



More information about the R-help mailing list