首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利用电压(时间)数据计算二极管的平均功率

利用电压(时间)数据计算二极管的平均功率
EN

Stack Overflow用户
提问于 2022-10-16 15:37:38
回答 1查看 49关注 0票数 0

我试图用记录的电压(时间)数据来计算多个二极管的平均功率,这是不对称的。我编写了一个脚本,它使用scipy.integral包中的simpson函数来计算平均电压,它可以用来计算平均功率,也可以通过数据平方和电阻除以直接计算平均功率,而且它似乎工作得很好。

,我的问题是,如果我使用平均电压的积分来计算功率,结果是不同于,而是从辛普森积分E 211得到的。

源的结果并不遥远,但是对于二极管来说,它总是辛普森积分的一半左右。

代码语言:javascript
复制
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我试过降低噪音,但是积分变化不大。

希望粗体的文字能使它更易读懂。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-16 19:59:22

这不是编码问题,你的代码很好。问题是物理学不太正确。

如你所知,瞬时功率P是V**2/R,然后计算出平均功率为总能量(即一个周期内的功率)除以周期。一切都很好。

然而,如果你想从“平均电压”中计算出平均功率,你必须取均方根值(均方,即,做电压平方的积分,最后做平方根)。当然,当您执行v_{rms}**2时,您只需“撤消”平方根,然后基本上再次得到相同的积分。

让我们看看这是如何工作的:

代码语言:javascript
复制
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

所以,总之,你不能只是把电压的绝对值积分起来,然后期望得到正确的平均功率,你需要取均方根平均值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74088424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档