首页 / 工具 / FFT
FFT 与单位根
N 个单位根 ωⁿᵏ 就是一组「标准旋转」。 DFT 把信号投影到这组旋转上——每个频率分量都是一个转动的相量。 手绘或选一段波形,看它被拆回旋转相量的过程,再在频谱上点掉一根柱子试试滤波。
信号
N=64 · radix-2
0.08
24
在「时域」画布上按住拖动即可手绘波形(自动替换当前信号)。
时域 x(n)
- 当前信号(手绘/预设)
- 滤波后重建
旋轮 Σ Xₖ·e^(2πikt)
- 相量链(按能量排序)
- 端点轨迹 = 重建信号
频谱 |Xₖ|/N(点击柱=滤波)
—
读数(悬停频谱)
频率编号 k—
Xₖ / N—
|Xₖ| / N—
arg Xₖ—
能量占比—
k 与 N−k 是一对共轭(实信号的性质),静音其一会同时静音另一,保证重建仍是实数。
计算
FFT 耗时(N 点)—
朴素 DFT 对比—
静音频率数0
往返误差 max|ifft(fft)−x|—
为什么 FFT 快
DFT 是「多项式在 N 个单位根上的取值」。把根按奇偶分半,N 点问题拆成两个 N/2 点问题——O(N²) 变 O(N log N)。N=1024 时约 10 万次运算变 1 万次。
DFT 在算什么
给 N 个采样 x₀…xN−1, Xₖ = Σ xₙ ω−nk(ω = e2πi/N)。 每个 Xₖ 是信号与「转 k 圈/窗口」那根标准旋转的内积—— 转得合拍就大,不合拍就抵消成 0。
- 旋轮:把 Xₖ/N·e2πikt 按能量从大到小首尾相接,端点恰好在信号上——动画里能看到大圆带小圆。
- 频谱:纯音只亮一根柱;方波亮奇数次谐波(1/k 衰减);冲激全亮且等高。
- 滤波:点掉某根柱 = 令 Xₖ=0,逆变换回时域——频域乘法就是时域卷积,这是「滤波」的全部秘密。
预设里藏着什么
- 纯音:3 圈/窗口,频谱一根柱鹤立鸡群。
- 双音:2 + 15 圈,两根柱;把 15 静音,只剩低音。
- 方波:只有奇次谐波,幅度 1/k——吉姆·布莱恩「用圆画方块」。
- 锯齿:全部谐波 1/k 衰减,相位整齐。
- 冲激:δ 函数的频谱是平的——一次采样包含所有频率。
- 循环卷积:a ⊛ b = ifft(fft(a)·fft(b)),把「时域卷一圈」变成「频域逐点乘」。
单位根在这里
ωⁿ 恰好是单位根页里的 N 等分点。DFT 矩阵的每一行都是一圈完整旋转——「单位根」与「频率」是同一件事的几何与信号两种说法。