关于 离散傅里叶变换 DFT 以及 快速傅里叶变换 FFT 的算法可以在 算法导论第30章 或者 其他人的博客 里看到。这里不做赘述。
我们来看一种函数式的实现:
依赖
复数类
首先,建立一个复数方法类:
// complex methods
// 构造函数,默认为 0
complex = (x, y) => { return { x: x || 0, y: y || 0 }; };
// 从弧度构造单位复数
complex.fromAngle = (angle) => complex(Math.cos(angle), Math.sin(angle));
// 复数加复数
complex.add = (a, b) => complex(a.x + b.x, a.y + b.y);
// 复数乘复数
complex.mul = (a, b) => complex(a