把浮点 FIR 滤波器搬到定点 DSP 上,输出总会多出一份“底噪”。这份噪声不是玄学,它主要来自三个地方:系数和量化、输入量化、以及运算过程中的舍入与溢出。搞清各自的量级和传播路径,压噪声才有章法,而不是靠把位宽一味加宽。

第一处是系数和量化。理想系数是无限精度的实数,落到 Q 格式后每个系数都有一个量化误差。误差虽小,却会直接改变滤波器的频率响应:通带纹波变大、阻带衰减变差。系数位宽每增加 1 位,量化误差大约减小一半。工程上常用的做法是先在浮点下算出系数,再按目标位宽量化并重新仿真频响,看阻带指标是否还达标,而不是先定格式再碰运气。

第二处是输入量化。ADC 采进来的信号本身就是量化过的,量化噪声功率约为 LSB 平方的十二分之一。对 FIR 来说,输入噪声会按滤波器的能量增益被放大或衰减:通带增益大的频段,输入噪声也会跟着放大。因此输入位宽不够时,换再好的系数也救不回信噪比。选型时要把 ADC 有效位数和滤波器增益一起算进信噪比预算。

第三处最容易被低估:运算中的舍入与溢出。一次乘加的乘积位宽是两个操作数位宽之和,如果每步都截断回原位宽,舍入噪声会逐级累积。正确的做法是保留足够宽的累加器,只在最后输出时做一次舍入,并配合饱和处理防止溢出翻转。饱和与绕回只差一个判断,溢出时绕回会让输出跳变,远比饱和的失真更难查。

压制办法可以归纳为四条:系数和输入按信噪比预算分配位宽;累加器留足余量、输出端只舍入一次;溢出用饱和不用绕回;最后一定要做定点仿真,把量化后的频响和信噪比与浮点基准逐项对比。定点化的功夫不在公式,而在预算:每一位的去留,都要有数据支撑。