Mercurial > hg > may
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); {