changeset 213:d841bfc143dd matrix_opaque_immutable

Update complex, fft
author Chris Cannam
date Sat, 11 May 2013 11:27:34 +0100
parents e5158af5e8be
children 709fba377099
files yetilab/block/complex.yeti yetilab/block/complextype.yeti yetilab/test/all.yeti yetilab/transform/fft.yeti
diffstat 4 files changed, 27 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- a/yetilab/block/complex.yeti	Sat May 11 11:19:48 2013 +0100
+++ b/yetilab/block/complex.yeti	Sat May 11 11:27:34 2013 +0100
@@ -1,9 +1,10 @@
 
 module yetilab.block.complex;
 
-load yetilab.block.blocktype;
+load yetilab.block.vectortype;
+load yetilab.block.complextype;
 
-bl = load yetilab.block.block;
+vec = load yetilab.block.vector;
 
 import java.lang: ClassCastException;
 
@@ -41,8 +42,6 @@
         yrt,
 end;
 
-typedef opaque cplx = ~Cplx;
-
 real c1 is ~Cplx -> number =
     c1#getReal();
 
@@ -67,11 +66,11 @@
 zeros n is number -> array<~Cplx> =
     array (map \(complex 0 0) [1..n]);
 
-magnitudes cc is list?<~Cplx> -> block =
-    bl.fromList (map magnitude cc);
+magnitudes cc is list?<~Cplx> -> vector =
+    vec.fromList (map magnitude cc);
 
-angles cc is list?<~Cplx> -> block =
-    bl.fromList (map angle cc);
+angles cc is list?<~Cplx> -> vector =
+    vec.fromList (map angle cc);
 
 {
    real,
@@ -93,7 +92,7 @@
    add is cplx -> cplx -> cplx,
    scale is number -> cplx -> cplx,
    zeros is number -> array<cplx>,
-   magnitudes is list?<cplx> -> block,
-   angles is list?<cplx> -> block,
+   magnitudes is list?<cplx> -> vector,
+   angles is list?<cplx> -> vector,
 }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/yetilab/block/complextype.yeti	Sat May 11 11:27:34 2013 +0100
@@ -0,0 +1,7 @@
+
+module yetilab.block.complextype;
+
+typedef opaque cplx = ~Cplx;
+
+();
+
--- a/yetilab/test/all.yeti	Sat May 11 11:19:48 2013 +0100
+++ b/yetilab/test/all.yeti	Sat May 11 11:27:34 2013 +0100
@@ -4,7 +4,7 @@
 { runTests } = load yetilab.test.test;
 
 tests = [
-"fvector"    : load yetilab.block.test.test_fvector,
+"vector"     : load yetilab.block.test.test_vector,
 "blockfuncs" : load yetilab.block.test.test_blockfuncs,
 "complex"    : load yetilab.block.test.test_complex,
 "framer"     : load yetilab.stream.test.test_framer,
--- a/yetilab/transform/fft.yeti	Sat May 11 11:19:48 2013 +0100
+++ b/yetilab/transform/fft.yeti	Sat May 11 11:27:34 2013 +0100
@@ -3,12 +3,13 @@
 
 import edu.emory.mathcs.jtransforms.fft: DoubleFFT_1D;
 
-b = load yetilab.block.block;
-vec = load yetilab.block.fvector;
+vec = load yetilab.block.vector;
 complex = load yetilab.block.complex;
 
-packedToComplex p =
-   (n = (vec.length p) / 2;
+load yetilab.block.complextype;
+
+packedToComplex len p is number -> ~double[] -> array<cplx> =
+   (n = len / 2;
     array
        (map do i:
             re = if i == n then p[1] else p[i*2] fi;
@@ -18,24 +19,23 @@
 
 complexToPacked arr =
    (n = length arr;
-    v = vec.vector
-       (map do i:
+    v = (map do i:
             ix = int (i/2);
             if i == ix*2 then
                 complex.real arr[ix]
             else 
                 complex.imaginary arr[ix] 
             fi;
-            done [0..(n-1)*2-1]);
+            done [0..(n-1)*2-1]) as ~double[];
     v[1] := complex.real arr[n-1];
     v);
 
 realForward n = 
    (d = new DoubleFFT_1D(n);
     do bl:
-        v = b.vector bl;
+        v = vec.primitive bl;
         d#realForward(v);
-        packedToComplex v;
+        packedToComplex (vec.length bl) v;
     done);
 
 realInverse n = 
@@ -43,7 +43,7 @@
     do arr:
         v = complexToPacked arr;
         d#realInverse(v, true);
-        b.block v;
+        vec.vector v;
     done);
 
 {