【发布时间】:2016-05-23 22:51:26
【问题描述】:
所以我有一个系统以设定的时间间隔(大约每 30 秒)从我的功率计读取电流。
然后我想在一个多小时内获取这些读数并计算使用的千瓦数。
我在 stakoverflow 上看到了 2x 方法,想知道哪种方法最好。
方法 1 从这里开始: https://electronics.stackexchange.com/a/225641
方法 2 从这里开始: https://stackoverflow.com/a/16331700/5151115
这是我的测试代码(这是在将电流转换为功率之后) 我正在模拟加热器和每 30 秒和 29 秒的读数。 读数只是 1350w -> 1400w -> 1350w。
# build sample data
time = 0
samples = [[0, 1350]]
for i in range(0, 61):
samples.append([time+30, 1400])
samples.append([time+59, 1350])
time += 59
n_samples = len(samples)
# METHOD 1
total_ws = 0.0
for i in range(1, n_samples):
dt = samples[i][0] - samples[i-1][0]
average = (samples[i][1] + samples[i-1][1]) / 2
total_ws += average * dt
print("Total w/s: %0.2f" % total_ws)
print("Total w/h: %0.2f" % (total_ws/samples[-1][0]))
# METHOD 2
total_ws = 0.0
for i in range(0, n_samples - 1):
total_ws += (samples[i][1] + samples[i + 1][1]) / 2;
total_ws *= (samples[-1][0] - samples[0][0]) / n_samples;
print("Total w/s: %0.2f" % total_ws)
print("Total w/h: %0.2f" % (total_ws/samples[-1][0]))
方法一 总 w/s: 4948625.00 总 w/h:1375.00 = 1.375 Kw/h
方法二: 总 w/s:4908392.28 总 w/h:1363.82 = 1.363 Kw/h
哪种方法更准确/最好?
第一种方法对我来说似乎更好,因为它给了我 1375。 这是 2 倍不同读数(1350 和 1400)的平均值。
【问题讨论】:
-
python 在浮点数和浮点除法方面出了名的糟糕,看看 pandas 和 numpy 以获得更好的数字支持
-
只是想。对于每 30 秒一次的采样率,在我看来,您已经失去了足够多的可变性,以至于您使用哪种方法都无关紧要。
-
谢谢。我更关心上述 2x 中的最佳方法。对我来说,第一种方法似乎更好,因为它给出了 1375,这是我在测试数据(1350 和 1400)中使用的 2 倍读数的平均值。我也可能会增加阅读间隔。我使用的是电池供电的 ESP8266,所以它可以休眠的时间越长 - 电池持续时间越长。
标签: python