雷达 · 通信 · 电子战 / 基础精学 139
基二蝶形的峰值增长可通过保护位或逐级除二控制,整体归一化与每级舍入误差必须分开记账。
N为2的幂,复输入幅度有界,旋转因子为单位模;定点模型使用足够宽中间量后进行明确的除二取整。
As:第s级最大模(幅度)
p:层数(stage)
g:整体缩放(无量纲)
ϵs:第s级舍入误差(幅度)
蝶形 u=a+Wb 满足
所以 As+1≤2As,p级后 Ap≤ NA0。这里用复数模界,不能直接把独立实虚部满量程当作同一个模上界。
每级除以2后 As+1≤ As,总缩放为
输出对应 X[k]/N;若报告原始DFT幅度,必须乘回N。
对缩放蝶形算子 Bs 和舍入误差向量 es,递推为
展开得到

误差发生位置影响最终结果,不能把所有缩放前置后宣称逐位等价。
对每级除二的蝶形,设该级新增误差向量为
精确级算子为 As。累计误差满足
以复数模的最大值作范数,单位模旋转加和后除二给出
因而
此界用于每级完整复数误差,不应把单个实分量的一单位界直接当作复数模界。
若仅有实虚分量分别向下截断,复误差模可达 个输出单位以内;旋转常数量化还需另计。逐级缩放防止增长,但改变了输出标度,六级除二后的结果对应原 DFT 除以六十四。
保护位保留动态范围但增加存储与乘法代价,逐级缩放保持范围却在每层付出精度损失。
使用N=64的整数输入实现逐级舍入DIT,比较缩放后浮点FFT,记录最大各级幅值及误差;另用满幅常值验证未缩放直流增长N倍。
| 量 | 数值 |
|---|---|
| length | 64 |
| 级数 | 6 |
| 总缩放系数 | 0.015625 |
| max fft error | 1.15593469923 |
| 输入峰值 | 16012.7584757 |
| final peak | 2759.02337794 |
| unscaled dc peak | 640000 |
图 1 FFT逐级缩放与位宽增长的理论关系与固定参数验证
表中数值和图中曲线由 MATLAB 实际运行得到,随机种子为 20261058;运行版本与完整结果另存为独立文件。
RTL实现一层实数蝶形的算术右移缩放:输出 与
。输入先加宽,右移向负无穷取整;测试包括奇数和负数。
RTL 采用同步有效信号和异步低有效复位;空拍保持状态且输出无效。除另有说明外,输入为16位有符号整数,结果为64位有符号整数,测试范围内不截断或饱和。
输出在采样时钟上升沿更新。自检覆盖连续样本、空拍和复位;未进行器件布局布线、时序收敛或功耗验证。
独立自检程序已在 Icarus Verilog 13.0 中实际运行并通过。该结果不包含器件综合、静态时序分析或板级测试。
逐级缩放用于有限字长FFT中的范围管理。每级缩放计划可与输入峰值限制、旋转因子精度及后级幅度标定共同设计。测试应包含相干同相叠加形成的高峰值,而不只使用平均功率较低的随机记录。
旋转因子量化也会贡献误差和轻微增益变化。
若按实虚部分量限定范围,需考虑旋转后的分量增长。
后级幅度标定必须包含全部级缩放。
基二蝶形的峰值增长可通过保护位或逐级除二控制,整体归一化与每级舍入误差必须分开记账。
内容依据:每日精学第 139 课《FFT逐级缩放与位宽增长》。图表沿用原课固定参数数值结果,属于数值验证,不代表设备实测。