【发布时间】:2017-03-01 21:56:31
【问题描述】:
我有一段代码从 LabJack 和接近传感器接收数据。它在无限循环上运行,记录电压值,直到用户停止它。
但是,我注意到一些奇怪的事情,我的 x 轴时间值列表似乎比我的绘图分辨率显示的数字多得多。即,我的 x 轴时间值似乎仅每 10 毫秒绘制一个点,但我的程序每 3.8 秒收集 5000 个数据点,这应该等于不到每 1 毫秒的数据点。
然后我查看了我的数据,发现了问题。下面是我的 x 轴值列表中的前几十个数字。
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00999999999999801, 0.00999999999999801, 0.00999999999999801, 0.00999999999999801, 0.00999999999999801, 0.00999999999999801, 0.00999999999999801, 0.00999999999999801, 0.00999999999999801, 0.00999999999999801, 0.00999999999999801, 0.020000000000003126, 0.020000000000003126, 0.020000000000003126, 0.020000000000003126, 0.020000000000003126, 0.020000000000003126, 0.020000000000003126, 0.020000000000003126, 0.020000000000003126, 0.020000000000003126, 0.020000000000003126, 0.020000000000003126, 0.020000000000003126, 0.030000000000001137, 0.030000000000001137, 0.030000000000001137, 0.030000000000001137, 0.030000000000001137, 0.030000000000001137, 0.030000000000001137, 0.030000000000001137, 0.030000000000001137, 0.030000000000001137, 0.030000000000001137, 0.030000000000001137, 0.030000000000001137, 0.03999999999999915, 0.03999999999999915, 0.03999999999999915, 0.03999999999999915, 0.03999999999999915, 0.03999999999999915, 0.03999999999999915, 0.03999999999999915, 0.03999999999999915, 0.03999999999999915, 0.03999999999999915, 0.03999999999999915, 0.03999999999999915, 0.04999999999999716, 0.04999999999999716,... etc.
由于某种原因,代码重复每个时间值 10 次或更多次,然后将值增加 10 毫秒并执行相同的操作。下面是记录电压和时间的代码循环。相关行是我定义self.t0、tcurr 和t 的行。
def startData(self):
print "Starting data collection"
self.t0 = float(datetime.now().strftime('%S.%f')[:-3])
while True:
with self.data_lock:
while not self.data_loop:
ain0bits, = self.d.getFeedback(u3.AIN(0))
tcurr = datetime.now()
volts = self.d.binaryToCalibratedAnalogVoltage(ain0bits, isLowVoltage = False, channelNumber = 0)
t = float(tcurr.strftime('%S.%f')[:-3]) - self.t0 #note, approximate - will be just after voltage was read.
self.tdict.append(t)
self.vdict.append(volts)
self.i += 1
感谢任何帮助!
【问题讨论】:
-
您的系统对于
datetime.now()的分辨率实际上是否超过厘秒? -
您是说
tdict中的条目数与vdict相比不同? -
@user2357112 我该如何检查?不是所有的计算机都应该有至少毫秒的分辨率吗?是否有另一个 Python 包可以让我获得那种时间分辨率?我不需要精确的绝对时间,我需要精确的相对时间,就像秒表而不是时钟。
-
@Prophecies 是的,
vdict具有来自 LabJack 数据采集的电压值。这些值看起来不错,它们不会重复或任何东西。 -
@RBuntu:如果您使用的是 Python 3,我会推荐
time.perf_counter()。既然你不是,timeit.default_timer()可能是你最好的时间选择。
标签: python python-2.7 datetime