[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: FFTs in IDL



tom@quake.Stanford.EDU (Thomas Berger) wrote:

>Does anyone know which algorithm the FFT.PRO routine uses? The manual
>implies that it is the Cooley-Tukey with "convert-to-complex" algorithm.
>This should be very much slower than the algorithms tailored for real
>data (especially for large 2-D images like the ones I'm trying to filter).
>
>Numerical Recipes lists some but they are the old "N = factor of 2 or die"
>variety and zero padding a 1300x1024 array to 2048x1200 just seems like
>a really stupid thing to do. The Winograd algorithms would be ideal here.

There is definitly a problem and i don't know the solution but i can give 
you some informations. 
-We have to distinguish one/two dimensional FFT's and real/complex data. 
 For the onedimensional FFT the Cooley-Tukey algorithm is one of the best 
 i know (the reasons why this algorithm is better than the 
 WinogradFourierTransformAlgorithm is shown in OPPENHEIM,SCHÄFER:DISCRETE 
 TIME SIGNAL PROCESSING) but only in the one-dimensional domain. 
 Transforming two-dimensional arrays with the Cooley-Tukey algorithm slows 
 down the machine immensely. I think there have to be some radix- or 
 prime-factorizing algorithms.
-I'm a little bit surprised because it is WAVE that use the Cooley-Tukey 
 algorithm not IDL. In IDL there is used an algorithm using prime factors 
 (i don't know the exact way of transformation).
-It is very important to know that there is a little mistake in the 
 WAVE-Algorithm not in the IDL-Algorithm, try to plot test=findgen(4097) 
 and oplot,fft(fft(test,-1),1) you will see what I mean. 
-The Cooley-Tukey is really slower than any other tailored algorithm for 
 real data because he works for complex data. Don't you have complex 
 information in your 2-d-image?
-In my opinion zero padding is definitly not a stupid thing to do. For 
 example, the running time of a 263 point FFT is approximately 10 times 
 longer than that of a 264 point FFT (in IDL, i don't know in WAVE).
 And the most important reason for zero padding is the better resolution 
 in the frequency-domain. Sometimes you have to pad because the resolution 
 in the frequency-domain depends directly on the sampling frequency and 
 the sampling frequency grows up by using zero-padding.

-I have the same problem, slow FFT's. My arrays are complex arrays of 
 dimension 28000x6300 (virtual page counts more than 2 GByte)and you see i 
 am very interested in new algorithms  for efficient Fourier-Transforms. 
 I'm very thankful for any experience.

Peplies by email please.

Achim Hein
Center of Sensor Systems
Remote Sensing and optimal Signal Processing
University of Siegen