module Numeric.Transform.Fourier.FFTHard where
import Data.Array
import Data.Complex
{-# specialize fft'2 :: Array Int (Complex Float) -> Array Int (Complex Float) #-}
{-# specialize fft'2 :: Array Int (Complex Double) -> Array Int (Complex Double) #-}
fft'2 :: (Ix a, Integral a, RealFloat b) => Array a (Complex b)
-> Array a (Complex b)
fft'2 :: forall a b.
(Ix a, Integral a, RealFloat b) =>
Array a (Complex b) -> Array a (Complex b)
fft'2 Array a (Complex b)
a = forall i e. Ix i => (i, i) -> [(i, e)] -> Array i e
array (a
0,a
1) [ (a
0, ((b
tmp1 forall a. Num a => a -> a -> a
+ b
tmp2) forall a. a -> a -> Complex a
:+ (b
tmp3 forall a. Num a => a -> a -> a
+ b
tmp4))),
(a
1, ((b
tmp1 forall a. Num a => a -> a -> a
- b
tmp2) forall a. a -> a -> Complex a
:+ (b
tmp3 forall a. Num a => a -> a -> a
- b
tmp4) )) ]
where tmp1 :: b
tmp1 = forall a. Complex a -> a
realPart (Array a (Complex b)
aforall i e. Ix i => Array i e -> i -> e
!a
0)
tmp3 :: b
tmp3 = forall a. Complex a -> a
imagPart (Array a (Complex b)
aforall i e. Ix i => Array i e -> i -> e
!a
0)
tmp2 :: b
tmp2 = forall a. Complex a -> a
realPart (Array a (Complex b)
aforall i e. Ix i => Array i e -> i -> e
!a
1)
tmp4 :: b
tmp4 = forall a. Complex a -> a
imagPart (Array a (Complex b)
aforall i e. Ix i => Array i e -> i -> e
!a
1)
{-# specialize fft'3 :: Array Int (Complex Float) -> Array Int (Complex Float) #-}
{-# specialize fft'3 :: Array Int (Complex Double) -> Array Int (Complex Double) #-}
fft'3 :: (Ix a, Integral a, RealFloat b) => Array a (Complex b)
-> Array a (Complex b)
fft'3 :: forall a b.
(Ix a, Integral a, RealFloat b) =>
Array a (Complex b) -> Array a (Complex b)
fft'3 Array a (Complex b)
a = forall i e. Ix i => (i, i) -> [(i, e)] -> Array i e
array (a
0,a
2) [ (a
0, ((b
tmp1 forall a. Num a => a -> a -> a
+ b
tmp4) forall a. a -> a -> Complex a
:+ (b
tmp10 forall a. Num a => a -> a -> a
+ b
tmp11))),
(a
1, ((b
tmp5 forall a. Num a => a -> a -> a
+ b
tmp8) forall a. a -> a -> Complex a
:+ (b
tmp9 forall a. Num a => a -> a -> a
+ b
tmp12))),
(a
2, ((b
tmp5 forall a. Num a => a -> a -> a
- b
tmp8) forall a. a -> a -> Complex a
:+ (b
tmp12 forall a. Num a => a -> a -> a
- b
tmp9))) ]
where k866025403 :: b
k866025403 = forall a. Floating a => a -> a
sqrt b
3 forall a. Fractional a => a -> a -> a
/ b
2
k500000000 :: b
k500000000 = b
0.5
tmp1 :: b
tmp1 = forall a. Complex a -> a
realPart (Array a (Complex b)
aforall i e. Ix i => Array i e -> i -> e
!a
0)
tmp10 :: b
tmp10 = forall a. Complex a -> a
imagPart (Array a (Complex b)
aforall i e. Ix i => Array i e -> i -> e
!a
0)
tmp2 :: b
tmp2 = forall a. Complex a -> a
realPart (Array a (Complex b)
aforall i e. Ix i => Array i e -> i -> e
!a
1)
tmp6 :: b
tmp6 = forall a. Complex a -> a
imagPart (Array a (Complex b)
aforall i e. Ix i => Array i e -> i -> e
!a
1)
tmp3 :: b
tmp3 = forall a. Complex a -> a
realPart (Array a (Complex b)
aforall i e. Ix i => Array i e -> i -> e
!a
2)
tmp7 :: b
tmp7 = forall a. Complex a -> a
imagPart (Array a (Complex b)
aforall i e. Ix i => Array i e -> i -> e
!a
2)
tmp4 :: b
tmp4 = b
tmp2 forall a. Num a => a -> a -> a
+ b
tmp3
tmp9 :: b
tmp9 = b
k866025403 forall a. Num a => a -> a -> a
* (b
tmp3 forall a. Num a => a -> a -> a
- b
tmp2)
tmp8 :: b
tmp8 = b
k866025403 forall a. Num a => a -> a -> a
* (b
tmp6 forall a. Num a => a -> a -> a
- b
tmp7)
tmp11 :: b
tmp11 = b
tmp6 forall a. Num a => a -> a -> a
+ b
tmp7
tmp5 :: b
tmp5 = b
tmp1 forall a. Num a => a -> a -> a
- (b
k500000000 forall a. Num a => a -> a -> a
* b
tmp4)
tmp12 :: b
tmp12 = b
tmp10 forall a. Num a => a -> a -> a
- (b
k500000000 forall a. Num a => a -> a -> a
* b
tmp11)
{-# specialize fft'4 :: Array Int (Complex Float) -> Array Int (Complex Float) #-}
{-# specialize fft'4 :: Array Int (Complex Double) -> Array Int (Complex Double) #-}
fft'4 :: (Ix a, Integral a, RealFloat b) => Array a (Complex b)
-> Array a (Complex b)
fft'4 :: forall a b.
(Ix a, Integral a, RealFloat b) =>
Array a (Complex b) -> Array a (Complex b)
fft'4 Array a (Complex b)
a = forall i e. Ix i => (i, i) -> [(i, e)] -> Array i e
array (a
0,a
3) [ (a
0, (b
tmp3 forall a. Num a => a -> a -> a
+ b
tmp6) forall a. a -> a -> Complex a
:+ (b
tmp15 forall a. Num a => a -> a -> a
+ b
tmp16)),
(a
1, (b
tmp11 forall a. Num a => a -> a -> a
+ b
tmp14) forall a. a -> a -> Complex a
:+ (b
tmp9 forall a. Num a => a -> a -> a
- b
tmp10)),
(a
2, (b
tmp3 forall a. Num a => a -> a -> a
- b
tmp6) forall a. a -> a -> Complex a
:+ (b
tmp15 forall a. Num a => a -> a -> a
- b
tmp16)),
(a
3, (b
tmp11 forall a. Num a => a -> a -> a
- b
tmp14) forall a. a -> a -> Complex a
:+ (b
tmp10 forall a. Num a => a -> a -> a
+ b
tmp9)) ]
where tmp1 :: b
tmp1 = forall a. Complex a -> a
realPart (Array a (Complex b)
aforall i e. Ix i => Array i e -> i -> e
!a
0)
tmp7 :: b
tmp7 = forall a. Complex a -> a
imagPart (Array a (Complex b)
aforall i e. Ix i => Array i e -> i -> e
!a
0)
tmp4 :: b
tmp4 = forall a. Complex a -> a
realPart (Array a (Complex b)
aforall i e. Ix i => Array i e -> i -> e
!a
1)
tmp12 :: b
tmp12 = forall a. Complex a -> a
imagPart (Array a (Complex b)
aforall i e. Ix i => Array i e -> i -> e
!a
1)
tmp2 :: b
tmp2 = forall a. Complex a -> a
realPart (Array a (Complex b)
aforall i e. Ix i => Array i e -> i -> e
!a
2)
tmp8 :: b
tmp8 = forall a. Complex a -> a
imagPart (Array a (Complex b)
aforall i e. Ix i => Array i e -> i -> e
!a
2)
tmp5 :: b
tmp5 = forall a. Complex a -> a
realPart (Array a (Complex b)
aforall i e. Ix i => Array i e -> i -> e
!a
3)
tmp13 :: b
tmp13 = forall a. Complex a -> a
imagPart (Array a (Complex b)
aforall i e. Ix i => Array i e -> i -> e
!a
3)
tmp3 :: b
tmp3 = b
tmp1 forall a. Num a => a -> a -> a
+ b
tmp2
tmp11 :: b
tmp11 = b
tmp1 forall a. Num a => a -> a -> a
- b
tmp2
tmp9 :: b
tmp9 = b
tmp7 forall a. Num a => a -> a -> a
- b
tmp8
tmp15 :: b
tmp15 = b
tmp7 forall a. Num a => a -> a -> a
+ b
tmp8
tmp6 :: b
tmp6 = b
tmp4 forall a. Num a => a -> a -> a
+ b
tmp5
tmp10 :: b
tmp10 = b
tmp4 forall a. Num a => a -> a -> a
- b
tmp5
tmp14 :: b
tmp14 = b
tmp12 forall a. Num a => a -> a -> a
- b
tmp13
tmp16 :: b
tmp16 = b
tmp12 forall a. Num a => a -> a -> a
+ b
tmp13