RFC -- improved Fourier transform
- From: John Denker <jsd av8n com>
- To: Gnumeric Spreadsheet List <gnumeric-list gnome org>
- Subject: RFC -- improved Fourier transform
- Date: Mon, 01 Apr 2013 14:53:05 -0700
Hi Folks --
I implemented an improved Fourier transform routine, called imfourier(...)
It is sorta like the pre-existing fourier(...) routine, except:
++ On the input, it can accept complex numbers represented as strings,
in a single column.
++ It can also accept complex numbers represented by separate real and
imaginary parts, in two columns.
++ The inverse transform is normalized to be the actual /inverse/
of the forward transform.
++ Input slots are never skipped.
++ As a related point, anything that can be coerced will be coerced
to a number.
++ There is also a zeropad(...) function, which makes it easy
for folks to pad their data so that the number of rows is a
power of 2. This lays a foundation for the future. We should
not be training users to expect that our FFT will always require
powers of 2.
To say the same thing the other way:
-- The pre-existing fourier(...) does not accept complex inputs
under any conditions.
-- Not coincidentally, it is not invertible.
-- Not coincidentally, this makes it unusable for a wide range
of important applications.
-- In many situations, the failure manifests itself as a non-
obvious numerically-incorrect answer, rather than a warning
or error message.
-- The limitations were undocumented.
Compatibility: With one exception, anybody using the old fourier(...)
routine can get the same /or better/ results using imfourier(...). The
one thing the latter does not do is _skipping invalid data_. I don't
even know what that's supposed to mean when there are separated real
and imaginary parts, and one part is valid when the other part is not.
Also, the whole idea of skipping points in time-series data seems kinda
sketchy. If anybody can describe a relevant use-case it would help us
figure out what (if anything) to do about this issue.
The patch can be found at
http://www.av8n.com/computer/imfourier.patch
There is also a spreadsheet at
http://www.av8n.com/computer/imfourier.gnumeric
containing examples of the upgraded transforms in action ... including
transform/inverse_transform pairs.
This is "alpha" code. Constructive suggestions are welcome. The patch
applies to the current 1.12.1 tarball.
In case anybody is wondering about the importance of this: It's true
that not very many people using the Gnumeric Fourier transform feature
at the moment ... but please imagine how many more people would use it
if it were actually usable! Spreadsheets are great for rapid prototyping,
for figuring stuff out. I know a lot of people who will benefit from
this, as soon as an upgraded version is released.
Comments, anyone? Questions? Suggestions?
[Date Prev][
Date Next] [Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]