Mercurial > hg > may
annotate yetilab/transform/fft.yeti @ 222:77c6a81c577f matrix_opaque_immutable
Move block directory -> vector
author | Chris Cannam |
---|---|
date | Sat, 11 May 2013 15:58:36 +0100 |
parents | ddc8fa794880 |
children | d7dd391a90fd |
rev | line source |
---|---|
Chris@41 | 1 |
Chris@93 | 2 module yetilab.transform.fft; |
Chris@41 | 3 |
Chris@41 | 4 import edu.emory.mathcs.jtransforms.fft: DoubleFFT_1D; |
Chris@41 | 5 |
Chris@222 | 6 vec = load yetilab.vector.vector; |
Chris@222 | 7 complex = load yetilab.vector.complex; |
Chris@41 | 8 |
Chris@222 | 9 load yetilab.vector.complextype; |
Chris@213 | 10 |
Chris@213 | 11 packedToComplex len p is number -> ~double[] -> array<cplx> = |
Chris@213 | 12 (n = len / 2; |
Chris@46 | 13 array |
Chris@46 | 14 (map do i: |
Chris@46 | 15 re = if i == n then p[1] else p[i*2] fi; |
Chris@46 | 16 im = if i == 0 or i == n then 0 else p[i*2+1] fi; |
Chris@46 | 17 complex.complex re im; |
Chris@46 | 18 done [0..n])); |
Chris@41 | 19 |
Chris@48 | 20 complexToPacked arr = |
Chris@48 | 21 (n = length arr; |
Chris@221 | 22 v = new double[n*2-2]; |
Chris@221 | 23 for [0..(n-1)*2-1] do i: |
Chris@221 | 24 ix = int (i/2); |
Chris@221 | 25 v[i] := |
Chris@48 | 26 if i == ix*2 then |
Chris@48 | 27 complex.real arr[ix] |
Chris@48 | 28 else |
Chris@48 | 29 complex.imaginary arr[ix] |
Chris@48 | 30 fi; |
Chris@221 | 31 done; |
Chris@48 | 32 v[1] := complex.real arr[n-1]; |
Chris@48 | 33 v); |
Chris@48 | 34 |
Chris@48 | 35 realForward n = |
Chris@41 | 36 (d = new DoubleFFT_1D(n); |
Chris@41 | 37 do bl: |
Chris@213 | 38 v = vec.primitive bl; |
Chris@41 | 39 d#realForward(v); |
Chris@213 | 40 packedToComplex (vec.length bl) v; |
Chris@48 | 41 done); |
Chris@48 | 42 |
Chris@48 | 43 realInverse n = |
Chris@48 | 44 (d = new DoubleFFT_1D(n); |
Chris@48 | 45 do arr: |
Chris@48 | 46 v = complexToPacked arr; |
Chris@48 | 47 d#realInverse(v, true); |
Chris@213 | 48 vec.vector v; |
Chris@41 | 49 done); |
Chris@41 | 50 |
Chris@41 | 51 { |
Chris@48 | 52 realForward, |
Chris@48 | 53 realInverse, |
Chris@41 | 54 } |
Chris@41 | 55 |