[英]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.