雷达 · 通信 · 电子战 / 基础精学 144
滑动DFT利用相邻窗口仅删除一个旧样本并加入一个新样本的结构,以常数次数运算更新每个选定频点。
长度N矩形窗口,Xm[k] 的相位参考为窗口最早样本;固定整数频点k。
Xm[k]:起点m窗口DFT(幅度谱)
W:正指数旋转因子(无量纲)
x[m]:移出样本(幅度)
x[m+N]:移入样本(幅度)
定义
向前平移窗口后令旧索引r加1,得到
补回r=0并删去其贡献,同时利用
得到
旋转方向由窗口相位参考决定,不能直接照搬负指数FFT因子。
若每步新增数值误差为 ϵm,则残差满足
理想单位模旋转不衰减旧误差;
最坏情况下
,长时间运行宜定期直接重算。
精确滑动 DFT 的旋转因子模为一,理论上不引入幅度收缩或增长。若量化后的常数为
无新旧样本差驱动时已有状态满足
即使模长误差很小,长时间递推仍会积累。
令
小误差和有限步数下有
因此周期性用直接窗口求和校正或选用稳定结构,解决的是递推误差积累而非频率分辨率。
四分之一周的换路取反旋转可精确保留模长,但不能据此推断任意频点的定点旋转同样没有径向误差。
矩形窗口滑动对应有限记录的精确更新;速度收益伴随对舍入积累和历史样本缓冲准确性的要求。
N=64、k=7,连续更新数百个窗口,逐窗和直接DFT比较,另外验证k=N/4时的90度旋转特例。
| 量 | 数值 |
|---|---|
| 窗口长度 | 64 |
| bin | 7 |
| 窗口数 | 449 |
| max update error | 1.05195740693e-13 |
| wrong rotation error | 9.33344752361 |
| quarter rotation error | 4.4408920985e-16 |
| final residual | 9.08866738702e-14 |
图 1 滑动DFT的递推更新的理论关系与固定参数验证
表中数值和图中曲线由 MATLAB 实际运行得到,随机种子为 20261063;运行版本与完整结果另存为独立文件。
RTL提供 k=N/4 的整数旋转子核:输入a为上一频点实部加新旧实样本差,b为上一频点虚部,输出-b和a,即乘以 ;
延迟缓冲及加减由外部负责。 RTL 采用同步有效信号和异步低有效复位;空拍保持状态且输出无效。除另有说明外,输入为16位有符号整数,结果为64位有符号整数,测试范围内不截断或饱和。
输出在采样时钟上升沿更新。自检覆盖连续样本、空拍和复位;未进行器件布局布线、时序收敛或功耗验证。
独立自检程序已在 Icarus Verilog 13.0 中实际运行并通过。该结果不包含器件综合、静态时序分析或板级测试。
滑动DFT适用于实时连续窗口频点监测。每次更新只需新旧样本差和一次旋转,可降低高重叠率分析的重复计算。长时间运行应设置周期性直接重算机制,并核查环形缓存中的移出样本确实属于同一窗口。
量化旋转因子模大于1会使误差指数增长。
窗函数不是矩形时,简单两样本更新一般不再成立。
丢样或窗口长度变化需要重建状态。
滑动DFT利用相邻窗口仅删除一个旧样本并加入一个新样本的结构,以常数次数运算更新每个选定频点。
内容依据:每日精学第 144 课《滑动DFT的递推更新》。图表沿用原课固定参数数值结果,属于数值验证,不代表设备实测。