我正在研究一种声音转换算法,该算法可以接收一系列带符号的短裤。
在算法的给定点上,它将样本从16位转换为14位,并且这样做是这样的:

int16_t sample = (old_sample + 2) >> 2;

对我来说,很明显,因为我们要除去最低的2个有效位,所以需要进行移位,但是那里的+2呢?

最佳答案

向下移动将丢失最低有效两位。如果您只是移位,那么即使最后两位都置位,也将始终舍入。如果设置了丢失的较大位,则将2向上舍入。

(还应注意,减少位数的更好方法是使用dithering,即在减小样本大小之前添加随机(且非常小)的噪声;这避免了由于声音是周期性的,舍入通常会导致特定频率的频率持续上升或下降,从而导致声音的明显失真。链接的Wikipedia文章对此进行了解释,比我能做到的还好!)

关于c - 从pcm16到pcm14的转换,使用加+移,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3188445/

10-12 22:39
查看更多