@@ -2,50 +2,65 @@ import fastFourierTransform from '../fastFourierTransform';
2
2
import ComplexNumber from '../../complex-number/ComplexNumber' ;
3
3
4
4
/**
5
- * @param {ComplexNumber[] } [seq1]
6
- * @param {ComplexNumber[] } [seq2]
7
- * @param {Number } [eps]
5
+ * @param {ComplexNumber[] } sequence1
6
+ * @param {ComplexNumber[] } sequence2
7
+ * @param {Number } delta
8
8
* @return {boolean }
9
9
*/
10
- function approximatelyEqual ( seq1 , seq2 , eps ) {
11
- if ( seq1 . length !== seq2 . length ) { return false ; }
10
+ function sequencesApproximatelyEqual ( sequence1 , sequence2 , delta ) {
11
+ if ( sequence1 . length !== sequence2 . length ) {
12
+ return false ;
13
+ }
14
+
15
+ for ( let numberIndex = 0 ; numberIndex < sequence1 . length ; numberIndex += 1 ) {
16
+ if ( Math . abs ( sequence1 [ numberIndex ] . re - sequence2 [ numberIndex ] . re ) > delta ) {
17
+ return false ;
18
+ }
12
19
13
- for ( let i = 0 ; i < seq1 . length ; i += 1 ) {
14
- if ( Math . abs ( seq1 [ i ] . real - seq2 [ i ] . real ) > eps ) { return false ; }
15
- if ( Math . abs ( seq1 [ i ] . complex - seq2 [ i ] . complex ) > eps ) { return false ; }
20
+ if ( Math . abs ( sequence1 [ numberIndex ] . im - sequence2 [ numberIndex ] . im ) > delta ) {
21
+ return false ;
22
+ }
16
23
}
17
24
18
25
return true ;
19
26
}
20
27
28
+ const delta = 1e-6 ;
29
+
21
30
describe ( 'fastFourierTransform' , ( ) => {
22
31
it ( 'should calculate the radix-2 discrete fourier transform after zero padding' , ( ) => {
23
- const eps = 1e-6 ;
24
- const in1 = [ new ComplexNumber ( { re : 0 , im : 0 } ) ] ;
25
- const expOut1 = [ new ComplexNumber ( { re : 0 , im : 0 } ) ] ;
26
- const out1 = fastFourierTransform ( in1 ) ;
27
- const invOut1 = fastFourierTransform ( out1 , true ) ;
28
- expect ( approximatelyEqual ( expOut1 , out1 , eps ) ) . toBe ( true ) ;
29
- expect ( approximatelyEqual ( in1 , invOut1 , eps ) ) . toBe ( true ) ;
32
+ const input = [ new ComplexNumber ( { re : 0 , im : 0 } ) ] ;
33
+ const expectedOutput = [ new ComplexNumber ( { re : 0 , im : 0 } ) ] ;
34
+ const output = fastFourierTransform ( input ) ;
35
+ const invertedOutput = fastFourierTransform ( output , true ) ;
30
36
31
- const in2 = [
37
+ expect ( sequencesApproximatelyEqual ( expectedOutput , output , delta ) ) . toBe ( true ) ;
38
+ expect ( sequencesApproximatelyEqual ( input , invertedOutput , delta ) ) . toBe ( true ) ;
39
+ } ) ;
40
+
41
+ it ( 'should calculate the radix-2 discrete fourier transform after zero padding' , ( ) => {
42
+ const input = [
32
43
new ComplexNumber ( { re : 1 , im : 2 } ) ,
33
44
new ComplexNumber ( { re : 2 , im : 3 } ) ,
34
45
new ComplexNumber ( { re : 8 , im : 4 } ) ,
35
46
] ;
36
47
37
- const expOut2 = [
48
+ const expectedOutput = [
38
49
new ComplexNumber ( { re : 11 , im : 9 } ) ,
39
50
new ComplexNumber ( { re : - 10 , im : 0 } ) ,
40
51
new ComplexNumber ( { re : 7 , im : 3 } ) ,
41
52
new ComplexNumber ( { re : - 4 , im : - 4 } ) ,
42
53
] ;
43
- const out2 = fastFourierTransform ( in2 ) ;
44
- const invOut2 = fastFourierTransform ( out2 , true ) ;
45
- expect ( approximatelyEqual ( expOut2 , out2 , eps ) ) . toBe ( true ) ;
46
- expect ( approximatelyEqual ( in2 , invOut2 , eps ) ) . toBe ( true ) ;
47
54
48
- const in3 = [
55
+ const output = fastFourierTransform ( input ) ;
56
+ const invertedOut = fastFourierTransform ( output , true ) ;
57
+
58
+ expect ( sequencesApproximatelyEqual ( expectedOutput , output , delta ) ) . toBe ( true ) ;
59
+ expect ( sequencesApproximatelyEqual ( input , invertedOut , delta ) ) . toBe ( true ) ;
60
+ } ) ;
61
+
62
+ it ( 'should calculate the radix-2 discrete fourier transform after zero padding' , ( ) => {
63
+ const input = [
49
64
new ComplexNumber ( { re : - 83656.9359385182 , im : 98724.08038374918 } ) ,
50
65
new ComplexNumber ( { re : - 47537.415125808424 , im : 88441.58381765135 } ) ,
51
66
new ComplexNumber ( { re : - 24849.657029355192 , im : - 72621.79007878687 } ) ,
@@ -58,7 +73,7 @@ describe('fastFourierTransform', () => {
58
73
new ComplexNumber ( { re : - 39327.43830818355 , im : 30611.949874562706 } ) ,
59
74
] ;
60
75
61
- const expOut3 = [
76
+ const expectedOutput = [
62
77
new ComplexNumber ( { re : - 203215.3322151 , im : - 100242.4827503 } ) ,
63
78
new ComplexNumber ( { re : 99217.0805705 , im : 270646.9331932 } ) ,
64
79
new ComplexNumber ( { re : - 305990.9040412 , im : 68224.8435751 } ) ,
@@ -77,9 +92,10 @@ describe('fastFourierTransform', () => {
77
92
new ComplexNumber ( { re : - 179002.5662573 , im : 239821.0124341 } ) ,
78
93
] ;
79
94
80
- const out3 = fastFourierTransform ( in3 ) ;
81
- const invOut3 = fastFourierTransform ( out3 , true ) ;
82
- expect ( approximatelyEqual ( expOut3 , out3 , eps ) ) . toBe ( true ) ;
83
- expect ( approximatelyEqual ( in3 , invOut3 , eps ) ) . toBe ( true ) ;
95
+ const output = fastFourierTransform ( input ) ;
96
+ const invertedOutput = fastFourierTransform ( output , true ) ;
97
+
98
+ expect ( sequencesApproximatelyEqual ( expectedOutput , output , delta ) ) . toBe ( true ) ;
99
+ expect ( sequencesApproximatelyEqual ( input , invertedOutput , delta ) ) . toBe ( true ) ;
84
100
} ) ;
85
101
} ) ;
0 commit comments