<> <> <> DIRECTORY Basics, Complex, FFT, IO, Random, RealFns, Rope; FFTImpl: CEDAR PROGRAM IMPORTS Basics, Complex, IO, Random, RealFns EXPORTS FFT = BEGIN OPEN FFT; pi: REAL = 3.14159276; radiansPerDeg: REAL _ pi/180.; TimeToFreq: PUBLIC PROC [ v: CVecRef ] = BEGIN p: NAT _ 1; exp: NAT _ 2; -- 2**p WHILE exp> FOR i: NAT IN [0..v.size) DO j: NAT = BitRev[i, p]; IF i> FOR dist: NAT _ 1, 2*dist WHILE dist> w: Complex.Vec = Complex.FromPolar[r: 1.0, radians: pi/dist]; u: Complex.Vec _ [x: 1.0, y: 0.0]; FOR j: NAT IN [0..dist) DO t: Complex.Vec; FOR i: NAT _ j, i+2*dist WHILE i0 THEN s.PutRope[", "]; s.PutF[format: "%d: %g+j%g", v1: IO.int[i], v2: IO.real[v[i].x], v3: IO.real[v[i].y]]; ENDLOOP; RETURN[IO.RopeFromROS[s]]; END; -- of Print END.