Q格式定点数转换器
Qm.n 定点数与浮点互转:Q7/Q15/Q31 常用格式、十六进制原码、饱和与截断行为演示
在线 Q 格式定点数转换器:Qm.n 表示用 m 位整数位 + n 位小数位 + 1 位符号位(总位宽 m+n+1)表示实数, 定点整数 = round(x × 2ⁿ)。支持 Q7(8 位)、Q15(16 位)、Q31(32 位)、Q7.8 等常用档与自定义 m.n, 输出补码二进制/十六进制原码,双向可逆;输入超范围时可对照「饱和到边界」与「截断低位(回绕)」两种硬件行为, 并标注量化误差上限。全部计算在浏览器本地完成,不上传。
当前格式 Q7.8(16 位) · 总位宽 16 位 · 表示范围 [−2^7, 2^7−2^−8]
量化步长 2−8 ≈ 0.00390625,误差上限(±½ LSB)≈ 0.001953125
① 浮点 → Q7.8 定点
定点整数(十进制)
1364
十六进制(补码原码)
0x0554
还原浮点 x̂
5.328125
过程:round(5.33 × 28) = 1364 (在范围内,未触发边界)
② 定点整数 → 浮点
补码解释整数值
1365
还原浮点 = int ÷ 28
5.33203125
补码原码
0x0555
饱和 vs 截断低位对照(当前输入 Q7.8(16 位))
同一个超范围输入,两种硬件行为结果完全不同:饱和是 DSP/音频处理期望的行为(削波但不突变),截断低位即整数回绕(大信号会突变成反号大信号,音频里表现为爆音)。
饱和 Saturation
整数:1364
十六进制:0x0554
还原 ≈ 5.328125
截断低位 / 回绕 Wrap
整数:1364
十六进制:0x0554
还原 ≈ 5.328125
定点 vs 浮点:DSP/嵌入式为什么用定点?饱和运算用在哪?(点击展开:原理、公式、FAQ 与来源)
Qm.n 格式与双向换算公式
Qm.n:总位宽 bits = m + n + 1(1 位符号)。表示范围 [−2^m, 2^m − 2^−n];量化步长(LSB)= 2^−n;舍入误差 ≤ 2^−n / 2。
- 浮点 → 定点:定点整数 = round(x × 2ⁿ),再用 m+n+1 位补码写出十六进制原码。
- 定点 → 浮点:先按补码把最高位为 1 的原码折算成负数,再 x = 整数 ÷ 2ⁿ。
- 例:Q7.8 下 0x0555 = 1365 → 1365/256 = 5.33203125;5.33 → round(5.33×256)=1364 → 0x0554;Q15 下 0.999 → round(0.999×32768)=32735 → 0x7FDF;−1.5 超出 Q15 表示域 [−1, 0.99997]:饱和 → −32768 = 0x8000,截断回绕 → −49152 mod 2¹⁶ = 16384 = 0x4000(读回 +0.5,正是回绕的危害)。
定点 vs 浮点:为什么 DSP/嵌入式偏爱定点
定点数就是「放大了 2ⁿ 倍的整数」,加减乘都是整数运算:在没有 FPU(浮点单元)的 MCU(Cortex-M0/M3、经典 DSP 如 TI C55x、大部分 8 位机)上, 浮点要么硬件不支持要么慢几十倍;定点运算周期确定、可预测,这对音频/电机控制等硬实时系统至关重要。 代价是动态范围小(Q15 只有 ±1 内的约定域)、需要手工定标和管理溢出——所以本页提供范围提示与饱和/截断对照。 现代带 FPU 的芯片(Cortex-M4F/M7、桌面 CPU)上浮点已是默认选项,定点更多见于 legacy 代码与超低功耗场景。
饱和运算在音频处理中的应用
音频采样叠加、滤波、增益后常会超出 Q15 满幅(±32767)。饱和运算把结果钳在边界——听起来是「削波(clip)」,失真但能量连续; 若不做饱和而任由整数回绕,+32768 会突变成 −32768(反号极性跳变),听感是刺耳爆音,还可能损坏扬声器。 所以 DSP 的 MAC(乘加)指令普遍带饱和模式(如 ARM SMLAxx、DSP 的 SAT 位),本页对照演示就是模拟这两种行为。
常见问题 (FAQ)
Q15 和 IQ15、Q1.15 是一回事吗?
大体是一回事:都是 16 位、1 符号位 + 15 小数位,约定域 [−1, 0.999969…]。不同厂商记法不同(TI 记 IQ15、有的文献记 Q1.15),注意有的记法把符号位计入 m,核对位宽定义即可——本工具按「总位宽 = m+n+1」口径。
0.999 转成 Q15 为什么不是 32767?
round(0.999 × 32768) = round(32735.23) = 32735(0x7FDF),只有 ≥ 0.99997 才会四舍五入到 32767;32767/32768 ≈ 0.999969 才是 Q15 能表示的最大值。
截断低位和直接取整是一回事吗?
不是。「截断低位」指结果超出位宽时丢掉高位回绕(wrap),与定点化时的「舍入 vs 截尾取整」是两件事;本页演示的是前者(溢出行为)。定点化统一用 round(四舍五入)。
二进制/十六进制底层工具还有吗?
站内还有通用的 二进制进制转换 工具,可做任意位宽的进制互转;本页专注 Q 格式的定标与溢出行为。
口径与来源(两源交叉核对)
- Qm.n 定义(范围 [−2^m, 2^m−2^−n]、总位宽 m+n+1):维基百科 Q (number format) 与 Texas Instruments《TMS320C6000 Integer Division / Qformat 应用笔记》口径一致。
- Q15 满幅 32767 / −32768 与音频饱和:ARM DSP 指令集文档(SMLABB 等饱和 MAC)与音频 DSP 教材通用口径一致。
- 误差 ≤ 2^−n/2:四舍五入量化噪声标准结论,与信号处理教材一致。