因此,我有一个系统读取电流从我的电能表在设定的间隔(大约每30秒)。
然后,我想把这些读数超过一个小时,并计算使用的kws。
我已经在stakoverflow上看到了2x方法,并且想知道哪一个是最好的。
这里的方法1:https://electronics.stackexchange.com/a/225641
这里的方法2:https://stackoverflow.com/a/16331700/5151115
这是我的测试代码(这是在将电流转换为电源之后),我正在模拟一个加热器和每30秒-29秒的读数。读数仅为1350 W -> 1400 W -> 1350 W。
# 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]))方法1总w/s: 4948625.00总w/h: 1375.00 = 1.375 Kw/h
方法2:总w/s: 4908392.28总w/h: 1363.82 = 1.363 Kw/h
哪种方法更准确/最好?
第一种方法对我来说似乎更好,因为它给了我1375。这是2倍不同读数的平均值(1350 & 1400)。
发布于 2016-05-24 08:14:45
第二种方法只能在测量之间的dt是常数的情况下使用,我不喜欢它,因为它是一个错误的来源。对于不同的dt和精度,第一种方法要好得多,但我更喜欢另一种方法。看这张图

M1站在第一条路。
“我的”方法是平等的。
# build sample data
time = 0
samples = [[0, 1350]]
for i in range(0, 200):
samples.append([time+30, 1400])
samples.append([time+60, 1350])
time += 60
n_samples = len(samples)
# METHOD 1
total_ws = 0.0
total_t=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
total_t+=dt
print("Total ws: %0.2f" % total_ws)
print("Total w: %0.2f" % (total_ws/total_t))
# 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 ws: %0.2f" % total_ws)
print("Total w: %0.2f" % (total_ws/samples[-1][0]))
# "My" METHOD
total_ws = 0.0
total_t=0
for index in range(len(samples)):
if index==0:dt=samples[index+1][0]/2.
elif index==len(samples)-1:dt=(samples[index][0]-samples[index-1][0])/2.
else:dt=(samples[index+1][0]-samples[index-1][0])/2.
total_t+=dt
total_ws+=samples[index][1] * dt
print("Total ws: %0.2f" % total_ws)
print("Total w: %0.2f" % (total_ws/total_t))请注意我在方法1中所做的修改
>>Total ws: 16500000.00
>>Total w: 1375.00
>>Total ws: 15950000.00
>>Total w: 1329.17
>>Total ws: 16500000.00
>>Total w: 1375.00发布于 2016-05-25 07:47:05
t2-t1 =1小时
S1是从t1到t2 (又名integrale)的蓝色曲线下的区域。
E1 (Joules) = S1(w)/3600(s),因此它表示下一个小时的本地总功耗。
然后,您只需选择一天中最大的E1,以获得最耗电的时间,在这种情况下,h=7到7+1!

https://stackoverflow.com/questions/37401787
复制相似问题