# HG changeset patch # User Chris Cannam # Date 1368268054 -3600 # Node ID d841bfc143dd55e6e8b220e61faf25bb807f4913 # Parent e5158af5e8bee4715767f49b145bfb78ccab6f24 Update complex, fft diff -r e5158af5e8be -r d841bfc143dd yetilab/block/complex.yeti --- 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, - magnitudes is list? -> block, - angles is list? -> block, + magnitudes is list? -> vector, + angles is list? -> vector, } diff -r e5158af5e8be -r d841bfc143dd yetilab/block/complextype.yeti --- /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; + +(); + diff -r e5158af5e8be -r d841bfc143dd yetilab/test/all.yeti --- 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, diff -r e5158af5e8be -r d841bfc143dd yetilab/transform/fft.yeti --- 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 = + (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); {