我正在写一个python程序来代替C程序,它从微控制器接收数据。这是在C语言中使用一个简单的socket和read函数完成的。在我的python程序中,我可以从微控制器读取一系列数据,但我似乎无法将其转换成可读的格式。我捕获了这个字符串并编写了一个小得多的程序,试图将它转换成一个数字列表:import array
import thread
import socket
import time
import math
import numpy as np
import struct
data = open("rawfile.txt", 'r')
conv = open("conv.bin", 'wb')
pack = open("pack.txt", 'w')
# This line reads in the data string from the file
rawdata = data.read()
length = len(rawdata)
unpack = np.zeros(length, dtype=np.int64)
inter = np.int64
size = 4
m=0
for n in range(0,length-size):
inter = struct.unpack_from('h',rawdata,n)
unpack[m] = inter[0]
m=m+1
n=n+4
conv.write(unpack)
for j in range(0,len(unpack)):
#print unpack[j]
stringtowrite = str(unpack[j])
pack.write(stringtowrite)
pack.write(',')
#conv.write(dat2)
print "Done"
这是这个程序产生的数据(在Matlab中绘制),以及数据应该是什么样子的:(更干净的脉冲是它应该看起来的样子)
任何帮助都将不胜感激,我已经为此挣扎了好几个星期了。我可以上传原始数据文件,但我不知道如何做到这一点,因为它相当大。在
总而言之,我的问题是为什么程序为第一个图像而不是第二个图像生成数据,我读取和转换数据的方式是否有明显的错误。在
提前谢谢!在
编辑/更新:
感谢下面的答案,我现在使用这个:
^{pr2}$
数据看起来更好!第一个图像使用dtype('int16'),第二个图像使用dtype('int32')。我还发现我正在读取的数据是由交替的实数/虚数组成的,这是否应该更改我用于numpy数据类型的格式字符串?据我所知,C代码中没有任何步骤可以解释这一点。在
最终更新:
为了避免给其他人造成混淆,上面的第二个图像正确地读取了数据,这是实际数据中的一个问题,导致它们看起来不正确。在