从pvlib入门光伏发电系统

本文介绍了pvlib库在光伏发电项目中的应用,涵盖了模型选择、术语解析、地理位置与安装参数设置、光伏模块与逆变器配置、温度预测、发电量计算以及完整示例。pvlib简化了复杂的光伏系统计算,帮助用户根据实际条件优化经济效益。

在这里插入图片描述

1、背景

建设光伏电站是一项巨大的投资,为了保证收益,需要在建设前期进行大量分析与计算。这些计算涉及到气象学、电力科学、经济学等许多领域的许多模型。如何根据实际情况选择相应的模型与算法以提高电站的整体发电效率与收益,是一项非常复杂的操作,对相关人员的技术储备与实际经验都有非常高的要求。

针对这种「模型泛滥」的情况,pvlib应运而生。pvlib是一个python的第三方库,为光伏发电系统相关的计算模型提供了开放、可靠、可交互的基准实现。换言之,用户通过pvlib可以自由地搭配各种计算模型,并得到最终的计算结果(如果在某地建设光伏电站,它的发电量是怎样的)。

使用pvlib的一个基本场景是:为了计算在某地(已知经纬度等位置信息)建设光伏电站所能带来的经济效益,需要根据该地的气象预报数据对辐照度等数据进行预测,并结合光伏组件的参数及配置信息,对发电量进行预测。

针对上述场景,本文基于pvlib的介绍文档,梳理了pvlib的基本用法以及光伏发电中涉及到的其他术语与知识。除大段引用外,文中的相关知识均整理自互联网上的公开内容,不再给出参考链接。

2、术语

2.1 术语

光伏发电是一个相对比较专业的领域,因此有必要先对该领域涉及到的专有名词及术语进行了解。下面表格中总结了一些术语的中英文表示及其含义,如有不准确的地方,欢迎指出。

英文 中文 含义
inverter 逆变器 将直流电转变为交流电的仪器。光伏电厂发的电都是直流电,如果需要并入交流电网,则需要逆变器进行转化。
PV modules 光伏模块 一个独立的将光能转化为电能的组件,常见的光伏板是其主要部件之一。
Array (光伏)阵列 如果多个邻近的光伏模块具有相同的设备参数(材料等)和安装参数(倾斜度、方向、模块数量等),那么它们就组成一个光伏阵列,简称阵列。
tilt 倾角 光伏板的倾斜角度,取值从0(水平)到90(垂直)。
azimuth 方位角 光伏板的方向,取值从0到360(不含),0表示正北,90表示正东,180表示正南,270表示正西。注意,pvlib中的设定与我们在国内很多资料上的设定略有不同,国内一些资料将正南方向定义为0,向东偏为负角度,向西偏为正角度。
AOI 入射角 Angle of incidence,阳光照射到某个平面上时与该平面的夹角。
zenith 天顶角 指光线入射方向和天顶方向的夹角,与高度角互余。
elevation 高度角 指光线入射方向和地平面之间的夹角,与天顶角互余。
DNI 直接辐射 Direct Normal Irradiance,阳光从太阳盘面直接照射到与光路正交的表面时的辐射度。
DHI 散射 Direct Horizontal Irradiance,在大气中散射的直接达到地面的阳光称为散射辐射,而散射辐射的标准测量在水平面上进行,得到的值称为散射水平辐射。
GHI 总辐射 Global Horizontal Irradiance,太阳的DHI和DNI到达水平表面称为总水平辐射。
TMY 典型气象年 Typical Meteorological Year,又被译为标准气象年,是依据气候平均变动原理所统计出来作为当地典型气候的代表,所有也被称为平均气象年,是一种实际上并不存在的假想气象年,其意义在于以一年份之标准气象来代表当地之长期气候最平均的变动情况。

2.2 基本流程

在了解了光伏发电的基本术语之后,我们来看一下在pvlib中如何实现发电量的预测。

pvlib的基本工作流程如下图所示:

### 光伏功率预测的技术与实现 光伏功率预测涉及多种技术和方法,这些技术通常依赖于统计学、机器学习以及物理建模等多种手段。以下是几种常见的光伏功率预测方法及其特点: #### 1. 基于物理模型的预测方法 这种方法利用太阳辐射、温度和其他气象参数作为输入变量,结合光伏组件的电气特性方程进行计算。其核心在于通过精确描述光伏系统的物理行为来进行预测。 这种技术的优点是可以提供较高的准确性,尤其是在短期预测中[^1]。然而,它需要详细的系统参数和高质量的天气预报数据支持。 #### 2. 统计时间序列分析法 该类方法主要包括自回归移动平均(ARMA)模型、指数平滑法等传统的时间序列处理工具。它们通过对历史发电量数据的趋势性和周期性的挖掘完成未来值的推断。 尽管简单易用,但这类方法可能无法很好地捕捉到复杂的非线性变化规律,在面对快速波动或者极端事件时表现较差[^4]。 #### 3. BP神经网络 BP (Back Propagation) 神经网络是一种广泛应用的人工智能算法之一,特别适合解决具有高度复杂性和不确定性的实际工程问题。在光伏领域内,可以通过训练大量包含光照强度、气温等因素的数据集来构建一个能够反映各种条件下输出功率特性的映射函数。 下面是一个简单的BP神经网络实现示例: ```matlab % MATLAB Code Example for BP Neural Network Prediction Model clear; clc; load('solar_data.mat'); % Load dataset including irradiance, temperature and power output. inputs = [irradiance';temperature']; outputs = power_output'; net = feedforwardnet([10]); % Create a network with one hidden layer containing ten neurons. net.divideParam.trainRatio = 70/100; net.divideParam.valRatio = 15/100; net.divideParam.testRatio = 15/100; net = train(net, inputs, outputs); % Train the neural network using training data. predicted_power = net(inputs); % Use trained model to predict new samples' powers. ``` 此代码片段展示了如何创建并训练一个基本的前馈神经网络结构用于光伏功率预测任务[^2]。 #### 4. GPR - 高斯过程回归 高斯过程回归(Gaussian Process Regression,GPR),作为一种贝叶斯概率框架下的无参估计器,提供了灵活的概率分布假设空间,并允许我们自然地量化不确定性水平。因此非常适合那些存在噪声干扰或是测量误差较大的应用场景下做精准预估工作。 例如,在某些情况下如果想评估不同置信区间内的可能性范围,则采用GPR会更加直观合理一些。 ```matlab % Gaussian Process Regression Implementation in Matlab kernelfun = @(X,Y) exp(-pdist2(X./lengthscale,Y./lengthscale).^2); Ktr = kernelfun(training_inputs,training_inputs)+diag(noisevar*ones(size(training_outputs))); alpha = Ktr\training_outputs; mu_test = meanf(testing_inputs)*ones(length(testing_inputs),1)+... testing_inputs*(inv(Ktr)*(training_outputs-meanf(training_inputs)*ones(length(training_inputs),1))); SigmaTest = diag(kernelfun(testing_inputs,testing_inputs))-sum((repmat(alpha',size(testing_inputs,1),1).*... kernelfun(testing_inputs,training_inputs)).^2,[],2)'; ``` 以上脚本说明了怎样定义核函数并通过求解最大似然优化超参数得到最终的结果向量`mu_test`, 同时也给出了测试集中每个样本对应的标准差平方根即标准偏差数组 `sqrt(SigmaTest)` 来表示各自的可信度大小[^3]. #### 5. RF – 随机森林回归 随机森林(Random Forest,RF) 是另一种强大的集成学习策略,由许多独立生长起来的基础分类树组成。当面临大规模多维特征空间的时候尤其有效果显著的优势体现出来;另外由于引入了Bagging机制从而具备较好的抗过拟合能力。 具体操作流程如下所示: ```matlab % Random Forest Algorithm Applied on Photovoltaic Power Forecast Task model=TreeBagger(nTrees,... 'PredictorNames',{'SolarRadiation','Temperature'}, ... 'ResponseName','PowerOutput',... 'Method','regression'); yfit=predict(model,newData); ``` 这里调用了MATLAB内置库文件中的`TreeBagger()` 函数来自动生成指定数量棵树构成的整体解决方案对象实例化版本号为`model`. 接着再利用这个已经建立好的预测引擎去对待测的新批次资料执行运算得出结论保存至变量名叫做`yfit`. 总结来说,无论是哪种具体的数值模拟途径都各有千秋优劣之处需视具体情况而定择善固执之即可达成预期目标效果最佳状态!
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芳樽里的歌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值