FFTSingle.mesa
Copyright Ó 1991, 1992 by Xerox Corporation. All rights reserved.
Spreitze, January 25, 1991 8:49 am PST
DIRECTORY Complex;
FFTSingle: CEDAR DEFINITIONS = {
Actually, this interface does any DFT (Discrete Fourier Transform).
"Single" appears in the name because single-precision floating-point is used.
COMPLEX: TYPE ~ Complex.VEC;
ComplexSeq: TYPE ~ REF ComplexSequence;
ComplexSequence: TYPE ~ RECORD [
length: NAT,
elts: SEQUENCE size: NAT OF COMPLEX];
A mutable buffer of complex numbers. Only the first length are meaningful.
NewComplexSeq: PROC [size: NAT] RETURNS [ComplexSeq];
Returns one with length=0.
CsAppend: PROC [cs: ComplexSeq, c: COMPLEX] RETURNS [ComplexSeq];
Allocates a new ComplexSeq if necessary.
CsCopy: PROC [cs: ComplexSeq, start, size: INT] RETURNS [ComplexSeq];
Returns a new ComplexSeq of given size.
Result's length is MAX[0, cs.length-start].
new[i] = cs[i+start] for i in [0 .. new.length).
DestructiveFft: PROC [cs: ComplexSeq, inv: BOOL] RETURNS [ComplexSeq];
No performance guarantee when length isn't a power of 2.
Result may be different buffer from arg; arg may get trashed.
DestructiveMap: PROC [
cs: ComplexSeq,
proc: PROC [COMPLEX] RETURNS [COMPLEX]];
Transform every meaningful element of the buffer by the given proc.
}.