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. Postgres:減少varchar大小和截斷
- 2. 截斷通過用C
- 3. 減少陣列深入
- 4. 減少通過UI網
- 5. oracle sql減去截斷
- 6. JMeter計數線程採樣器,通過採樣器,失敗的採樣器
- 7. R中rtmvnorm()中的錯誤答案,而採樣截斷正常
- 8. 如何使用截斷SVD來減少完全連接(`「InnerProduct」`)層
- 9. 隱藏的div - 通過樣式顯示減少延遲無+ javascript
- 10. 移位/減少與表達通話
- 11. 通過SOIL保存位圖時斷開BMP。截圖區
- 12. 從命令行減少PNG文件的位深度
- 13. 減少位深度時保存圖像信息的好方法
- 14. jQuery通過CSS溢出截斷文本
- 15. 如何通過sudo截斷glob文件?
- 16. Twitter API通過添加URL截斷Tweet
- 17. 減少哈希對象的深度
- 18. 減少閃爍通過關閉WS_CLIPCHILDREN
- 19. Halide:通過特定值的域減少
- 20. 使代碼通過減少if語句
- 21. 64位bsr asm截斷高位32位
- 22. 過採樣方法
- 23. 截斷爲32位的Python
- 24. C# - 在位置後截斷
- 25. ImageView和大型GIF縮減採樣
- 26. 錯誤:com.mysql.jdbc.MysqlDataTruncation:數據截斷:截斷不正確DOUBLE值:通過刪除
- 27. 減少位圖大小
- 28. 移位減少衝突
- 29. 移位減少衝突
- 30. 移位/減少衝突yacc
當然,遺憾的錯字... – Wizard79 2010-10-26 11:24:29
當然,你可以簡單地位上下移動:'OUT =在>> 8'(未簽名樣本)。 – andrewmu 2010-10-26 11:27:07
爲什麼只適用於未簽名的樣本? – Wizard79 2010-10-26 20:15:21