You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于非对称电压时序数据计算二极管平均功率的矛盾问题

非对称电压下二极管平均功率计算的结果差异问题

我需要利用非对称电压-时间记录数据计算二极管的平均功率,编写了一段Python脚本,采用两种计算方式:

  • 方式一:直接对电压平方后除以电阻,通过Simpson积分计算平均功率
  • 方式二:先通过Simpson积分计算平均电压,再推导平均功率

方式一运行正常,但方式二得到的结果与方式一不一致:电源的结果差异不大,但二极管的推导功率始终约为直接积分结果的一半。

测试代码

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()

输出结果

P Source: 0.020998072067580663 P Diode: 0.006863115468771637
U Source: 4.130740894612934 U Diode: 1.6910455615565707
P from U Source: 0.017063020338427666 P from U Diode: 0.0028596350912601775

问题原因与修正方案

核心错误

你混淆了电压平均值(整流平均值)和电压有效值的概念:

  • 方式一的计算是正确的:平均功率是瞬时功率在周期内的平均值,即 $P_{avg} = \frac{1}{T}\int_{0}{T}\frac{u(t)2}{R}dt$,完全符合电路平均功率的定义。
  • 方式二中,你计算的是电压绝对值的平均值 $U_{avg} = \frac{1}{T}\int_{0}^{T}|u(t)|dt$,然后用 $P = \frac{U_{avg}^2}{R}$ 推导功率,这是错误的——只有有效值的平方除以电阻才等于平均功率,有效值的定义是 $U_{rms} = \sqrt{\frac{1}{T}\int_{0}{T}u(t)2dt}$。

对于二极管的非对称波形(大部分时间电压接近0,仅小周期内有电压),平均值和有效值的差异极大,这就是为什么二极管推导功率只有直接积分结果一半的原因。

修正代码

将方式二的计算逻辑改为使用有效值推导功率:

# 替换原有的平均电压计算与推导功率代码
# 计算电源和二极管电压的有效值
U_rms1 = np.sqrt(integral.simpson(yU1[peak[1]:peak[3]]**2, xint)/T)
U_rms2 = np.sqrt(integral.simpson(yU2[peak[1]:peak[3]]**2, xint)/T)

# 用有效值计算平均功率
P_from_U_rms1 = U_rms1**2 / R
P_from_U_rms2 = U_rms2**2 / R

print("P from U_rms Source: ", P_from_U_rms1)
print("P from U_rms Diode: ", P_from_U_rms2)

运行后,该结果会与方式一的直接积分功率完全一致。

内容的提问来源于stack exchange,提问作者greasygoosehat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 04:20:26