import get from 'lodash-es/get.js'
import _fft1d from './_fft1d.mjs'
/**
* FFT1D
*
* @param {Array} arr 輸入數據陣列
* @param {Object} [opt={}] 選項物件
* @param {String} [opt.type='dft'] 輸入計算方式字串,'dft'為使用mathjs對任意n點做真實n點DFT(2冪次走Cooley-Tukey、其餘走Chirp-Z),數據品質最佳但非2冪次時較慢;'pow2'為先補零至2冪次(最少4點)再使用ml-fft之radix-2 FFT,速度極快適合前端即時繪圖,但輸出點數為補零後之2冪次,且非2冪次輸入時頻率bin為DTFT插值而非真實n點DFT,預設'dft'
* @return {Array} 回傳轉換後數據陣列
* @example
*
* let arr
* let res
*
* arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
* res = wf.fft1d(arr)
* console.log(res)
* // => [
* // [ 120, 0 ],
* // [ -8, 40.21871593700678 ],
* // [ -8, 19.31370849898476 ],
* // [ -8.000000000000002, 11.972846101323912 ],
* // [ -8, 8 ],
* // [ -7.999999999999999, 5.345429103354391 ],
* // [ -8, 3.3137084989847594 ],
* // [ -8.000000000000002, 1.5912989390372623 ],
* // [ -8, 0 ],
* // [ -8, -1.5912989390372623 ],
* // [ -7.999999999999999, -3.3137084989847594 ],
* // [ -7.999999999999998, -5.345429103354393 ],
* // [ -7.999999999999999, -8 ],
* // [ -7.999999999999999, -11.97284610132391 ],
* // [ -7.999999999999997, -19.31370849898476 ],
* // [ -7.999999999999993, -40.21871593700678 ]
* // ]
*
* arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
* res = wf.fft1d(arr, { type: 'pow2' })
* console.log(res)
* // => [
* // [ 120, 0 ],
* // [ -8, 40.21871593700678 ],
* // [ -8, 19.31370849898476 ],
* // [ -7.999999999999999, 11.972846101323913 ],
* // [ -8, 8 ],
* // [ -8, 5.345429103354391 ],
* // [ -8, 3.313708498984761 ],
* // [ -7.999999999999999, 1.5912989390372623 ],
* // [ -8, 0 ],
* // [ -7.999999999999999, -1.5912989390372623 ],
* // [ -8, -3.313708498984761 ],
* // [ -8, -5.345429103354391 ],
* // [ -8, -8 ],
* // [ -7.999999999999999, -11.972846101323913 ],
* // [ -8, -19.31370849898476 ],
* // [ -8, -40.21871593700678 ]
* // ]
*
* //非2冪次時, type='pow2'會補零至2冪次(3點補至4點), 輸出點數與'dft'不同
* arr = [1, 2, 3]
* res = wf.fft1d(arr, { type: 'pow2' })
* console.log(res)
* // => [ [ 6, 0 ], [ -2, -2 ], [ 2, 0 ], [ -2, 2 ] ]
*
*/
let fft1d = (arr, opt = {}) => {
//type
let type = get(opt, 'type', 'dft')
return _fft1d(arr, 'norm', type)
}
export default fft1d