气象大数据

逆变器限电(clipping)对光伏功率预测的影响与建模

· 南京运梦科技算法团队 · 评审 算法负责人

逆变器限电(clipping)对光伏功率预测的影响与建模 封面

做光伏功率预测,大多数精力都花在「把辐照-温度-功率这条上升段拟合准」上:转置、组件温度、污渍衰减,一层层修正。但有一类偏差,它既不来自辐照误差,也不来自温度模型,而是出在出力曲线的顶部——晴空正午,预测值还在顺着辐照往上爬,实测功率却被一条水平线齐刷刷地削平了。这就是逆变器限电(clipping,又称削顶、限幅)。在如今普遍采用高直交比设计的电站里,clipping 不是偶发现象,而是设计上预期的常态。如果建模时把它当透明的,午间时段的预测会系统性偏高,p50 电量被高估,电力市场申报和考核都跟着遭殃。这篇文章把 clipping 的物理成因、它对预测的影响机理,以及如何在模型里显式加一个限幅环节讲透。读者对象是新能源行业的算法、资源评估与运营同行。

关键要点

  • clipping 的根因是直交比(DC/AC ratio)大于 1:直流侧组件容量超过逆变器交流额定容量,晴空高辐照时直流可用功率超过逆变器上限,多出的部分被「削掉」,交流出力被钳在额定值上。
  • 现代地面电站直交比常做到 1.2–1.4,分布式甚至更高。这是有意为之的经济设计——多铺组件抬高低辐照时段出力、拉满逆变器利用小时,代价是高辐照时段少量削顶能量损失(典型年损失约百分之几)。
  • clipping 让功率对辐照的响应从「单调上升」变成「上升后平台」。预测模型若只学了线性/单调上升段,会在午间平台区系统性高估,且误差与辐照强度正相关、集中在晴空日。
  • 正确建模是在物理链路末端加一个 min(P_dc, P_ac_rated) 的限幅算子;纯数据驱动模型要么显式提供 DC/AC、逆变器额定等结构特征,要么用分段/单调约束让它学得到那条平台。
  • clipping 损失随气候带变化:高辐照晴空主导的地区(如西北)削顶更多,多云散射主导的地区更少;用 ERA5 历史逐时辐照重建削顶分布,能把直交比选型和电量预估的偏差一起收敛。

一、什么是 clipping:从直交比说起

要理解 clipping,先要分清光伏电站里两个不同的「容量」。直流侧容量指组件阵列在标准测试条件下的额定功率总和(单位常写作 kWp 或 MWp,p 代表 peak)。交流侧容量指逆变器的额定输出功率(kVA 或 MW),它是电站真正能往电网送的功率上限。两者的比值就是直交比(DC/AC ratio,也叫 overloading ratio 或 inverter loading ratio, ILR)

早期电站习惯把直交比设成接近 1.0,组件容量和逆变器容量基本匹配。但这其实是一种浪费:太阳辐照在一天和一年里大部分时间都远低于峰值,逆变器在绝大多数时刻都「吃不饱」,额定容量被闲置。于是行业逐渐转向超配(overloading)——故意多铺组件,让直交比做到 1.2、1.3 甚至 1.4 以上。

超配的好处是实打实的:在清晨、傍晚、阴天这些低辐照时段,更大的直流阵列能输出更多功率,把逆变器的利用小时数和发电量整体抬上去。代价则出现在另一端:当辐照足够强、直流阵列的可用功率超过逆变器交流额定容量时,逆变器无法把多出来的功率全部转换输出,只能通过偏移最大功率点(让阵列工作在非 MPP 状态)把多余功率「丢掉」,交流出力被牢牢钳在额定值上。这段被丢掉的能量,就是 clipping loss(削顶损失)。直观地说,出力曲线的尖顶被一条水平线切平了,切掉的那块面积就是损失的电量。

需要强调:这里讨论的 clipping 是逆变器层面、由直交比设计决定的内生限幅,和电网调度下达限电指令导致的「弃光(curtailment)」是两回事。后者是外部的、可变的、由系统消纳能力决定的;前者是电站自身硬件配置决定的、可预测的、几乎每个晴空正午都会重复出现的确定性现象。本文聚焦前者。

二、为什么超配是划算的

把直交比从 1.0 提到 1.3,年发电量到底是增是减?答案几乎总是「净增」,这正是超配成为主流设计的原因。

关键在于辐照的概率分布。一个站点全年的逐时辐照,绝大多数小时都落在中低强度区间,只有少数晴空正午能逼近峰值。把组件容量加大 30%,意味着在那一大片中低辐照时段,每一小时的出力都按比例抬高了——这些增量逐时累加,是一笔可观的电量。而削顶损失只发生在辐照高到触顶的那少数小时里,且即便触顶,损失的也只是「超出额定的那一截」,不是整段出力。两相比较,增益的底面积远大于削顶切掉的尖顶面积。

工程上,最优直交比由组件价格、逆变器价格、当地辐照分布和电价结构共同决定。辐照越平缓、晴空峰值越不突出的地区(多云散射主导),可以把直交比做得更高而削顶损失很小;辐照越「尖」、晴空高辐照占比越大的地区(如西北干旱区),同样的直交比削顶损失会更大,最优值相应低一些。典型设计下,全年 clipping 损失常在百分之几的量级——这是一个用得起的代价,但绝不是可以忽略的小数,尤其在做精细电量预估和功率预测时。

这就引出本文的核心矛盾:超配在经济上是对的,但它给功率预测埋了一个系统性偏差的雷

三、clipping 如何污染功率预测

不考虑限幅时,光伏的功率-辐照关系近似单调上升:辐照越强、(经温度修正后的)出力越高。预测模型——无论是 pvlib 式的物理模型,还是 LSTM、梯度提升这类数据驱动模型——本质上都在学这条上升曲线。

加入 clipping 后,这条曲线的形状变了:它先随辐照上升,到达逆变器额定功率后拐成一条水平平台,无论辐照再怎么涨,交流出力都不再增加。功率对辐照的响应在平台区被彻底「饱和」了。

如果预测模型没有意识到这条平台的存在,会发生什么?

  • 午间系统性高估。模型用上升段的斜率外推,在晴空正午把出力预测到额定容量之上,而实测被钳在额定值。误差全是单边的——预测一律偏高,且辐照越强、偏得越多。
  • 误差集中在晴空日。多云、阴天因为辐照触不到顶,clipping 不发生,预测正常;偏差专门挑晴朗的好天气出现。这种「好天气反而预测差」的现象,常被误诊为辐照源或温度模型的问题,实则是漏了限幅。
  • 训练阶段的反向污染。如果用含 clipping 的实测功率去训练一个不带限幅结构的数据驱动模型,模型为了同时拟合上升段和平台段,会把上升段的斜率人为压低(试图「兼顾」两端),结果在低辐照段又变得偏低。一个被削顶污染的训练集,会让整条曲线都失真。
  • 概率预测的尾部塌缩。做 p90/分位数预测时,平台的存在意味着高出力侧的分布被一堵「墙」截断,出力的上界就是额定容量。不显式建模这堵墙,高分位预测会越过物理上限,失去意义。

一句话:clipping 把一个单调回归问题,变成了一个带上界约束的分段回归问题。忽略它,预测在最该准的晴空高出力时段反而最不准。

四、怎么把 clipping 建进模型

处理 clipping 的思路很清晰:在物理链路的最末端,加一个限幅算子。把前面所有环节(转置到 POA、组件温度修正、直流功率计算、逆变器效率)算出的直流可用功率记为 P_dc,逆变器交流额定容量记为 P_ac_rated,则实际交流出力为:

P_ac = min(P_dc × η_inv, P_ac_rated)

其中 η_inv 是逆变器转换效率。这个 min 操作就是 clipping 的数学本质——一个硬上界。物理模型(pvlib 思路)里这一步几乎是免费的,关键是别忘了它,并且要用真实的逆变器额定容量而非组件容量做上界。

更精细一点,可以考虑两个工程细节。其一,逆变器并非到点硬切,临近额定时效率曲线和 MPPT 偏移会让平台略有圆角,但一阶近似用硬 min 已足够。其二,温度会间接影响削顶时长:高温让直流功率下降,反而可能让原本触顶的时段退出限幅,所以 clipping 建模必须放在温度修正之后,顺序不能颠倒。

纯数据驱动模型,有两条路。一是喂结构特征:把 DC/AC ratio、逆变器额定容量、甚至「理论无限幅出力 / 额定容量」这个比值作为输入特征,让模型有机会学到平台的位置。二是给模型施加约束:用分段建模(分「未饱和」和「饱和」两段分别拟合),或在输出层加一个不超过额定容量的 clamp,硬性保证预测不越过物理上界。实践中,物理限幅 + 数据驱动学残差的混合方案最稳——让物理模型负责那条确定性的平台,数据驱动只去学平台之外的细微偏差。

还有一个常被忽视的点:训练数据的清洗。如果手头的实测功率序列已经含 clipping,而你想训练一个「无限幅理论出力」模型,需要先把平台段识别出来(连续多点贴着额定容量、且对应辐照仍在上升),对这些样本做特殊处理或剔除,否则模型会把人为的平台学进上升段的参数里。反过来,若目标就是预测「上网交流功率」,那平台段是真实标签,必须保留并配合限幅结构一起学。目标量是「理论直流出力」还是「实际交流上网功率」,决定了 clipping 该被剔除还是该被建模——这一步想清楚,比调任何超参都重要。

五、用历史辐照重建削顶分布

直交比怎么选、削顶损失有多大、午间平台有多宽,这些都不是拍脑袋能定的,而要用站点的历史逐时辐照分布算出来。这正是历史再分析数据的用武之地。

做法是:拉取站点多年的逐时辐照(以及气温、风速用于温度修正),按拟定的组件容量和逆变器容量跑一遍物理链路,统计有多少小时触顶、削掉了多少电量、年削顶损失占比多少。把直交比从 1.2 到 1.4 各扫一遍,就能画出「直交比 vs. 年发电量 vs. 削顶损失」的权衡曲线,为选型提供量化依据。同一套逐时序列还能直接告诉你午间平台在一年中的时间分布——夏季晴空日平台最宽,冬季和多云日几乎没有——这对功率预测模型理解「什么时候会触顶」至关重要。

运梦平台的历史再分析数据产品历史范围覆盖 1950 年至今(其底层 ERA5 数据集本身可追溯到 1940 年),逐时、全球覆盖、时序连续,特别适合给没有现场观测的拟建站点做这类削顶分布重建。需要提醒的是再分析对快速穿云的强波动刻画偏平滑,会略微低估辐照方差,因此对削顶小时数的估计在多云为主的站点要留一点余量。

六、落地:与运梦气象 API 的关系

把 clipping 建进预测,本质上是在已有的辐照-温度-功率链路末端补一个限幅算子,所需的气象输入和不做 clipping 时完全一样:辐照、气温、风速。下面用同步下载接口 downloadSync 一次取齐,历史回测与削顶分布重建用 era5(历史再分析),未来出力预测把 dataSourceId 改为 ger(德国气象局预报,覆盖未来约 7 天),两条链路共用同一套字段、温度模型和限幅算子。

import requests

url = "https://console.yun-meng.top/api/energy-weather/search/weather/action/downloadSync"
headers = {
    "Authorization": "Bearer sk-your-api-key",
    "Content-Type": "application/json",
}
payload = {
    "dataSourceId": "era5",                 # 削顶分析/回测用 ERA5;预报改 "ger"
    "lat": 32.03253,
    "lon": 117.35184,
    "stime": "2022-07-01 00:00",            # 格式 yyyy-MM-dd HH:mm
    "etime": "2022-07-31 23:00",
    "timezone": "8",                         # 必填,东八区时区偏移
    "fields": ["rsds", "tas", "ws"],        # 辐照、气温、风速
}

resp = requests.post(url, headers=headers, json=payload)
result = resp.json()

if result["success"]:
    data = result["data"]
    t   = data["timeList"]
    ghi = data["rsds"]                       # 地表水平总辐射 W/m²
    tas = data["tas"]                        # 气温 ℃
    ws  = data["ws"]                         # 风速 m/s

    # 极简物理链路 + 限幅(POA 简化为 GHI,正式建模应先转置到组件面)
    p_dc_stc = 13.0      # 直流容量 MWp
    p_ac      = 10.0     # 逆变器交流额定 MW,直交比 1.3
    gamma     = -0.0037  # 温度系数 -0.37%/℃
    u0, u1    = 25.0, 6.84
    clip_h = 0
    for i in range(len(t)):
        t_mod  = tas[i] + ghi[i] / (u0 + u1 * ws[i])        # Faiman 估组件温度
        derate = 1 + gamma * (t_mod - 25.0)                 # 温度折减
        p_dc   = p_dc_stc * (ghi[i] / 1000.0) * derate      # 直流可用功率
        p_out  = min(p_dc, p_ac)                            # ← clipping 限幅算子
        if p_dc > p_ac:
            clip_h += 1
    print(f"共 {len(t)} 小时,其中 {clip_h} 小时触顶削峰")
else:
    print("请求失败:", result["msg"], result.get("errorCode"))

正式建模时,应先用 Perez 或 Hay-Davies 把水平辐照转置到组件倾斜面 POA,再以 POA 辐照代入温度模型算直流功率,最后才施加 min(P_dc, P_ac_rated) 限幅;顺序不能乱,限幅必须在温度修正之后。字段口径与单位以数据要素说明为准,接入细节见 API 参考文档。

常见问题

逆变器 clipping(限电)和电网弃光是一回事吗?

不是。clipping 是逆变器层面、由直交比设计决定的内生限幅:直流容量超过逆变器交流额定,晴空高辐照时多余功率被削掉,几乎每个晴空正午都确定性出现。弃光(curtailment)是电网调度因消纳能力不足下达限电指令导致的,是外部的、可变的。本文讨论的是前者。

直交比做到 1.3 会损失发电量吗,为什么还要超配?

会损失一小部分(削顶损失,典型年损失百分之几),但净发电量是增加的。因为加大组件容量后,占全年绝大多数时间的中低辐照时段出力被整体抬高,这部分增益远大于晴空正午被削掉的尖顶。最优直交比由组件/逆变器价格、当地辐照分布和电价共同决定。

为什么我的光伏预测在晴天午间总是偏高?

很可能是漏了 clipping。模型若只学了功率随辐照单调上升的那段,会在晴空正午用斜率外推到额定容量之上,而实测被逆变器钳在额定值,于是单边偏高,且辐照越强偏得越多。解法是在物理链路末端加 min(P_dc, P_ac_rated) 限幅,或给数据驱动模型喂直交比、逆变器额定等结构特征。

数据驱动模型怎么处理 clipping?

两条路:一是喂结构特征(DC/AC ratio、逆变器额定容量、理论无限幅出力/额定容量比值),让模型有机会学到平台位置;二是施加约束(分饱和/未饱和两段建模,或输出层加不超过额定容量的 clamp)。实践中物理限幅 + 数据驱动学残差的混合方案最稳。

怎么估一个拟建站点的削顶损失?

用历史再分析的多年逐时辐照、气温、风速,按拟定的组件容量和逆变器容量跑一遍物理链路,统计触顶小时数和削掉的电量。把直交比从 1.2 到 1.4 扫一遍即可得到选型权衡曲线。运梦平台历史数据产品历史范围覆盖 1950 年至今,适合给无现场观测的站点做这类重建。

结语

clipping 是高直交比时代光伏功率预测里一个隐蔽但确定的偏差源。它不在辐照里、不在温度里,而藏在出力曲线的顶部,专挑晴空高出力时段把预测顶高。处理它其实不难——想清楚预测目标是直流理论出力还是交流上网功率,在物理链路末端补一个 min(P_dc, P_ac_rated) 限幅算子,或给数据驱动模型喂上直交比与逆变器额定这类结构特征,让模型看得见那条平台。把这一步做对,午间出力曲线、p50 电量和电力市场申报的偏差都会一起收窄。气象输入这一侧,历史回测与削顶分布重建取历史再分析、未来预测取德国气象局预报,两条链路共用同一套字段与温度模型,限幅算子写一次即可复用。