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

二进制:0000 0101 0101 0100

过程: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:四舍五入量化噪声标准结论,与信号处理教材一致。

相关工具推荐

JSON转TypeScript接口

根据JSON数据自动生成TypeScript类型定义

热门 本地

Spine动画编辑器

专业的Spine动画预览和编辑工具,支持多引擎导出

热门 本地

JVM启动参数配置

可视化配置Java虚拟机启动参数,支持内存、GC、性能等选项

热门 本地

代码片段转换

不同编程语言间代码片段转换(如Python↔JavaScript)

热门 本地

API响应模拟器

根据JSON Schema自动生成模拟API响应数据

热门 本地

SQL查询优化器

分析SQL查询并提供优化建议

热门 本地

这张卡挂在哪些职业工具箱

相关教程