Mercurial > hg > may
changeset 449:ea95ee1cb3a6
Add complex-complex forward/inverse
author | Chris Cannam |
---|---|
date | Thu, 24 Oct 2013 11:12:07 +0100 |
parents | 3a7b70ecfb70 |
children | 048dcc02bdbe |
files | src/may/transform/fft.yeti src/may/transform/test/test_fft.yeti |
diffstat | 2 files changed, 33 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/may/transform/fft.yeti Thu Oct 24 10:01:36 2013 +0100 +++ b/src/may/transform/fft.yeti Thu Oct 24 11:12:07 2013 +0100 @@ -32,6 +32,34 @@ v[1] := complex.real arr[n-1]; v); +unpackedToComplex len unp is number -> ~double[] -> array<cplx> = + array + (map2 complex.complex + (vec.list (vec.slice unp 0 len)) + (vec.list (vec.slice unp len (len*2)))); + +complexToUnpacked cc is array<cplx> -> ~double[] = + vec.primitive + (vec.fromList (map complex.real cc ++ map complex.imaginary cc)); + +//!!! doc: n separately as below +forward n = + (d = new DoubleFFT_1D(n); + do cc: + arr = complexToUnpacked cc; + d#complexForward(arr); + unpackedToComplex n arr; + done); + +//!!! doc: n separately as below +inverse n = + (d = new DoubleFFT_1D(n); + do cc: + arr = complexToUnpacked cc; + d#complexInverse(arr, true); + unpackedToComplex n arr; + done); + //!!! doc: n is supplied separately from the input vector to support partial evaluation //!!! doc: output has n/2+1 complex values //!!! doc: powers of two only? check with jtransforms @@ -40,7 +68,7 @@ do bl: v = vec.primitive (vec.resizedTo n bl); d#realForward(v); - packedToComplex (vec.length bl) v; + packedToComplex n v; done); //!!! doc: n separately as above @@ -58,6 +86,8 @@ done); { +forward, +inverse, realForward, realForwardMagnitude, realInverse,