[GRASS5] i.fft G_malloc: out of memory

I'm trying to do a Fast Fourier Transform (i.fft) to a landsat image and I always get a G_malloc: out of memory. I thought that this was because all the system memory was exhausted, but then I checked that I still had about 100 mb free swap memory.
Is this something I'm doing wrong or is it some bug from this function? In Idrisi I have to pad the image to have lines and columns in a power of 2. Do I still have to do this in GRASS? If yes, how can I do a zero pad?

Thanks

Gualter

Gualter Barbas Baptista wrote:

I'm trying to do a Fast Fourier Transform (i.fft) to a landsat image and
I always get a G_malloc: out of memory. I thought that this was because
all the system memory was exhausted, but then I checked that I still had
about 100 mb free swap memory.

How big is the image? i.fft is fairly wasteful of memory; it pads the
image to a power of 2, then requires 32 bytes (4 "double"s) per cell.
This could result in i.fft using nearly 8 times as much memory a is
really necessary.

The waste is primarily an artifact of the underlying fft() routine
having been replaced, without any changes to i.fft itself.

1. The old fft() function took its input in two separate arrays; one
for the real part, one for the imaginary part. The FFTW library, which
is used by the new version, requires a single array of complex numbers
(i.e. the real and imaginary components are interleaved).
Consequently, fft() creates a copy of the data.

2. The old fft() function required the array dimensions to be powers
of two. The new version doesn't, but i.fft still performs the padding.

Point 2 above should be fairly simple to fix. Point 1 is harder, as it
involves changing the interface, which requires changing all of the
programs which use it, which risks introducing bugs.

Is this something I'm doing wrong or is it some bug from this function?

Not strictly a bug, just gross inefficiency. But it's quite possible
that i.fft really is exhausting memory (even if it's not exhausting
system memory, there may be a per-process limit which is being
exceeded).

In Idrisi I have to pad the image to have lines and columns in a power
of 2. Do I still have to do this in GRASS? If yes, how can I do a zero pad?

You don't have to pad to a power of two.

--
Glynn Clements <glynn.clements@virgin.net>