我试图用记录的电压(时间)数据来计算多个二极管的平均功率,这是不对称的。我编写了一个脚本,它使用scipy.integral包中的simpson函数来计算平均电压,它可以用来计算平均功率,也可以通过数据平方和电阻除以直接计算平均功率,而且它似乎工作得很好。
,我的问题是,如果我使用平均电压的积分来计算功率,结果是不同于,而是从辛普森积分E 211得到的。
源的结果并不遥远,但是对于二极管来说,它总是辛普森积分的一半左右。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.signal import find_peaks
import openpyxl
import scipy.integrate as integral
file = "CSV8.csv"
data = pd.read_csv(file)
#Resistance
R = 1000
x = data["Second"]
#0.16 to move the data to the x-axis
y1 = (data["Volt1"]+0.16)**2/R
y2 = (data["Volt2"]+0.16)**2/R
yU1 = (data["Volt1"]+0.16)
yU2 = (data["Volt2"]+0.16)
#plt.plot(x, y1)
#plt.plot(x, y2)
plt.plot(x, yU1)
plt.plot(x, yU2)
peak = find_peaks(-y1, distance = 900)[0]
T = x[peak[3]]-x[peak[1]]
#plt.plot(x[peak], y1[peak], "x")
plt.plot(x[peak], yU1[peak], "x")
#Integral
xint = x[peak[1]:peak[3]]
y1int = y1[peak[1]:peak[3]]
y2int = y2[peak[1]:peak[3]]
yU1int = np.abs(yU1[peak[1]:peak[3]])
yU2int = np.abs(yU2[peak[1]:peak[3]])
int1 = integral.simpson(y1int, xint)
int2 = integral.simpson(y2int, xint)
intU1 = integral.simpson(yU1int, xint)
intU2 = integral.simpson(yU2int, xint)
print("P Source: ", int1/T, " P Diode: ", int2/T)
print("U Source: ", intU1/T, " U Diode: ", intU2/T)
print("P from U Source: ", (intU1/T)**2/1000, "P from U Diode: ", (intU2/T)**2/1000 )
plt.xlabel("Time t in s")
plt.ylabel("Voltage U in V")
plt.show()产出如下:
资料来源: 0.020998072067580663 P二极管: 0.006863115468771637 资料来源: 4.130740894612934 U二极管: 1.6910455615565707 资料来源: 0.017063020338427666 P来自U二极管: 0.0028596350912601775
使用此数据集:https://pastebin.com/WtTdZVi5
电源(蓝色)和二极管(橙色)的电压(时间)-diagram我试过降低噪音,但是积分变化不大。
希望粗体的文字能使它更易读懂。
发布于 2022-10-16 19:59:22
这不是编码问题,你的代码很好。问题是物理学不太正确。
如你所知,瞬时功率P是V**2/R,然后计算出平均功率为总能量(即一个周期内的功率)除以周期。一切都很好。
然而,如果你想从“平均电压”中计算出平均功率,你必须取均方根值(均方,即,做电压平方的积分,最后做平方根)。当然,当您执行v_{rms}**2时,您只需“撤消”平方根,然后基本上再次得到相同的积分。
让我们看看这是如何工作的:
def rms(y: np.array) -> float:
return np.sqrt(np.mean(y**2))
y1rms = rms(yU1int)
y2rms = rms(yU2int)
P1 = y1rms**2 / 1000
P2 = y2rms**2 / 1000
int1 = integral.simpson(y1int, xint) / T
int2 = integral.simpson(y2int, xint) / T
print(P1, int1)
print(P2, int2)0.02099443290402991 0.020998072067580663 0.006865154632322394 0.006863115468771637
所以,总之,你不能只是把电压的绝对值积分起来,然后期望得到正确的平均功率,你需要取均方根平均值。
https://stackoverflow.com/questions/74088424
复制相似问题