annotate yetilab/transform/fft.yeti @ 172:f1c75782e56e

Further tests and fixes
author Chris Cannam
date Thu, 02 May 2013 17:36:43 +0100
parents d0abc9afe608
children d841bfc143dd
rev   line source
Chris@41 1
Chris@93 2 module yetilab.transform.fft;
Chris@41 3
Chris@41 4 import edu.emory.mathcs.jtransforms.fft: DoubleFFT_1D;
Chris@41 5
Chris@93 6 b = load yetilab.block.block;
Chris@93 7 vec = load yetilab.block.fvector;
Chris@93 8 complex = load yetilab.block.complex;
Chris@41 9
Chris@48 10 packedToComplex p =
Chris@46 11 (n = (vec.length p) / 2;
Chris@46 12 array
Chris@46 13 (map do i:
Chris@46 14 re = if i == n then p[1] else p[i*2] fi;
Chris@46 15 im = if i == 0 or i == n then 0 else p[i*2+1] fi;
Chris@46 16 complex.complex re im;
Chris@46 17 done [0..n]));
Chris@41 18
Chris@48 19 complexToPacked arr =
Chris@48 20 (n = length arr;
Chris@48 21 v = vec.vector
Chris@48 22 (map do i:
Chris@48 23 ix = int (i/2);
Chris@48 24 if i == ix*2 then
Chris@48 25 complex.real arr[ix]
Chris@48 26 else
Chris@48 27 complex.imaginary arr[ix]
Chris@48 28 fi;
Chris@48 29 done [0..(n-1)*2-1]);
Chris@48 30 v[1] := complex.real arr[n-1];
Chris@48 31 v);
Chris@48 32
Chris@48 33 realForward n =
Chris@41 34 (d = new DoubleFFT_1D(n);
Chris@41 35 do bl:
Chris@47 36 v = b.vector bl;
Chris@41 37 d#realForward(v);
Chris@48 38 packedToComplex v;
Chris@48 39 done);
Chris@48 40
Chris@48 41 realInverse n =
Chris@48 42 (d = new DoubleFFT_1D(n);
Chris@48 43 do arr:
Chris@48 44 v = complexToPacked arr;
Chris@48 45 d#realInverse(v, true);
Chris@48 46 b.block v;
Chris@41 47 done);
Chris@41 48
Chris@41 49 {
Chris@48 50 realForward,
Chris@48 51 realInverse,
Chris@41 52 }
Chris@41 53