@@ -3,7 +3,8 @@ use std::simd::prelude::f64x8;
33
44use crate :: planner:: { Planner32 , Planner64 } ;
55use crate :: {
6- fft_32_with_opts_and_plan, fft_64, fft_64_with_opts_and_plan, twiddles:: generate_twiddles,
6+ fft_32_with_opts_and_plan, fft_64, fft_64_with_opts_and_plan,
7+ twiddles:: { generate_twiddles, Twiddles } ,
78 Direction , Options ,
89} ;
910
@@ -60,19 +61,21 @@ macro_rules! impl_r2c_fft {
6061 let ( mut z_even, mut z_odd) : ( Vec <_>, Vec <_>) =
6162 input_re. chunks_exact( 2 ) . map( |c| ( c[ 0 ] , c[ 1 ] ) ) . unzip( ) ;
6263
63- let mut planner = <$planner>:: new( big_n, Direction :: Forward ) ;
64+ // let mut planner = <$planner>::new(big_n, Direction::Forward);
6465
6566 // save these for the untanngling step
66- let twiddle_re = planner. twiddles_re;
67- let twiddle_im = planner. twiddles_im;
67+ // let twiddle_re = planner.twiddles_re;
68+ // let twiddle_im = planner.twiddles_im;
69+ let stride = big_n / 2 ;
70+ let twiddles_iter = Twiddles :: <$precision>:: new( stride) ;
6871
69- planner = <$planner>:: new( big_n / 2 , Direction :: Forward ) ;
72+ let planner = <$planner>:: new( big_n / 2 , Direction :: Forward ) ;
7073
7174 // We only need (N / 2) / 2 twiddle factors for the actual FFT call, so we filter
7275 // filter_twiddles(&mut planner.twiddles_re, &mut planner.twiddles_im);
7376
7477 let opts = Options :: guess_options( z_even. len( ) ) ;
75- $fft_w_opts_and_plan( & mut z_even, & mut z_odd, & opts, & mut planner) ;
78+ $fft_w_opts_and_plan( & mut z_even, & mut z_odd, & opts, & planner) ;
7679
7780 // Z = np.fft.fft(z)
7881 let mut z_x_re = vec![ 0.0 ; big_n / 2 ] ;
@@ -135,19 +138,18 @@ macro_rules! impl_r2c_fft {
135138 . zip( z_x_im. iter( ) )
136139 . zip( z_y_re. iter( ) )
137140 . zip( z_y_im. iter( ) )
138- . zip( twiddle_re. iter( ) )
139- . zip( twiddle_im. iter( ) )
140141 . zip( output_re_first_half)
141142 . zip( output_im_first_half)
142143 . zip( output_re_second_half)
143144 . zip( output_im_second_half)
145+ . zip( twiddles_iter)
144146 . for_each(
145147 |(
146148 (
147- ( ( ( ( ( ( ( zx_re, zx_im) , zy_re) , zy_im) , w_re ) , w_im ) , o_re_fh ) , o_im_fh ) ,
148- o_re_sh ,
149+ ( ( ( ( ( ( zx_re, zx_im) , zy_re) , zy_im) , o_re_fh ) , o_im_fh ) , o_re_sh ) ,
150+ o_im_sh ,
149151 ) ,
150- o_im_sh ,
152+ ( w_re , w_im ) ,
151153 ) | {
152154 let wz_re = w_re * zy_re - w_im * zy_im;
153155 let wz_im = w_re * zy_im + w_im * zy_re;
0 commit comments