1
- import ComplexNumber from '../complex' ;
2
1
import fastFourierTransform from '../fastFourierTransform' ;
2
+ import ComplexNumber from '../../complex-number/ComplexNumber' ;
3
+
3
4
/**
4
5
* @param {ComplexNumber[] } [seq1]
5
6
* @param {ComplexNumber[] } [seq2]
@@ -20,48 +21,62 @@ function approximatelyEqual(seq1, seq2, eps) {
20
21
describe ( 'fastFourierTransform' , ( ) => {
21
22
it ( 'should calculate the radix-2 discrete fourier transform after zero padding' , ( ) => {
22
23
const eps = 1e-6 ;
23
- const in1 = [ new ComplexNumber ( 0 , 0 ) ] ;
24
- const expOut1 = [ new ComplexNumber ( 0 , 0 ) ] ;
24
+ const in1 = [ new ComplexNumber ( { real : 0 , imaginary : 0 } ) ] ;
25
+ const expOut1 = [ new ComplexNumber ( { real : 0 , imaginary : 0 } ) ] ;
25
26
const out1 = fastFourierTransform ( in1 ) ;
26
27
const invOut1 = fastFourierTransform ( out1 , true ) ;
27
28
expect ( approximatelyEqual ( expOut1 , out1 , eps ) ) . toBe ( true ) ;
28
29
expect ( approximatelyEqual ( in1 , invOut1 , eps ) ) . toBe ( true ) ;
29
30
30
- const in2 = [ new ComplexNumber ( 1 , 2 ) , new ComplexNumber ( 2 , 3 ) ,
31
- new ComplexNumber ( 8 , 4 ) ] ;
32
- const expOut2 = [ new ComplexNumber ( 11 , 9 ) , new ComplexNumber ( - 10 , 0 ) ,
33
- new ComplexNumber ( 7 , 3 ) , new ComplexNumber ( - 4 , - 4 ) ] ;
31
+ const in2 = [
32
+ new ComplexNumber ( { real : 1 , imaginary : 2 } ) ,
33
+ new ComplexNumber ( { real : 2 , imaginary : 3 } ) ,
34
+ new ComplexNumber ( { real : 8 , imaginary : 4 } ) ,
35
+ ] ;
36
+
37
+ const expOut2 = [
38
+ new ComplexNumber ( { real : 11 , imaginary : 9 } ) ,
39
+ new ComplexNumber ( { real : - 10 , imaginary : 0 } ) ,
40
+ new ComplexNumber ( { real : 7 , imaginary : 3 } ) ,
41
+ new ComplexNumber ( { real : - 4 , imaginary : - 4 } ) ,
42
+ ] ;
34
43
const out2 = fastFourierTransform ( in2 ) ;
35
44
const invOut2 = fastFourierTransform ( out2 , true ) ;
36
45
expect ( approximatelyEqual ( expOut2 , out2 , eps ) ) . toBe ( true ) ;
37
46
expect ( approximatelyEqual ( in2 , invOut2 , eps ) ) . toBe ( true ) ;
38
47
39
- const in3 = [ new ComplexNumber ( - 83656.9359385182 , 98724.08038374918 ) ,
40
- new ComplexNumber ( - 47537.415125808424 , 88441.58381765135 ) ,
41
- new ComplexNumber ( - 24849.657029355192 , - 72621.79007878687 ) ,
42
- new ComplexNumber ( 31451.27290052717 , - 21113.301128347346 ) ,
43
- new ComplexNumber ( 13973.90836288876 , - 73378.36721594246 ) ,
44
- new ComplexNumber ( 14981.520420492234 , 63279.524958963884 ) ,
45
- new ComplexNumber ( - 9892.575367044381 , - 81748.44671677813 ) ,
46
- new ComplexNumber ( - 35933.00356823792 , - 46153.47157161784 ) ,
47
- new ComplexNumber ( - 22425.008561855735 , - 86284.24507370662 ) ,
48
- new ComplexNumber ( - 39327.43830818355 , 30611.949874562706 ) ] ;
49
- const expOut3 = [ new ComplexNumber ( - 203215.3322151 , - 100242.4827503 ) ,
50
- new ComplexNumber ( 99217.0805705 , 270646.9331932 ) ,
51
- new ComplexNumber ( - 305990.9040412 , 68224.8435751 ) ,
52
- new ComplexNumber ( - 14135.7758282 , 199223.9878095 ) ,
53
- new ComplexNumber ( - 306965.6350922 , 26030.1025439 ) ,
54
- new ComplexNumber ( - 76477.6755206 , 40781.9078990 ) ,
55
- new ComplexNumber ( - 48409.3099088 , 54674.7959662 ) ,
56
- new ComplexNumber ( - 329683.0131713 , 164287.7995937 ) ,
57
- new ComplexNumber ( - 50485.2048527 , - 330375.0546527 ) ,
58
- new ComplexNumber ( 122235.7738708 , 91091.6398019 ) ,
59
- new ComplexNumber ( 47625.8850387 , 73497.3981523 ) ,
60
- new ComplexNumber ( - 15619.8231136 , 80804.8685410 ) ,
61
- new ComplexNumber ( 192234.0276101 , 160833.3072355 ) ,
62
- new ComplexNumber ( - 96389.4195635 , 393408.4543872 ) ,
63
- new ComplexNumber ( - 173449.0825417 , 146875.7724104 ) ,
64
- new ComplexNumber ( - 179002.5662573 , 239821.0124341 ) ] ;
48
+ const in3 = [
49
+ new ComplexNumber ( { real : - 83656.9359385182 , imaginary : 98724.08038374918 } ) ,
50
+ new ComplexNumber ( { real : - 47537.415125808424 , imaginary : 88441.58381765135 } ) ,
51
+ new ComplexNumber ( { real : - 24849.657029355192 , imaginary : - 72621.79007878687 } ) ,
52
+ new ComplexNumber ( { real : 31451.27290052717 , imaginary : - 21113.301128347346 } ) ,
53
+ new ComplexNumber ( { real : 13973.90836288876 , imaginary : - 73378.36721594246 } ) ,
54
+ new ComplexNumber ( { real : 14981.520420492234 , imaginary : 63279.524958963884 } ) ,
55
+ new ComplexNumber ( { real : - 9892.575367044381 , imaginary : - 81748.44671677813 } ) ,
56
+ new ComplexNumber ( { real : - 35933.00356823792 , imaginary : - 46153.47157161784 } ) ,
57
+ new ComplexNumber ( { real : - 22425.008561855735 , imaginary : - 86284.24507370662 } ) ,
58
+ new ComplexNumber ( { real : - 39327.43830818355 , imaginary : 30611.949874562706 } ) ,
59
+ ] ;
60
+
61
+ const expOut3 = [
62
+ new ComplexNumber ( { real : - 203215.3322151 , imaginary : - 100242.4827503 } ) ,
63
+ new ComplexNumber ( { real : 99217.0805705 , imaginary : 270646.9331932 } ) ,
64
+ new ComplexNumber ( { real : - 305990.9040412 , imaginary : 68224.8435751 } ) ,
65
+ new ComplexNumber ( { real : - 14135.7758282 , imaginary : 199223.9878095 } ) ,
66
+ new ComplexNumber ( { real : - 306965.6350922 , imaginary : 26030.1025439 } ) ,
67
+ new ComplexNumber ( { real : - 76477.6755206 , imaginary : 40781.9078990 } ) ,
68
+ new ComplexNumber ( { real : - 48409.3099088 , imaginary : 54674.7959662 } ) ,
69
+ new ComplexNumber ( { real : - 329683.0131713 , imaginary : 164287.7995937 } ) ,
70
+ new ComplexNumber ( { real : - 50485.2048527 , imaginary : - 330375.0546527 } ) ,
71
+ new ComplexNumber ( { real : 122235.7738708 , imaginary : 91091.6398019 } ) ,
72
+ new ComplexNumber ( { real : 47625.8850387 , imaginary : 73497.3981523 } ) ,
73
+ new ComplexNumber ( { real : - 15619.8231136 , imaginary : 80804.8685410 } ) ,
74
+ new ComplexNumber ( { real : 192234.0276101 , imaginary : 160833.3072355 } ) ,
75
+ new ComplexNumber ( { real : - 96389.4195635 , imaginary : 393408.4543872 } ) ,
76
+ new ComplexNumber ( { real : - 173449.0825417 , imaginary : 146875.7724104 } ) ,
77
+ new ComplexNumber ( { real : - 179002.5662573 , imaginary : 239821.0124341 } ) ,
78
+ ] ;
79
+
65
80
const out3 = fastFourierTransform ( in3 ) ;
66
81
const invOut3 = fastFourierTransform ( out3 , true ) ;
67
82
expect ( approximatelyEqual ( expOut3 , out3 , eps ) ) . toBe ( true ) ;
0 commit comments