繁体   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