风电

风切变与威布尔分布:轮毂高度风速外推实战

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

风切变与威布尔分布:轮毂高度风速外推实战 封面

风电项目里有一个看似不起眼、却能把发电量估计整体抬高或压低好几个百分点的环节:把测到的某个高度的风速,外推到风机真正"吃风"的轮毂高度。气象观测大多在 10m,再分析数据常给到 100m,而现代陆上风机轮毂普遍在 90~160m。风速对高度并不是线性增长,发电量又和风速近似三次方相关——外推差 0.2 m/s,年发电量可能差 3% 以上。更麻烦的是,外推不只关乎平均风速,还关乎风速的整个分布形状,而这正是威布尔(Weibull)分布与风切变(wind shear)理论交汇的地方。本文面向风电工程师,把风廓线模型、风切变指数、Weibull 参数随高度的变化,以及它们在 IEC 标准里的位置讲清楚,最后给出在运梦气象 API 上可直接跑的外推示例。

关键要点

  • 风速外推差 0.2 m/s,年发电量可能差 3% 以上:风速随高度非线性增长,发电量近似与风速三次方相关,所以轮毂高度风速外推是发电量估计中放大误差的关键环节。
  • 幂律 v(z)=v(zᵣ)·(z/zᵣ)^α 是工程主流,著名的"1/7 律"即 α≈0.143,对应中性大气、开阔陆地;开阔海面更接近 0.10~0.11。
  • 风切变指数 α 不是常数:随昼夜与稳定度强烈变化,白天可低至 0.1、夜间稳定边界层常升到 0.3 以上;逐时反算 α 比固定 1/7 律更稳。
  • Weibull 分布形状参数 k 随高度变化:随高度上升 k 通常缓慢增大、尺度参数 c 也增大,外推时必须平移并变形整个分布,而非只把平均风速乘系数。
  • 运梦平台一套代码两处复用:历史回测用 ERA5(dataSourceId="era5",含 10m 与 100m 风分量逐时反算 α),预报用德国气象局数据(dataSourceId="ger",覆盖未来约 7 天,字段口径一致)。

背景与定位

本文依托三份经典且仍在生效的来源。其一是国际标准 IEC 61400-12-1:2017《Wind energy generation systems — Part 12-1: Power performance measurements of electricity producing wind turbines》(第 2 版,2017 年 3 月发布),它是测定风机功率特性曲线的权威方法标准,第 2 版相对第 1 版的重要变化之一,就是正式纳入了风切变(wind shear)与风向切变(wind veer),并引入"转子等效风速"(Rotor Equivalent Wind Speed, REWS)概念,承认整个扫风面上的风速分布会影响出力,单点轮毂风速不再够用。其二是 Justus, C. G. 与 Mikhail, A. 于 1976 年发表在《Geophysical Research Letters》的《Height Variation of Wind Speed and Wind Distributions Statistics》,这篇只有四页的短文奠定了"幂律廓线指数随风速变化、Weibull 形状参数随高度变化"的定量框架,至今仍是风资源外推的基础引用。其三是 Weibull, W. 于 1951 年在《Journal of Applied Mechanics》发表的《A Statistical Distribution Function of Wide Applicability》,它提出了后来以其命名的 Weibull 分布——风资源界用来描述风速频率分布的标准工具。三者一脉相承:Weibull 给出分布形式,Justus 与 Mikhail 给出分布随高度怎么变,IEC 标准把这套方法固化进工程验收。

方法 / 它做了什么

先说风廓线。近地层风速随高度增加,工程上有两条主流曲线。对数律源自边界层理论:v(z) = (u*/κ)·ln((z−d)/z₀),其中 z₀ 是地表粗糙度、d 是零平面位移、κ≈0.4 是冯卡门常数。它物理基础扎实,但需要知道粗糙度和稳定度修正。幂律则更简洁:v(z) = v(zᵣ)·(z/zᵣ)^α,α 就是风切变指数(也称 Hellmann 指数)。著名的"1/7 律"即 α≈0.143,对应中性大气、开阔陆地。

Justus 与 Mikhail 的贡献在于:他们不是简单套一个固定 α,而是指出 α 本身随参考风速变化,给出形如 α = a + b·ln(v₁) 的关系,并进一步证明幂律廓线与 Weibull 分布随高度的演变是自洽的。换句话说,如果低层风速服从某个 Weibull 分布(尺度参数 c、形状参数 k),那么高层的风速也近似服从 Weibull,但 c 会随高度增大、k 也会随高度缓慢变化。这意味着外推不能只把平均风速乘个系数,而要把整个分布平移、变形——否则风速频率分布在高风速段会失真,直接拖累功率曲线积分出的发电量。

Weibull 分布的密度为 f(v) = (k/c)·(v/c)^(k−1)·exp(−(v/c)^k)。k 越大分布越尖、风越稳定,k 越小拖尾越长、湍流和阵风越显著。风资源里 k 多在 1.8~2.5 之间。把 Weibull 参数和功率曲线结合,年发电量 = 8760 × ∫ P(v)·f(v) dv,所以 c、k 估准了,电量才估得准。

关键结论

  • 1/7 律只是中性、开阔陆地的近似。在 IEC 与多份实测研究的口径下,开阔陆地中性条件 α≈0.143 是合理默认,而开阔水面(海上)更接近 0.10~0.11。把陆地经验值用到海上会高估高层风速,反之亦然——这类系统偏差比随机噪声更危险。
  • α 不是常数,随昼夜与稳定度强烈变化。白天地表受热、大气不稳定,混合强、切变小,α 可低至 0.1 甚至更低;夜间稳定边界层切变陡增,α 常升到 0.3 以上。用单一日均 α 会同时高估夜间、低估白天的廓线形状。Justus 与 Mikhail (1976) 早就用 α=a+b·ln(v) 把这种依赖性纳入框架。
  • Weibull 形状参数 k 随高度变化,不能假定恒定。这是 Justus 与 Mikhail 论文的核心结论之一:随高度上升 k 通常缓慢增大(分布更集中),尺度参数 c 也增大。把 10m 的 k 直接套到 120m,会让高风速段的概率分布偏差,进而影响功率曲线积分。
  • IEC 61400-12-1:2017(第 2 版)把切变写进了功率特性验收。第 2 版引入风切变、风向切变与转子等效风速(REWS),承认整个扫风面的风速廓线都会影响出力,而不仅是轮毂点。这对大叶轮机型(扫风直径常超过 150m,叶尖与叶根高差上百米)尤其重要。
  • 外推的不确定度要诚实计入资源评估。在复杂地形、近海岸带,再分析的 100m 风与幂律外推都会有系统偏差,应通过测风塔实测做订正(MCP),并把外推误差并入 P50/P90 的不确定度合成,而不是默认外推无误差。

对新能源 / 运梦平台的意义

对风电从业者,这套方法直接决定三件事的质量。资源评估:用多年长序列数据估 Weibull 的 c、k,再外推到轮毂高度,是测算 P50/P90 发电量的起点;α 与 k 取错,整条曲线偏。机型选型与功率曲线核对:IEC 61400-12-1 的 REWS 思路提醒我们,选大叶轮机型时要看整个扫风面的切变,而非只看轮毂点风速,尤其在切变大的内陆夜间。短期功率预测:预报模型输出的常是某固定高度风速,要外推到轮毂高度再喂入功率曲线;逐时反算 α(用两个高度的预报风速)比固定 1/7 律明显更稳,能直接降低预测的均方根误差,对应"两个细则"考核里的偏差电量。

落到运梦平台的能力上:历史回测用 ERA5(dataSourceId="era5"),它直接给 10m(uas/vas)与 100m(u100/v100)两个高度的风分量,正好能逐时反算当地、当时的 α,把昼夜与季节变化吃进去;预报用德国气象局数据(dataSourceId="ger"),覆盖未来约 7 天,字段口径与 ERA5 一致,外推逻辑一套代码两处复用,无需维护两套换名规则。

在运梦气象 API 上手

下面用历史源 ERA5 拉某站点一年的 10m 与 100m 风分量,逐时反算风切变指数 α,再外推到 120m 轮毂高度,并拟合 Weibull 参数。响应是统一 JSON envelope,用 resp.json() 解析后按 timeList 与各字段数组下标对齐。

import os, requests
import numpy as np

API = "https://console.yun-meng.top/api/energy-weather/search/weather/action/downloadSync"
TOKEN = os.environ["YUNMENG_TOKEN"]

payload = {
    "dataSourceId": "era5",            # 历史回测用 ERA5;预报请改 "ger"(德国气象局,未来约 7 天)
    "lat": 41.8, "lon": 109.9,
    "stime": "2023-01-01 00:00",
    "etime": "2023-12-31 23:00",
    "timezone": "8",                   # 必填,东八区
    "fields": ["uas", "vas", "u100", "v100"],
}
r = requests.post(API, headers={"Authorization": f"Bearer {TOKEN}"},
                  json=payload, timeout=600)
r.raise_for_status()
result = r.json()                       # 统一 envelope,无 CSV/NetCDF、无 format 参数
if not result.get("success"):
    raise RuntimeError(result.get("msg", "查询失败"))
data = result["data"]

ws10  = np.hypot(np.asarray(data["uas"],  float), np.asarray(data["vas"],  float))
ws100 = np.hypot(np.asarray(data["u100"], float), np.asarray(data["v100"], float))

# 逐时反算风切变指数 α = ln(ws100/ws10) / ln(100/10)
mask = (ws10 > 0.5) & (ws100 > 0.5)    # 避开静风,避免对数发散
alpha = np.log(ws100[mask] / ws10[mask]) / np.log(100.0 / 10.0)
print(f"α 均值={alpha.mean():.3f}(白天小、夜间大),1/7 律参考值=0.143")

# 用逐时 α 外推到 120m 轮毂高度(以 100m 为参考高度)
hub = 120.0
ws_hub = ws100[mask] * (hub / 100.0) ** alpha

# 矩量法拟合 Weibull:k≈(σ/μ)^(-1.086),c≈μ/Γ(1+1/k)
from math import gamma
mu, sigma = ws_hub.mean(), ws_hub.std(ddof=1)
k = (sigma / mu) ** (-1.086)
c = mu / gamma(1 + 1.0 / k)
print(f"轮毂{hub:.0f}m: 平均风速={mu:.2f} m/s, Weibull k={k:.2f}, c={c:.2f} m/s")

预报场景把 dataSourceId 换成 "ger" 即可,由德国气象局预报覆盖未来约 7 天,外推与拟合代码完全复用。

常见问题

风切变指数 α 取多少合适?能直接用 1/7 律吗?

1/7 律(α≈0.143)只是中性、开阔陆地的合理默认,不能无脑套用。开阔水面(海上)更接近 0.10~0.11,把陆地经验值用到海上会高估高层风速。更稳妥的做法是用两个高度的风速逐时反算 α,把昼夜与稳定度变化吃进去。

为什么不能只把平均风速乘个系数外推到轮毂高度?

因为外推不只关乎平均风速,还关乎风速的整个分布形状。Justus 与 Mikhail (1976) 证明:随高度上升,Weibull 尺度参数 c 增大、形状参数 k 也缓慢变化。只缩放平均值会让高风速段的概率分布失真,直接拖累功率曲线积分出的发电量。

Weibull 分布的 k 值一般在什么范围?

风资源里 k 多在 1.8~2.5 之间。k 越大分布越尖、风越稳定;k 越小拖尾越长、湍流和阵风越显著。注意 k 随高度变化,不能把 10m 的 k 直接套到 120m。

运梦气象 API 怎么做轮毂高度外推?历史和预报用哪个数据源?

历史回测用 ERA5(dataSourceId="era5"),它直接给 10m(uas/vas)与 100m(u100/v100)两个高度的风分量,可逐时反算当地 α 再外推;预报用德国气象局数据(dataSourceId="ger"),覆盖未来约 7 天,字段口径与 ERA5 一致,外推与拟合代码可一套复用。

IEC 61400-12-1:2017 第 2 版相比第 1 版有什么关键变化?

第 2 版正式纳入了风切变、风向切变,并引入"转子等效风速"(REWS)概念,承认整个扫风面的风速廓线都会影响出力,单点轮毂风速不再够用。这对扫风直径常超过 150m 的大叶轮机型尤其重要。

引用与原文

  • Weibull, W. (1951). A Statistical Distribution Function of Wide Applicability. Journal of Applied Mechanics, 18(3), 293–297. DOI: 10.1115/1.4010337
  • Justus, C. G., & Mikhail, A. (1976). Height Variation of Wind Speed and Wind Distributions Statistics. Geophysical Research Letters, 3(5), 261–264. DOI: 10.1029/GL003i005p00261
  • International Electrotechnical Commission. (2017). IEC 61400-12-1:2017 — Wind energy generation systems — Part 12-1: Power performance measurements of electricity producing wind turbines (Edition 2.0). Geneva: IEC. https://webstore.iec.ch/en/publication/26603