package Ġinfo . ben jamin h ill . fm . ch op per Ċ Ċ import Ġjava . util .* Ċ import Ġjava . util . stream . Stream Ċ import Ġkotlin . math . cos Ċ import Ġkotlin . math . log Ċ import Ġkotlin . math . sqrt ĊĊ Ċ /** Ċ Ġ* ĠCompute Ġpower Ġof Ġtwo Ġgreater Ġthan Ġor Ġequal Ġto Ġthe Ġinput Ċ Ġ*/ Ċ fun Ġfind Next Power Of 2 ( input : ĠInt ): ĠInt Ġ{ ĊĠĠĠ Ġvar Ġn Ġ= Ġinput ĊĠĠĠ Ġ// Ġdecrement Ġ` n ` Ġ( to Ġhandle Ġthe Ġcase Ġwhen Ġ` n ` Ġitself Ġis Ġa Ġpower Ġof Ġ 2 ) ĊĠĠĠ Ġn Ġ-= Ġ 1 ĊĠĠĠ Ġ// Ġcalculate Ġthe Ġposition Ġof Ġthe Ġlast Ġset Ġbit Ġof Ġ` n ` ĊĠĠĠ Ġval Ġlg Ġ= Ġlog ( n . toDouble (), Ġ 2 . 0 ). toInt () ĊĠĠĠ Ġ// Ġnext Ġpower Ġof Ġtwo Ġwill Ġhave Ġa Ġbit Ġset Ġat Ġposition Ġ` lg + 1 `. ĊĠĠĠ Ġreturn Ġ 1 Ġshl Ġlg Ġ+ Ġ 1 Ċ } Ċ Ċ /** Ċ Ġ* ĠS qu ashes Ġthe Ġarray Ġinto Ġ 0 . 0 Ġ.. Ġ 1 . 0 Ċ Ġ*/ Ċ fun ĠDouble Array . to Unit Range (): ĠDouble Array Ġ{ ĊĠĠĠ Ġif Ġ( this . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdouble ArrayOf () ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġmin Ġ= Ġthis . min OrNull () !! ĊĠĠĠ Ġval Ġmax Ġ= Ġthis . max OrNull () !! ĊĠĠĠ Ġval Ġdelta Ġ= Ġmax Ġ- Ġmin ĊĠĠĠ Ġreturn Ġif Ġ( delta Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ ĠDouble Array ( this . size ) Ġ{ Ġidx Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( this [ idx ] Ġ- Ġmin ) Ġ/ Ġdelta ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠDouble Array ( this . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 5 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ // Ġfast - ish Ċ fun ĠDouble Array . dist ( other Array : ĠDouble Array ): ĠDouble Ġ{ ĊĠĠĠ Ġrequire ( this . isNotEmpty ()) ĊĠĠĠ Ġrequire ( this . size Ġ== Ġother Array . size ) ĊĊĠĠĠ Ġreturn Ġsqrt ( ĊĠĠĠĠĠĠĠ Ġthis . as Sequence (). zip ( other Array . as Sequence ()) Ġ{ Ġa , Ġb Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( a Ġ- Ġb ) Ġ* Ġ( a Ġ- Ġb ) ĊĠĠĠĠĠĠĠ Ġ}. sum () ĊĠĠĠ Ġ) Ċ } Ċ Ċ fun ĠStream < Double >. to Stats (): ĠDouble Summary Statistics Ġ= ĊĠĠĠ Ġthis . collect ( ĊĠĠĠĠĠĠĠ Ġ:: Double Summary Statistics , ĊĠĠĠĠĠĠĠ Ġ{ Ġobj : ĠDouble Summary Statistics , Ġvalue : ĠDouble Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj . accept ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ{ Ġobj : ĠDouble Summary Statistics , Ġother : ĠDouble Summary Statistics Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj . combine ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġother ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}) Ċ Ċ private Ġval Ġh ann Cache : ĠMutable Map < Int , ĠDouble Array > Ġ= Ġmutable Map Of () Ċ Ċ /** Ċ Ġ* ĠH anning Ġwindow Ġof Ġsize ĠN Ċ Ġ* Ġ@ see Ġ[ MAT LAB Ġreference ]( https :// www . math works . com / help / signal / ref / h ann . html ) Ċ Ġ* Ġhttps :// github . com / m ile sh en rich s / Qu i FFT / blob / 4 f 2 cbe 7 9 7 b 8 dc 7 f 8 0 9 4 ca aa 4 1 f 4 5 5 1 0 1 5 c 9 0 4 9 5 b / src / main / java / org / qu if ft / params / Window Function Generator . java # L 7 7 Ċ Ġ*/ Ċ internal Ġfun Ġh ann ( size : ĠInt ): ĠDouble Array Ġ= Ġh ann Cache . compute If Absent ( size ) Ġ{ ĊĠĠĠ ĠDouble Array ( size ) Ġ{ Ġn Ġ-> ĊĠĠĠĠĠĠĠĠ 0 . 5 Ġ* Ġ( 1 Ġ- Ġcos ( 2 Ġ* ĠMath . PI Ġ* Ġ( n Ġ/ Ġ( size Ġ- Ġ 1 . 0 )))) ĊĠĠĠ Ġ} Ċ } Ċ