我正在研究一种声音转换算法,其中接收到一组带符号的短裤。
在算法的给定点,它将样本从 16 位转换为 14 位,它是这样进行的:
int16_t sample = (old_sample + 2) >> 2;
对我来说,很明显需要进行移位,因为我们想去掉最低 2 位有效位,但是那里的 +2
呢?
最佳答案
向下移动会丢失最低有效两位。如果你只是移动,那么它总是会向下舍入,即使底部的两位都被设置了。如果设置了较大的丢失位,则将 2 舍入相加。
(还值得注意的是,减少位数的更好方法是使用 dithering ,即在减少样本大小之前添加随机(且非常小)的噪声量;这避免了以下问题,因为声音是周期性的,对于特定频率,舍入通常最终会持续上升或持续下降,导致声音出现明显的失真。链接的维基百科文章解释得比我更好!)
关于c - 使用 add + shift 将 pcm16 转换为 pcm14,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3188445/