changeset 42:805b61175443

Return re, im arrays separately in unpack from fft (instead of using structs, which is very slow)
author Chris Cannam
date Sun, 23 Dec 2012 21:01:51 +0000
parents 06d7d07bb72c
children 27c6525fa5db
files fft.yeti test/test_fft.yeti
diffstat 2 files changed, 22 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/fft.yeti	Sun Dec 23 16:28:06 2012 +0000
+++ b/fft.yeti	Sun Dec 23 21:01:51 2012 +0000
@@ -4,21 +4,23 @@
 import edu.emory.mathcs.jtransforms.fft: DoubleFFT_1D;
 
 b = load block;
+vec = load fvector;
 ch = load channels;
 
 unpack p =
-   (m = ch.deinterleaved 2 p;
-    unpacked = array (map2 do re im: { re, im } done m[0] m[1]);
-    push unpacked { re = unpacked[0].im, im = 0 };
-    unpacked[0] := unpacked[0] with { im = 0 };
-    unpacked);
+   (m = ch.deinterleaved 2 (b.block p);
+    m[0] := vec.concat [m[0], vec.consts m[1][0] 1];
+    m[1] := vec.concat [m[1], vec.zeros 1];
+    m[1][0] := 0;
+    m;
+    );
 
 fft n = 
    (d = new DoubleFFT_1D(n);
     do bl:
         v = b.unblock (b.copyOf bl);
         d#realForward(v);
-        unpack (b.block v);
+        unpack v;
     done);
 
 {
--- a/test/test_fft.yeti	Sun Dec 23 16:28:06 2012 +0000
+++ b/test/test_fft.yeti	Sun Dec 23 21:01:51 2012 +0000
@@ -2,39 +2,40 @@
 module test.test_fft;
 
 { fft } = load fft;
-{ fromList, list } = load block;
+{ fromList } = load block;
+{ list } = load fvector;
 { declare, compare } = load test.test;
 
 declare [
 
 "dc": \(
-    out = fft 4 (fromList [1,1,1,1]);
-    compare out (array [{re=4, im=0}, {re=0, im=0}, {re=0, im=0}])
+    out = map list (fft 4 (fromList [1,1,1,1]));
+    compare out [[4,0,0], [0,0,0]]
 ),
 
 "sine": \(
-    out = fft 4 (fromList [0,1,0,-1]);
-    compare out (array [{re=0, im=0}, {re=0, im=(-2)}, {re=0, im=0}])
+    out = map list (fft 4 (fromList [0,1,0,-1]));
+    compare out [[0,0,0], [0,-2,0]]
 ),
 
 "cosine": \(
-    out = fft 4 (fromList [1,0,-1,0]);
-    compare out (array [{re=0, im=0}, {re=2, im=0}, {re=0, im=0}])
+    out = map list (fft 4 (fromList [1,0,-1,0]));
+    compare out [[0,2,0], [0,0,0]]
 ),
 
 "sineCosine": \(
-    out = fft 4 (fromList [0.5,1,-0.5,-1]);
-    compare out (array [{re=0, im=0}, {re=1, im=(-2)}, {re=0, im=0}])
+    out = map list (fft 4 (fromList [0.5,1,-0.5,-1]));
+    compare out [[0,1,0], [0,-2,0]]
 ),
 
 "nyquist": \(
-    out = fft 4 (fromList [1,-1,1,-1]);
-    compare out (array [{re=0, im=0}, {re=0, im=0}, {re=4, im=0}])
+    out = map list (fft 4 (fromList [1,-1,1,-1]));
+    compare out [[0,0,4], [0,0,0]]
 ),
 
 "dirac": \(
-    out = fft 4 (fromList [1,0,0,0]);
-    compare out (array [{re=1, im=0}, {re=1, im=0}, {re=1, im=0}])
+    out = map list (fft 4 (fromList [1,0,0,0]));
+    compare out [[1,1,1], [0,0,0]]
 ),
 
 ];