@@ -2,50 +2,65 @@ import fastFourierTransform from '../fastFourierTransform';
22import ComplexNumber from '../../complex-number/ComplexNumber' ;
33
44/**
5- * @param {ComplexNumber[] } [seq1]
6- * @param {ComplexNumber[] } [seq2]
7- * @param {Number } [eps]
5+ * @param {ComplexNumber[] } sequence1
6+ * @param {ComplexNumber[] } sequence2
7+ * @param {Number } delta
88 * @return {boolean }
99 */
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+ }
1219
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+ }
1623 }
1724
1825 return true ;
1926}
2027
28+ const delta = 1e-6 ;
29+
2130describe ( 'fastFourierTransform' , ( ) => {
2231 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 ) ;
3036
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 = [
3243 new ComplexNumber ( { re : 1 , im : 2 } ) ,
3344 new ComplexNumber ( { re : 2 , im : 3 } ) ,
3445 new ComplexNumber ( { re : 8 , im : 4 } ) ,
3546 ] ;
3647
37- const expOut2 = [
48+ const expectedOutput = [
3849 new ComplexNumber ( { re : 11 , im : 9 } ) ,
3950 new ComplexNumber ( { re : - 10 , im : 0 } ) ,
4051 new ComplexNumber ( { re : 7 , im : 3 } ) ,
4152 new ComplexNumber ( { re : - 4 , im : - 4 } ) ,
4253 ] ;
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 ) ;
4754
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 = [
4964 new ComplexNumber ( { re : - 83656.9359385182 , im : 98724.08038374918 } ) ,
5065 new ComplexNumber ( { re : - 47537.415125808424 , im : 88441.58381765135 } ) ,
5166 new ComplexNumber ( { re : - 24849.657029355192 , im : - 72621.79007878687 } ) ,
@@ -58,7 +73,7 @@ describe('fastFourierTransform', () => {
5873 new ComplexNumber ( { re : - 39327.43830818355 , im : 30611.949874562706 } ) ,
5974 ] ;
6075
61- const expOut3 = [
76+ const expectedOutput = [
6277 new ComplexNumber ( { re : - 203215.3322151 , im : - 100242.4827503 } ) ,
6378 new ComplexNumber ( { re : 99217.0805705 , im : 270646.9331932 } ) ,
6479 new ComplexNumber ( { re : - 305990.9040412 , im : 68224.8435751 } ) ,
@@ -77,9 +92,10 @@ describe('fastFourierTransform', () => {
7792 new ComplexNumber ( { re : - 179002.5662573 , im : 239821.0124341 } ) ,
7893 ] ;
7994
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 ) ;
84100 } ) ;
85101} ) ;
0 commit comments