[R] Fast fourier transformation

Dieter Menne dieter.menne at menne-biomed.de
Tue Feb 10 14:40:16 CET 2009


botto <b.otto <at> uke.uni-hamburg.de> writes:

> 
> here is a practical problem we would like to solve. In a pneumatic post the
> acceleration of the capsule is measured and plotted over time. From the
> graph achieved we would like to derive some kind of statistic value that
> describes the stress the capsule, or what is in it, is exhibited to.
> 
..
> 
> 1)      Apply a  fourier transformation to the acceleration profile to 
> 
> 2)       get a number of harmonic waves describing my graph 
> 
> 3)      and use the amplitudes of my waves in a weighted fashion to
> calculate some statistical value.
> 
> What I tried to do is:
> 
> A)     construct an artificial profile fg for testing purpose like 
> 
> a.       f1 <- function(x) 0.5*sin(3*x + pi)
....
> 
> X)      in my test example I can define the amount of harmonic components,
> because here I know that number. Of course afterwards in my natural profiles
> I won't know.
> 
> Y)      I have to transform the values I get out of the "fft" and "fourier"
> functions to estimate the frequency,  amplitude and phase of my harmonics.
> 

Check function spectrum in stats which also has some methods to 
provide smoothed plots. There is also package signal which I have not
tried. And don't expect too much of phase plots, I have seen generations
of students jumping on these to explain the universum, the EEG  and US
politics because it sound so mysterious, and never seen a working method 
coming out of it.

It would have been good if you had provided a real example series because
then it would have been possible to tell you if you could find a reasonable
estimate of the "true" frequency and acceleration. In general, when you 
have only very few oscillations, you get a seemingly lousy estimate, which
is only the consequence of how fft is defined as a rather broad-minded
model. If you are sure that there is a single frequency with harmonics, 
other methods such as cyclic gams or even cyclic nlme (see the oestrus 
example in that package) might provide better results.

Dieter




More information about the R-help mailing list