# HG changeset patch # User Chris Cannam # Date 1356296511 0 # Node ID 805b611754439aefc69fd9a9c700210c6ee91ee2 # Parent 06d7d07bb72cdcab61841ef9b564ac39c8994392 Return re, im arrays separately in unpack from fft (instead of using structs, which is very slow) diff -r 06d7d07bb72c -r 805b61175443 fft.yeti --- 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); { diff -r 06d7d07bb72c -r 805b61175443 test/test_fft.yeti --- 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]] ), ];