簡體   English   中英

Python:如何將兩個帶符號的 int16 arrays 加到一個而不會溢出

[英]Python: How to sum two signed int16 arrays into one without overflow

我在字符串中有幾個 int16 流,我希望它們相加(沒有溢出)並將其作為 int16 字符串返回。 背景是將幾個波形文件混合到一個 stream 中。

decodeddata1 = numpy.fromstring(data, numpy.int16)
decodeddata2 = numpy.fromstring(data2, numpy.int16)
newdata = decodeddata1 + decodeddata2
return newdata.tostring()

有沒有辦法用 numpy 做到這一點,還是有另一個圖書館?

處理 python 中的每個單個值太慢並導致卡頓。

最重要的是性能,因為此代碼用於提供音頻的回調方法中。

@編輯:

test input data:
a = np.int16([20000,20000,-20000,-20000])
b = np.int16([10000,20000,-10000,-20000])
print a + b -->   [ 30000 -25536 -30000  25536]

但我想保持最高水平:[30000 40000 -30000 -40000]

將動態范圍為-32768<x<32767的兩個信號混合在一起的明顯結果是范圍為-65537<x<65536的結果信號 - 這需要17位來表示它。

為避免削波,您需要對輸入進行增益縮放 - 顯而易見的方法是將總和(或兩個輸入)除以2

numpy看起來應該相當快 - 至少比 python 的內置可變大小 integer 類型快。 如果附加算術是性能問題,您應該考慮您選擇的語言。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM