我从串口连续收到大量数据,我想在每次收到例如100个值时做出一个意思,我的问题是最简单的方法是什么?
这是我的代码:
import serial
ser = serial.Serial('COM23', 19200)
while 1 :
var = ser.readline()
fl = float(var)
print(fl)
KeyboardInterrupt
ser.close()
答案 0 :(得分:0)
关闭原始代码,它可能看起来像这样:
import serial
ser = serial.Serial('COM23', 19200)
meanList = []
counter = 0
total = 0
while 1 :
var = ser.readline()
counter += 1
fl = float(var)
total += fl
print(fl)
if (counter >= 100):
counter = 0
meanList.append(total / 100.0)
total = 0
KeyboardInterrupt
ser.close()
return meanList
这将为您提供一个列表,其中包含每100个程序后程序中的所有方法。您可以更改数字以调整您想要均值的频率。
答案 1 :(得分:0)
更优雅的解决方案是使用仅包含最后N个项目的固定大小队列。在你的情况下,最后100项。
N = 100
values = collections.deque(maxlen=N)
当您需要计算移动平均线时,您可以调用以下函数:
def mean(items, size=N):
return sum(items)/size
将这些想法插入到您的代码中,可以这样做:
import serial
ser = serial.Serial('COM23', 19200)
while 1 :
var = ser.readline()
values.append(var)
# This queue will keep the last 100 items.
# ...
# ...
# when you need to use the mean...
print(mean(values))
# ... the rest of your code
请注意,在队列已满之前,平均值将无法正常使用该功能。如果您需要第一个数据的平均值,则需要稍微修改该函数。