我在玩Jack,我注意到默认音频类型JACK_DEFAULT_AUDIO_TYPE
设置为“32 位浮点单声道音频”。
我有点困惑:IEEE 定义了大约从 3.4E–38 到 3.4E+38 的 32 位 C 浮点范围,我想知道jack_default_audio_sample_t
该音频类型可以容纳的最大和最小“不失真”幅度是多少。例如,如果某个 DSP 算法给了我 [0,1] 范围内的样本,我怎样才能正确地在它们和 Jack 的格式之间进行转换?
我在玩Jack,我注意到默认音频类型JACK_DEFAULT_AUDIO_TYPE
设置为“32 位浮点单声道音频”。
我有点困惑:IEEE 定义了大约从 3.4E–38 到 3.4E+38 的 32 位 C 浮点范围,我想知道jack_default_audio_sample_t
该音频类型可以容纳的最大和最小“不失真”幅度是多少。例如,如果某个 DSP 算法给了我 [0,1] 范围内的样本,我怎样才能正确地在它们和 Jack 的格式之间进行转换?
在浮点中进行信号处理操作是很常见的,然后将结果缩放并转换为 16 位或 24 位整数,然后再将它们发送到 ADC。例如,在浮点中实现 IIR 滤波器意味着您可以降低对系数量化的敏感度。或者,如果您正在执行 FFT,则可以通过浮点计算获得更大的动态范围。
对于 16 位编解码器,通常的转换方式是x_float = x_int * (1.0/SHRT_MAX)
在数据来自 ADC 时进行,然后在发送到 DAC 时进行。y_int = y_float * SHRT_MAX
对于 24 位编解码器,您需要定义ADC_MAX = (1 << 24) - 1
.
在使用 JACK 的情况下,我猜框架会为您处理这种转换,因此您应该看到 +/-1 范围内的浮点值,并将其反馈回相同范围内的值。