WFft.mjs

import fft1d from './fft1d.mjs'
import ifft1d from './ifft1d.mjs'
import fft2d from './fft2d.mjs'
import ifft2d from './ifft2d.mjs'
import spectrum1d from './spectrum1d.mjs'
import spectrum2d from './spectrum2d.mjs'
import filter1d from './filter1d.mjs'
import filter2d from './filter2d.mjs'


/**
 * FFT與iFFT
 *
 * 各函數皆可傳入opt.type指定計算方式:
 * '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。
 *
 * @returns {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 = [
 *     [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
 * // ]
 *
 */
let WFft = {

    fft1d,
    ifft1d,

    fft2d,
    ifft2d,

    spectrum1d,
    spectrum2d,

    filter1d,
    filter2d,

}


export default WFft