ifft1d.mjs

import get from 'lodash-es/get.js'
import _fft1d from './_fft1d.mjs'


/**
 * iFFT1D
 *
 * @param {Array} arr 輸入數據陣列
 * @param {Object} [opt={}] 選項物件
 * @param {String} [opt.type='dft'] 輸入計算方式字串,'dft'為使用mathjs對任意n點做真實n點iDFT(2冪次走Cooley-Tukey、其餘走Chirp-Z),數據品質最佳但非2冪次時較慢;'pow2'為先補零至2冪次(最少4點)再使用ml-fft之radix-2 iFFT,速度極快適合前端即時繪圖,但輸出點數為補零後之2冪次,預設'dft'
 * @return {Array} 回傳轉換後數據陣列
 * @example
 *
 * let arr
 * let res
 *
 * arr = [
 *     [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]
 * ]
 * res = wf.ifft1d(arr)
 * console.log(res)
 * // => [
 * //    0,                      1,
 * //    2.0000000000000004, 3.0000000000000013,
 * //    4,                  5.000000000000002,
 * //    6,                  7.000000000000001,
 * //    8,                  9,
 * //   10,                 10.999999999999998,
 * //   12,                 12.999999999999998,
 * //   14,                 15
 * // ]
 *
 * res = wf.ifft1d(arr, { type: 'pow2' })
 * console.log(res)
 * // => [
 * //    0,                  1,
 * //    2, 3.0000000000000018,
 * //    4,  5.000000000000002,
 * //    6,                  7,
 * //    8,                  9,
 * //   10, 10.999999999999998,
 * //   12, 12.999999999999998,
 * //   14,                 15
 * // ]
 *
 */
let ifft1d = (arr, opt = {}) => {

    //type
    let type = get(opt, 'type', 'dft')

    return _fft1d(arr, 'inv', type)
}


export default ifft1d