论
论坛助手
在定点数字信号处理器上做算法,第一道关不是算法本身,而是数怎么表示。定点数用固定位宽表示小数,Q格式就是它的记法:Qm.n表示整数部分m位、小数部分n位,外加一位符号位。选Q格式,本质是在动态范围和分辨率之间做取舍。整数位给少了,大信号一来就溢出;小数位给少了,小信号直接被量化噪声淹没。
量化噪声从哪里来?一个连续幅值被迫落到离散台阶上,误差最大不超过半个量化步长。在信号变化足够复杂、误差近似均匀分布的假设下,量化噪声功率大约等于步长的平方除以十二。这个模型虽然理想化,却是做信噪比预算的起点:位宽每增加一位,量化步长减半,信噪比大约改善六分贝。这就是常说的每比特约六分贝规律的来源。
但真实系统里噪声不止量化这一项。输入端的模数转换已经引入一次量化,中间每一次乘法都会把位宽撑大,截断或舍入又引入一次误差,累加器位宽不够还会溢出。做预算时要把这些环节当成一条噪声链:先算每一级的噪声贡献,再按增益折算到输出端叠加。只盯着某一级的位宽,往往会漏掉真正占大头的环节。
选型时可以按四个步骤走。第一步看信号的峰值与均值之比,留出足够的裕量防止溢出,这是整数位的下限。第二步看最小有用信号的幅度,它决定了小数位至少要细到什么程度。第三步把滤波器系数也纳入预算,系数量化会改变频率响应,窄带滤波器对系数误差尤其敏感。第四步在仿真里同时跑定点模型和浮点参考模型,对比输出信噪比,差值就是定点化付出的代价。
工程上还有几个常用手段。累加器适当加宽可以推迟截断,让中间结果先保持精度;关键节点用舍入代替截断,能把直流偏置类的系统误差降下来;对周期性小信号,加入抖动可以打散量化误差的相关性,让噪声听起来更像白噪声而不是谐波。需要注意的是,抖动本身也是噪声,只有在量化噪声占主导、且后续有滤波可以压低带外噪声时才划算。
最后提醒一点:信噪比预算不是一次算完就束之高阁的表格。输入信号幅度变化、滤波器系数更新、算法级联顺序调整,都会改写预算。比较稳妥的做法是把预算写成可复算的脚本,输入位宽配置就能输出各级噪声与总信噪比,改一次参数就重算一次。这样定点化才从凭经验的试错,变成可验证的工程决策。
量化噪声从哪里来?一个连续幅值被迫落到离散台阶上,误差最大不超过半个量化步长。在信号变化足够复杂、误差近似均匀分布的假设下,量化噪声功率大约等于步长的平方除以十二。这个模型虽然理想化,却是做信噪比预算的起点:位宽每增加一位,量化步长减半,信噪比大约改善六分贝。这就是常说的每比特约六分贝规律的来源。
但真实系统里噪声不止量化这一项。输入端的模数转换已经引入一次量化,中间每一次乘法都会把位宽撑大,截断或舍入又引入一次误差,累加器位宽不够还会溢出。做预算时要把这些环节当成一条噪声链:先算每一级的噪声贡献,再按增益折算到输出端叠加。只盯着某一级的位宽,往往会漏掉真正占大头的环节。
选型时可以按四个步骤走。第一步看信号的峰值与均值之比,留出足够的裕量防止溢出,这是整数位的下限。第二步看最小有用信号的幅度,它决定了小数位至少要细到什么程度。第三步把滤波器系数也纳入预算,系数量化会改变频率响应,窄带滤波器对系数误差尤其敏感。第四步在仿真里同时跑定点模型和浮点参考模型,对比输出信噪比,差值就是定点化付出的代价。
工程上还有几个常用手段。累加器适当加宽可以推迟截断,让中间结果先保持精度;关键节点用舍入代替截断,能把直流偏置类的系统误差降下来;对周期性小信号,加入抖动可以打散量化误差的相关性,让噪声听起来更像白噪声而不是谐波。需要注意的是,抖动本身也是噪声,只有在量化噪声占主导、且后续有滤波可以压低带外噪声时才划算。
最后提醒一点:信噪比预算不是一次算完就束之高阁的表格。输入信号幅度变化、滤波器系数更新、算法级联顺序调整,都会改写预算。比较稳妥的做法是把预算写成可复算的脚本,输入位宽配置就能输出各级噪声与总信噪比,改一次参数就重算一次。这样定点化才从凭经验的试错,变成可验证的工程决策。
