@@ -64,21 +64,29 @@ var chRef = require( '@stdlib/fft/base/fftpack/lib/ch_ref.js' );
6464var ccRef = require ( '@stdlib/fft/base/fftpack/lib/cc_ref.js' ) ;
6565
6666
67+ // VARIABLES //
68+
69+ var TR11 = 0.309016994374947 ;
70+ var TI11 = 0.951056516295154 ;
71+ var TR12 = - 0.809016994374947 ;
72+ var TI12 = 0.587785252292473
73+
74+
6775// MAIN //
6876
6977/**
7078* Performs a pass of length 5 of the FFT algorithm with a sign factor.
7179*
7280* @private
73- * @param {integer } ido - Number of real values for each transform
74- * @param {integer } l1 - Length of the input sequences
75- * @param {Float64Array } cc - Input array containing sequences to be transformed
76- * @param {Float64Array } ch - Output array containing transformed sequences
77- * @param {Float64Array } wa1 - First array of twiddle factors
78- * @param {Float64Array } wa2 - Second array of twiddle factors
79- * @param {Float64Array } wa3 - Third array of twiddle factors
80- * @param {Float64Array } wa4 - Fourth array of twiddle factors
81- * @param {number } fsign - Sign factor for the FFT computation
81+ * @param {integer } ido - number of real values for each transform
82+ * @param {integer } l1 - length of the input sequences
83+ * @param {Float64Array } cc - input array containing sequences to be transformed
84+ * @param {Float64Array } ch - output array containing transformed sequences
85+ * @param {Float64Array } wa1 - first array of twiddle factors
86+ * @param {Float64Array } wa2 - second array of twiddle factors
87+ * @param {Float64Array } wa3 - third array of twiddle factors
88+ * @param {Float64Array } wa4 - fourth array of twiddle factors
89+ * @param {number } fsign - sign factor for the FFT computation
8290* @returns {void }
8391*/
8492function passfb5 ( ido , l1 , cc , ch , wa1 , wa2 , wa3 , wa4 , fsign ) {
@@ -111,55 +119,80 @@ function passfb5( ido, l1, cc, ch, wa1, wa2, wa3, wa4, fsign ) {
111119 var i ;
112120 var k ;
113121
122+ TI11 *= fsign ;
123+ TI12 *= fsign ;
124+
114125 // Parameter adjustments...
115126 ch_offset = 1 + ( ido * ( 1 + l1 ) ) ;
116- cc_offset = 1 + ( ido * 5 ) ;
127+ cc_offset = 1 + ( ido * 6 ) ;
117128
118129 // Function body:
119130 if ( ido === 2 ) {
120131 for ( k = 1 ; k <= l1 ; ++ k ) {
121- ti1 = cc [ ccRef ( 2 , 1 , k , 4 , ido ) - cc_offset ] - cc [ ccRef ( 2 , 3 , k , 4 , ido ) - cc_offset ] ; // eslint-disable-line max-len
122- ti2 = cc [ ccRef ( 2 , 1 , k , 4 , ido ) - cc_offset ] + cc [ ccRef ( 2 , 3 , k , 4 , ido ) - cc_offset ] ; // eslint-disable-line max-len
123- tr4 = cc [ ccRef ( 2 , 4 , k , 4 , ido ) - cc_offset ] - cc [ ccRef ( 2 , 2 , k , 4 , ido ) - cc_offset ] ; // eslint-disable-line max-len
124- ti3 = cc [ ccRef ( 2 , 2 , k , 4 , ido ) - cc_offset ] + cc [ ccRef ( 2 , 4 , k , 4 , ido ) - cc_offset ] ; // eslint-disable-line max-len
125- tr1 = cc [ ccRef ( 1 , 1 , k , 4 , ido ) - cc_offset ] - cc [ ccRef ( 1 , 3 , k , 4 , ido ) - cc_offset ] ; // eslint-disable-line max-len
126- tr2 = cc [ ccRef ( 1 , 1 , k , 4 , ido ) - cc_offset ] + cc [ ccRef ( 1 , 3 , k , 4 , ido ) - cc_offset ] ; // eslint-disable-line max-len
127- ti4 = cc [ ccRef ( 1 , 2 , k , 4 , ido ) - cc_offset ] - cc [ ccRef ( 1 , 4 , k , 4 , ido ) - cc_offset ] ; // eslint-disable-line max-len
128- tr3 = cc [ ccRef ( 1 , 2 , k , 4 , ido ) - cc_offset ] + cc [ ccRef ( 1 , 4 , k , 4 , ido ) - cc_offset ] ; // eslint-disable-line max-len
129- ch [ chRef ( 1 , k , 1 , l1 , ido ) - ch_offset ] = tr2 + tr3 ;
130- ch [ chRef ( 1 , k , 3 , l1 , ido ) - ch_offset ] = tr2 - tr3 ;
131- ch [ chRef ( 2 , k , 1 , l1 , ido ) - ch_offset ] = ti2 + ti3 ;
132- ch [ chRef ( 2 , k , 3 , l1 , ido ) - ch_offset ] = ti2 - ti3 ;
133- ch [ chRef ( 1 , k , 2 , l1 , ido ) - ch_offset ] = tr1 + tr4 ;
134- ch [ chRef ( 1 , k , 4 , l1 , ido ) - ch_offset ] = tr1 - tr4 ;
135- ch [ chRef ( 2 , k , 2 , l1 , ido ) - ch_offset ] = ti1 + ti4 ;
136- ch [ chRef ( 2 , k , 4 , l1 , ido ) - ch_offset ] = ti1 - ti4 ;
132+ ti5 = cc [ ccRef ( 2 , 2 , k , 5 , ido ) - cc_offset ] - cc [ ccRef ( 2 , 5 , k , 5 , ido ) - cc_offset ] ;
133+ ti2 = cc [ ccRef ( 2 , 2 , k , 5 , ido ) - cc_offset ] + cc [ ccRef ( 2 , 5 , k , 5 , ido ) - cc_offset ] ;
134+ ti4 = cc [ ccRef ( 2 , 3 , k , 5 , ido ) - cc_offset ] - cc [ ccRef ( 2 , 4 , k , 5 , ido ) - cc_offset ] ;
135+ ti3 = cc [ ccRef ( 2 , 3 , k , 5 , ido ) - cc_offset ] + cc [ ccRef ( 2 , 4 , k , 5 , ido ) - cc_offset ] ;
136+ tr5 = cc [ ccRef ( 1 , 2 , k , 5 , ido ) - cc_offset ] - cc [ ccRef ( 1 , 5 , k , 5 , ido ) - cc_offset ] ;
137+ tr2 = cc [ ccRef ( 1 , 2 , k , 5 , ido ) - cc_offset ] + cc [ ccRef ( 1 , 5 , k , 5 , ido ) - cc_offset ] ;
138+ tr4 = cc [ ccRef ( 1 , 3 , k , 5 , ido ) - cc_offset ] - cc [ ccRef ( 1 , 4 , k , 5 , ido ) - cc_offset ] ;
139+ tr3 = cc [ ccRef ( 1 , 3 , k , 5 , ido ) - cc_offset ] + cc [ ccRef ( 1 , 4 , k , 5 , ido ) - cc_offset ] ;
140+ ch [ chRef ( 1 , k , 1 , l1 , ido ) - ch_offset ] = cc [ ccRef ( 1 , 1 , k , 5 , ido ) - cc_offset ] + tr2 + tr3 ;
141+ ch [ chRef ( 2 , k , 1 , l1 , ido ) - ch_offset ] = cc [ ccRef ( 2 , 1 , k , 5 , ido ) - cc_offset ] + ti2 + ti3 ;
142+ cr2 = cc [ ccRef ( 1 , 1 , k , 5 , ido ) - cc_offset ] + TR11 * tr2 + TR12 * tr3 ;
143+ ci2 = cc [ ccRef ( 2 , 1 , k , 5 , ido ) - cc_offset ] + TR11 * ti2 + TR12 * ti3 ;
144+ cr3 = cc [ ccRef ( 1 , 1 , k , 5 , ido ) - cc_offset ] + TR12 * tr2 + TR11 * tr3 ;
145+ ci3 = cc [ ccRef ( 2 , 1 , k , 5 , ido ) - cc_offset ] + TR12 * ti2 + TR11 * ti3 ;
146+ cr5 = TI11 * tr5 + TI12 * tr4 ;
147+ ci5 = TI11 * ti5 + TI12 * ti4 ;
148+ cr4 = TI12 * tr5 - TI11 * tr4 ;
149+ ci4 = TI12 * ti5 - TI11 * ti4 ;
150+ ch [ chRef ( 1 , k , 2 , l1 , ido ) - ch_offset ] = cr2 - ci5 ;
151+ ch [ chRef ( 1 , k , 5 , l1 , ido ) - ch_offset ] = cr2 + ci5 ;
152+ ch [ chRef ( 2 , k , 2 , l1 , ido ) - ch_offset ] = ci2 + cr5 ;
153+ ch [ chRef ( 2 , k , 3 , l1 , ido ) - ch_offset ] = ci3 + cr4 ;
154+ ch [ chRef ( 1 , k , 3 , l1 , ido ) - ch_offset ] = cr3 - ci4 ;
155+ ch [ chRef ( 1 , k , 4 , l1 , ido ) - ch_offset ] = cr3 + ci4 ;
156+ ch [ chRef ( 2 , k , 4 , l1 , ido ) - ch_offset ] = ci3 - cr4 ;
157+ ch [ chRef ( 2 , k , 5 , l1 , ido ) - ch_offset ] = ci2 - cr5 ;
137158 }
138159 } else {
139160 for ( k = 1 ; k <= l1 ; ++ k ) {
140161 for ( i = 2 ; i <= ido ; i += 2 ) {
141- ti1 = cc [ ccRef ( i , 1 , k , 4 , ido ) - cc_offset ] - cc [ ccRef ( i , 3 , k , 4 , ido ) - cc_offset ] ; // eslint-disable-line max-len
142- ti2 = cc [ ccRef ( i , 1 , k , 4 , ido ) - cc_offset ] + cc [ ccRef ( i , 3 , k , 4 , ido ) - cc_offset ] ; // eslint-disable-line max-len
143- ti3 = cc [ ccRef ( i , 2 , k , 4 , ido ) - cc_offset ] + cc [ ccRef ( i , 4 , k , 4 , ido ) - cc_offset ] ; // eslint-disable-line max-len
144- tr4 = cc [ ccRef ( i , 4 , k , 4 , ido ) - cc_offset ] - cc [ ccRef ( i , 2 , k , 4 , ido ) - cc_offset ] ; // eslint-disable-line max-len
145- tr1 = cc [ ccRef ( i - 1 , 1 , k , 4 , ido ) - cc_offset ] - cc [ ccRef ( i - 1 , 3 , k , 4 , ido ) - cc_offset ] ; // eslint-disable-line max-len
146- tr2 = cc [ ccRef ( i - 1 , 1 , k , 4 , ido ) - cc_offset ] + cc [ ccRef ( i - 1 , 3 , k , 4 , ido ) - cc_offset ] ; // eslint-disable-line max-len
147- ti4 = cc [ ccRef ( i - 1 , 2 , k , 4 , ido ) - cc_offset ] - cc [ ccRef ( i - 1 , 4 , k , 4 , ido ) - cc_offset ] ; // eslint-disable-line max-len
148- tr3 = cc [ ccRef ( i - 1 , 2 , k , 4 , ido ) - cc_offset ] + cc [ ccRef ( i - 1 , 4 , k , 4 , ido ) - cc_offset ] ; // eslint-disable-line max-len
149- ch [ chRef ( i - 1 , k , 1 , l1 , ido ) - ch_offset ] = tr2 + tr3 ;
150- cr3 = tr2 - tr3 ;
151- ch [ chRef ( i , k , 1 , l1 , ido ) - ch_offset ] = ti2 + ti3 ;
152- ci3 = ti2 - ti3 ;
153- cr2 = tr1 + tr4 ;
154- cr4 = tr1 - tr4 ;
155- ci2 = ti1 + ti4 ;
156- ci4 = ti1 - ti4 ;
157- ch [ chRef ( i - 1 , k , 2 , l1 , ido ) - ch_offset ] = ( wa1 [ i - 1 - 1 ] * cr2 ) - ( wa1 [ i - 1 ] * ci2 ) ;
158- ch [ chRef ( i , k , 2 , l1 , ido ) - ch_offset ] = ( wa1 [ i - 1 - 1 ] * ci2 ) + ( wa1 [ i - 1 ] * cr2 ) ;
159- ch [ chRef ( i - 1 , k , 3 , l1 , ido ) - ch_offset ] = ( wa2 [ i - 1 - 1 ] * cr3 ) - ( wa2 [ i - 1 ] * ci3 ) ;
160- ch [ chRef ( i , k , 3 , l1 , ido ) - ch_offset ] = ( wa2 [ i - 1 - 1 ] * ci3 ) + ( wa2 [ i - 1 ] * cr3 ) ;
161- ch [ chRef ( i - 1 , k , 4 , l1 , ido ) - ch_offset ] = ( wa3 [ i - 1 - 1 ] * cr4 ) - ( wa3 [ i - 1 ] * ci4 ) ;
162- ch [ chRef ( i , k , 4 , l1 , ido ) - ch_offset ] = ( wa3 [ i - 1 - 1 ] * ci4 ) + ( wa3 [ i - 1 ] * cr4 ) ;
162+ ti5 = cc [ ccRef ( i , 2 , k , 5 , ido ) - cc_offset ] - cc [ ccRef ( i , 5 , k , 5 , ido ) - cc_offset ] ;
163+ ti2 = cc [ ccRef ( i , 2 , k , 5 , ido ) - cc_offset ] + cc [ ccRef ( i , 5 , k , 5 , ido ) - cc_offset ] ;
164+ ti4 = cc [ ccRef ( i , 3 , k , 5 , ido ) - cc_offset ] - cc [ ccRef ( i , 4 , k , 5 , ido ) - cc_offset ] ;
165+ ti3 = cc [ ccRef ( i , 3 , k , 5 , ido ) - cc_offset ] + cc [ ccRef ( i , 4 , k , 5 , ido ) - cc_offset ] ;
166+ tr5 = cc [ ccRef ( i - 1 , 2 , k , 5 , ido ) - cc_offset ] - cc [ ccRef ( i - 1 , 5 , k , 5 , ido ) - cc_offset ] ;
167+ tr2 = cc [ ccRef ( i - 1 , 2 , k , 5 , ido ) - cc_offset ] + cc [ ccRef ( i - 1 , 5 , k , 5 , ido ) - cc_offset ] ;
168+ tr4 = cc [ ccRef ( i - 1 , 3 , k , 5 , ido ) - cc_offset ] - cc [ ccRef ( i - 1 , 4 , k , 5 , ido ) - cc_offset ] ;
169+ tr3 = cc [ ccRef ( i - 1 , 3 , k , 5 , ido ) - cc_offset ] + cc [ ccRef ( i - 1 , 4 , k , 5 , ido ) - cc_offset ] ;
170+ ch [ chRef ( i - 1 , k , 1 , l1 , ido ) - ch_offset ] = cc [ ccRef ( i - 1 , 1 , k , 5 , ido ) - cc_offset ] + tr2 + tr3 ;
171+ ch [ chRef ( i , k , 1 , l1 , ido ) - ch_offset ] = cc [ ccRef ( i , 1 , k , 5 , ido ) - cc_offset ] + ti2 + ti3 ;
172+ cr2 = cc [ ccRef ( i - 1 , 1 , k , 5 , ido ) - cc_offset ] + ( TR11 * tr2 ) + ( TR12 * tr3 ) ;
173+ ci2 = cc [ ccRef ( i , 1 , k , 5 , ido ) - cc_offset ] + ( TR11 * ti2 ) + ( TR12 * ti3 ) ;
174+ cr3 = cc [ ccRef ( i - 1 , 1 , k , 5 , ido ) - cc_offset ] + ( TR12 * tr2 ) + ( TR11 * tr3 ) ;
175+ ci3 = cc [ ccRef ( i , 1 , k , 5 , ido ) - cc_offset ] + ( TR12 * ti2 ) + ( TR11 * ti3 ) ;
176+ cr5 = ( TI11 * tr5 ) + ( TI12 * tr4 ) ;
177+ ci5 = ( TI11 * ti5 ) + ( TI12 * ti4 ) ;
178+ cr4 = ( TI12 * tr5 ) - ( TI11 * tr4 ) ;
179+ ci4 = ( TI12 * ti5 ) - ( TI11 * ti4 ) ;
180+ dr3 = cr3 - ci4 ;
181+ dr4 = cr3 + ci4 ;
182+ di3 = ci3 + cr4 ;
183+ di4 = ci3 - cr4 ;
184+ dr5 = cr2 + ci5 ;
185+ dr2 = cr2 - ci5 ;
186+ di5 = ci2 - cr5 ;
187+ di2 = ci2 + cr5 ;
188+ ch [ chRef ( i - 1 , k , 2 , l1 , ido ) - ch_offset ] = ( wa1 [ i - 2 ] * dr2 ) - ( fsign * wa1 [ i - 1 ] * di2 ) ;
189+ ch [ chRef ( i , k , 2 , l1 , ido ) - ch_offset ] = ( wa1 [ i - 2 ] * di2 ) + ( fsign * wa1 [ i - 1 ] * dr2 ) ;
190+ ch [ chRef ( i - 1 , k , 3 , l1 , ido ) - ch_offset ] = ( wa2 [ i - 2 ] * dr3 ) - ( fsign * wa2 [ i - 1 ] * di3 ) ;
191+ ch [ chRef ( i , k , 3 , l1 , ido ) - ch_offset ] = ( wa2 [ i - 2 ] * di3 ) + ( fsign * wa2 [ i - 1 ] * dr3 ) ;
192+ ch [ chRef ( i - 1 , k , 4 , l1 , ido ) - ch_offset ] = ( wa3 [ i - 2 ] * dr4 ) - ( fsign * wa3 [ i - 1 ] * di4 ) ;
193+ ch [ chRef ( i , k , 4 , l1 , ido ) - ch_offset ] = ( wa3 [ i - 2 ] * di4 ) + ( fsign * wa3 [ i - 1 ] * dr4 ) ;
194+ ch [ chRef ( i - 1 , k , 5 , l1 , ido ) - ch_offset ] = ( wa4 [ i - 2 ] * dr5 ) - ( fsign * wa4 [ i - 1 ] * di5 ) ;
195+ ch [ chRef ( i , k , 5 , l1 , ido ) - ch_offset ] = ( wa4 [ i - 2 ] * di5 ) + ( fsign * wa4 [ i - 1 ] * dr5 ) ;
163196 }
164197 }
165198 }
0 commit comments