Skip to content

Commit e9c30a7

Browse files
committed
feat: add passfb5.js
1 parent a2bb8d4 commit e9c30a7

File tree

1 file changed

+81
-48
lines changed
  • lib/node_modules/@stdlib/fft/base/fftpack/lib

1 file changed

+81
-48
lines changed

lib/node_modules/@stdlib/fft/base/fftpack/lib/passfb5.js

Lines changed: 81 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -64,21 +64,29 @@ var chRef = require( '@stdlib/fft/base/fftpack/lib/ch_ref.js' );
6464
var 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
*/
8492
function 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

Comments
 (0)