2017-03-02 192 views
0

该数组是一个波形。我可以很容易地将二进制数组转换为int8,每个字节为1个采样。当使用12bit时,我可以设置仪器为每个采样发送2字节(字模式)。我一直在网上寻找转换2bytes /样本二进制数组为int16载体,但迄今尚未能够。 这个作品,每个样品将二进制数组转换为int16

data = numpy.fromstring(dataword, dtype=numpy.int8) 

相同的1个字节使用解压

data = numpy.array(unpack('%sb' %len(dataword) ,dataword)) 

无法弄清楚如何使它与2字节/采样工作。 感谢

+0

'dataword'从哪里来?你是如何创造它的? – heltonbiker

+2

你不只是试着改变'8'到'16'吗? 'np.fromstring(dataword,dtype = np.int16)'适用于我 – Eric

+0

另外,你不应该用'h'(signed short)和'struct.unpack'吗? – heltonbiker

回答

0

而不是使用struct.unpack这样的:

data = numpy.array(unpack('%sb' %len(dataword) ,dataword)) 

你应该使用这样的:

data = numpy.array(unpack('%sh' % len(dataword)/struct.calcsize('h'), dataword)) 
#----------------------------^ notice the 'h', signed short, 16 bits 

您必须由您正在阅读的数字大小划分len(dataword),在这种情况下,两个字节。为此,最好使用calcsize,但如果您已经知道,只需将其除以二即可。

+0

是的,它只是在工作,只需要括号以避免语法错误:data = numpy.array(unpack('%sh'%(len(dataword)/ 2) ,dataword))谢谢,这是行之有效的 –

+0

不错!如果这个答案解决了这个问题,你可以接受答案! :D:D:D我很高兴得到了帮助! – heltonbiker

相关问题