使用定点或浮点实现更同步的动态范围?

信息处理 dsp-拼图
2021-12-27 09:03:26

什么数据路径具有更多的同步动态范围:32 位定点或 32 位浮点?为什么?

澄清“同时动态范围”:这是同时辨别强信号和弱信号的能力,而动态范围是最弱信号(仍然满足性能指标的灵敏度)和最强信号(饱和度或性能指标的其他一些下降,例如 1 dB 压缩、削波等)。我们关注同时动态范围的一个例子是在 FFT 中,我们在两个不同的频率上同时具有弱音和强音,我们希望能够在相同的 FFT 结果中辨别两者。

我们的视觉和听觉是同时动态范围和动态范围之间差异的很好例子:见https://en.wikipedia.org/wiki/Dynamic_range

请先输入以下两个字符“>!”,以剧透符号作为答案的开头。

3个回答

对于相同的总位宽,定点表示比浮点​​表示具有更高的瞬时动态范围。

对于同时包含有关强信号和弱信号的信息(其中信息由强信号和弱信号分量之和携带)的值,弱信号的值必须至少与强信号的值一样大数字错误底限,由格式的epsilon给出。在浮点表示中,分配给指数的每一位类似地减少分配给有效数的位数,从而增加格式的 epsilon。这相应地降低了可以包含在单个值中的强信号分量和弱信号分量之间的比率。

例如,在标准的 32 位 IEEE-754 单精度浮点表示中,23 位分配给有效位。结果是可以添加到给定数字的最小数字x是顺序的x/223或大约8.6×106小倍。请注意,这与 C 编程语言的一致,FLT_EPSILON大约是1.19×107. 相比之下,使用 32 位定点表示,可以使用接近满量程(例如 )添加到大数的最小数字大约0xffffff00是单个单位(例如0x000000012324.3×109小倍。

我对动态范围有自己的定义,至少在音频应用中:

以 dB 为单位的动态范围是以 dB 为单位的信噪比与以 dB 为单位的动态余量之和。

现在公平地说,如果我们将固定与浮点进行比较,我们应该使用相同的字宽。

假设浮点数为 8 位指数的 32 位字。那么这取决于您需要的净空高度。如果您需要超过 40 dB 的动态余量,那么 32 位浮点数(具有 8 位指数)将为您提供更好的 S/N。但如果您不需要 40 dB 的动态余量,那么 32 位定点值将为您提供更好的 S/N。

看起来你正在寻找净空。对于最小的归一化浮点数,具有 8 位指数的 32 位浮点数具有大约 1523 dB 的动态余量。再加上 25 位尾数的 150 dB S/N + 余量(计算符号位和“隐藏 1”位)为您提供 1673 dB 的动态范围。

这对您的应用程序来说足够了吗?

这里有一些额外的图形可以添加到发布的正确答案中,希望能够立即清楚地说明这一点。浮点数在指数中添加了一个自动“增益控制”,如下图所示,它可以将其瞬时动态范围能力上下调整到所需的位置。这会占用每个样本中的位,但不会向“瞬时动态范围”添加任何内容:它可以处理极大的数字和极小的数字,但不能同时处理。定点 DSP 系统也可以通过增益缩放和位移来实现这一点,并在需要时使用扩展精度算术;设计者(或编译器)只需要更多的工作来确保没有溢出或下溢条件。最后,这就是为什么定点系统往往成本更低、功耗更低的原因(您不必对每个样本进行这种“自动增益控制”),而浮点系统将使您更快地完成设计. 因此,对于涉及最低成本或功耗的大批量生产的大多数情况,浮点非常适合初始原型设计和概念验证,但定点是产品发布的方式(除非 DSP/FPGA 处理是微不足道的一部分)在成本和功率方面的整个解决方案,或解决某些病态矩阵所需的)。这是我的经验,但如果通常是这样的话,向更大的社区学习会很有趣, 浮点与定点这个示例与 Matlab 中的 FFT 比较单精度和双精度浮点数(浮点一个为 32 位,另一个为 64 位)很好地证明了“瞬时动态范围”的重要性。虽然 32 位浮点的总动态范围为 1520 dB(为了转换为 dB,我使用最大数/最小数的 20 对数),瞬时动态范围仅为 150.5 dB;我们可以看到,在任何给定 bin 中的最大信号与量化引起的本底噪声之间的范围内。使用 32 位浮点,我们可以很容易地看到比强信号低 120 dB 的音调,但我们当然看不到低 1400 dB 的音调!这就是瞬时动态范围的意义。FFT 图 [更新 正如 Robert Bistrow-Johnson 在评论中指出的那样,浮点的精度实际上比我最初在这些图中显示的多 1 位;虽然我之前显示的是 23 位 + 1 个符号位 = 24 位,但实际上我们总共得到了 25 位,因为指数的控制又增加了 1 位。我必须通过使用众所周知的关系 SNR = 6.02dB/bit + 1.76dB 的全量程正弦波来支持基于 SNR 的有效位数来检查自己,并且确实得到了 Robert 所说的(经验教训:永远不要怀疑罗伯特!)这里是 32 位浮点的结果以及一个已知的 12 位量化示例来验证我的方法(在浮点计算中,我使用 64 位浮点数以便能够计算量化噪声)。在此处输入图像描述 在此处输入图像描述]