0
A
回答
1
我假定你的意思(in * 0xFFFF)/0xFFFFFF
,在这种情况下,是的。
3
1
0
x * 0xffff/0xffffff
过于迂腐,但不是一个好办法,如果你的样品签署 - 也许不是一般的好办法。
是的,您希望源范围内的最大值与目标范围内的最大值相匹配,但这里使用的值仅适用于无符号范围,并且量化步骤的分布意味着它将非常罕见您使用最大可能的输出值。
样本是否有签名,则峰正值是0x7FFF的和0x7fffff,而峰值负值将-0x8000和-0x800000。你的第一个问题是决定+1是否等于0x7fff,或-1等于-0x8000。如果您选择后者,那么这是一个简单的轮班操作。如果你试图让零点停止为零。
之后,你有一个问题,划分趋向零。这意味着与其他值相比,太多值会舍入到零。这会导致失真。
如果你想根据峰值正值向规模化,正确的形式是:
out = rint((float)in * 0x7fff/0x7fffff);
如果你逛了一下鱼,你也许可以找到一种有效的方式来做到这一点与整数运算和无师。
该表格应该正确地舍入到任何给定输入的最接近的可用输出值,并且它应该将最大可能的输入值映射到最大可能的输出值,但是它将具有遍布整个区域的分散的量化步骤的丑陋分布范围。
大多数人都喜欢:
out = (in + 128) >> 8;
if (out > 0x7fff) out = 0x7fff;
这种形式使事情哪怕一丁点响亮,到如此地步,正值可能略有夹,但量化步幅均匀分布。
您添加128是因为右移向负无穷回合。该平均量化误差为-128和你加128来纠正这种在精确的0保持0溢出测试是必要的,因为0x7fffff的输入值,否则给出为0x8000的结果,当你保存这个在它将围绕16位字提供峰值负值。
Ç学究可以戳约右移和分裂行为的假设洞,但我俯瞰那些清晰。
然而,正如其他人所指出的那样,你一般不应降低音频的比特深度不抖动,理想的噪声整形。 TPDF抖动如下:
out = (in + (rand() & 255) - (rand() & 255)) >> 8;
if (out < -0x8000) out = -0x8000;
if (out > 0x7fff) out = 0x7fff;
此外,随着rand()
这我要忽视为清晰起见,使用大的问题。
相关问题
- 1. 减少图像位深度
- 2. Postgres:减少varchar大小和截断
- 3. 通过此代码更改音频采样率当前更改位深度?
- 4. 截断通过用C
- 5. GPUImage:减少颜色深度
- 6. 减少阵列深入
- 7. jQuery减少Silverlight的采用?
- 8. 减少通过UI网
- 9. 通过缩减采样优化SVG模糊效果
- 10. oracle sql减去截断
- 11. JMeter计数线程采样器,通过采样器,失败的采样器
- 12. HBase:通过Java API截断表使表被截断
- 13. R中rtmvnorm()中的错误答案,而采样截断正常
- 14. 使用Rcpp和openMP从截断正态分布快速采样
- 15. 如何使用截断SVD来减少完全连接(`“InnerProduct”`)层
- 16. 截断整数时,超过64位
- 17. 在转换采样率时减少SoX中的削波
- 18. Android磁力计采样率改善/抖动减少
- 19. 隐藏的div - 通过样式显示减少延迟无+ javascript
- 20. 野牛减少/减少,移位/减少冲突
- 21. 分析器移位/减少减少/减少冲突
- 22. 移位/减少与表达通话
- 23. 通过SOIL保存位图时断开BMP。截图区
- 24. Epsilon过采样
- 25. 缺少CR-TCP采样器
- 26. 减少位深度时保存图像信息的好方法
- 27. 从命令行减少PNG文件的位深度
- 28. 移位/减少Bision
- 29. Twitter API通过添加URL截断Tweet
- 30. 如何通过sudo截断glob文件?
当然,遗憾的错字... – Wizard79 2010-10-26 11:24:29
当然,你可以简单地位上下移动:'OUT =在>> 8'(未签名样本)。 – andrewmu 2010-10-26 11:27:07
为什么只适用于未签名的样本? – Wizard79 2010-10-26 20:15:21