The following is the original documentation that was included with
this program.

We have slightly modified the source code to work with the benchmark
(in particular, using FFTW_REAL, renaming some routines, removing //
comments, and commenting out "inline" keyword when not available).

				Steven G. Johnson
				1/29/98

-------------------------------------------------------------------------

Subject:     FFT for RISC 2.0
To:          macgifts@sumex-aim.stanford.edu
Enclosure:   FFTs-for-RISC-2.sit

Enclosed is a stuffit archive of version 2.0 of my 'C' source code fft library.

   Very-Fast Fourier Transform routines.  Routines are provided for
real and complex forward and inverse 1d and 2d fourier transforms and
3d complex forward and inverse ffts.  I coded these to optimize
execution speed on Risc processors like the PowerPC.  All fft sizes
must still be a power of two.  Test programs based on the Numerical
Recipes in C routines are provided.  Also included are some simple
applications with source code which time the FFTs.  See the enclosed
read me file for more information.

Revision version 2.0:
	Rewrote code to rely more on compiler optimization (and be less ugly.)
	Removed restrictions on too small or too large ffts.
	Provided a library extension that manages memory for cosine and bit
		reversed counter tables.
	Added 2d and 3d complex and 2d real ffts.
	Speeded routines for data too large to fit in primary cache.
	Changed most testing from Matlab to Numerical Recipes based 
		(because its cheaper.)
	Changed call parameters (watch out.)

Revision version 1.21:
	line 126 of rfftTest.c corrected.

Revisions version 1.2:
	I now store the Nyquest point of the real transform where the
		0 for the DC term's imaginary part used to be.
		!! WATCH OUT FOR THIS IF YOU USE rfft !!
	Added the real inverse Fourier transform.

Revisions version 1.1:
	Re-arranged to put fft routines in a shared library and changed
		source file name to fftlib.c.
	Removed some ugly optimizations that are no longer needed for
		CodeWarrier.

This code is public domain, do anything you want to with it.

[Moderators- This file should replace ffts-for-risc-121-c.hqx and can
be included on any CD]

-------------------------------------------------------------------------

This directory contains a public domain FFT library which was
optimized for speed on RISC processors such as the PowerPC.  All ffts
use single precision floats, for double precision just use a global
search and replace to change float to double in all source files.
Codewarrier Pro 1.0 project files are also supplied.

** Warning **   Perform rigorous testing to
your own standards before using this code.

 (John Green) green_jt@vsdec.npt.nuwc.navy.mil

files:
	fftTiming
Application to time complex ffts

	rfftTiming
Application to time real ffts

// Directory: fft libraries

files:

	fftext.c
Library of in-place fast fourier transforms. Contains forward and
inverse complex and real transforms.  The real fft's expect the
frequency domain data to have the real part of the fsamp/2 bin (which
has a 0 imaginary part) to be stored in the location for the imaginary
part of the DC bin (the DC bin of real data is also strictly real.)
You must first call an initialization routine fftInit before calling
the fft computation routines ffts, iffts, rffts and riffts.  The init
routines malloc the memory to store the cosine and bit reversed
counter tables as well as initializing their values.

	fftlib.c
Lower level library of in-place fast fourier transforms. Same as
fftext.c but you need to manage the mallocs for the cosine and bit
reversed tables yourself.


	fft2d.c
Library of 2d and 3d complex and 2d real in-place fast fourier
transforms.  The init routine fft2dInit must be called before using
the 2d routines and fft3dInit must be called before using the 3d
routines.  These init routines will also call the appropriate 1d init
routines in fftext.c

	matlib.c
Matrix transpose routines used by fft2d.c and complex vector multiply
for forming the product of two spectra.

	dxpose.c
Double precision matrix transpose for quick single precision complex
transposing

// Directory: timing code
This directory contains the source to fftTiming and rfftTiming

// Directory: Numerical Recipes testing
This directory contains files used to test the various fft routines
using the Numerical Recipes in C routines as a baseline.  These
routines can be purchased in PeeCee (after expanding you can move them
to a Mac) format from: http://cfata2.harvard.edu/numerical-recipes/
Unfortunately Numerical Recipes defines its forward and inverse fft's
backwards.  For complex fft's I just use their inverse fft as a
forward one, but for real ffts their forward fft followed by my
inverse fft reverses the data.  They also have ugly matrix and tensor
data types and start their indices with one, Fortran style, but these
are minor annoyances.

// Directory: Matlab testing
This directory contains files to test fast 1d and 2d convolution with
Matlab used to verify the results.  An example of using Matlab to test
the fft library routines is also given for the 2d real fft.
