最大(和最小)16位双值是多少



我正在处理音频数据操作(从/到WAV文件,16位(,用double值(64位(表示样本。

由于我正在处理大量的幅度域卷积,所以很多时候我得到的样本具有(正或负(值;以上";";最大数据";可以用16位表示,结果是它们被截断。

因此,在将数据写入WAV文件之前,我需要规范化数据。

但我不清楚可以在16位上表示的最大(和最小(double值是什么。

注意:这里我将最小值称为可以用16位表示的最大负双数

编辑:对于16-bits double,我指的是从16位WAV文件中读取的数据,该文件存储在我的代码中作为double。在振幅卷积之后,该数据发生变为大于1或小于-1。

最大(和最小(16位双值是多少?

你说的";16位双";。

C++中有一个数字类型double。它是一个浮点类型。C++语言没有定义其最大或最小可表示值(尽管它定义了一个最小范围,实现可能会超过这个范围(,但可以使用std::numeric_limits检查这些限制。

然而,在大多数系统上,double是64位类型,即";双精度";IEEE-754标准中规定的浮点型。


一个16位类型最多可以表示2个16个不同的值。

如果用于表示无符号整数,则范围为[0,216(

如果用于表示有符号整数,则范围将取决于符号的表示方式。在最常见的2的补码表示中,范围将是[-216-1,216-1(

WAV文件

在Microsoft WAVE格式中,16位样本是2的补码有符号整数。有关它们的值范围,请参阅上一段。

简单的答案是,假设有符号PCM,分母(用于标准化16位数据(为2^15。

将所有传入的16位数据除以32767是我的标准化解决方案。也许可以为32768设置一个案例,因为数据范围从-32768到32767。但我一直用32767。

最新更新