这个例子展示了如何在Simulink™中使用Unscented卡尔曼滤波器估计非线性系统的状态。金宝app该实例还说明了如何开发一个基于事件的卡尔曼滤波器来更新系统参数,以获得更准确的状态估计。本示例还需要Simscape™和statflow®。
考虑一个电池模型,其等效电路为[1]
模型由一个电压源组成,串联电阻和一个单一的钢筋混凝土块与组件和.电池在充电和放电循环之间交替。在本例中,您可以通过测量电池的电流、电压和温度来估计电池模型的荷电状态(SOC)。你假设电池是一个非线性系统,并使用Unscented卡尔曼滤波器估计SOC。电池的容量随着每次充放电循环而下降,给出了一个不准确的SOC估计。当电池在充电和放电之间转换时,你使用一个基于事件的线性卡尔曼滤波器来估计电池容量。然后使用估计容量来指示电池的运行状况。
Simu金宝applink模型包含三个主要组件:电池模型、Unscented卡尔曼滤波模块和基于事件的卡尔曼滤波模块。
open_system (“BatteryExampleUKF /”)
利用Simscape软件实现了具有热效应的电池模型。
电池模型的状态转移方程为:
在哪里和是RC块中与热和soc相关的电阻和电容,电容两端的电压是多少,为输入电流,为电池温度,是电池容量(单位:Ah),和是过程噪音。
电池放电时输入电流随机产生脉冲,充电时输入电流恒定。
测量方程为:
在哪里为测量输出电压,为串联电阻器,来自电压源的电动势,和是测量噪声。
在模型中,和是依赖于SOC和电池温度的2D查询表。用实验数据[1]确定了查询表中的参数。
要使用Unscented卡尔曼滤波器块,您可以使用Matlab或Simulink函数指定测量和状态转移函数。金宝app这个例子演示了Simulink函数的使用。金宝app由于无迹卡尔曼滤波器是离散时间滤波器,因此首先对状态方程进行离散。在本例中,采用欧拉离散法。让采样时间保持不变.对于一般的非线性系统时,系统可离散为:
非线性电池系统的状态向量为:
.
应用欧拉离散化得到如下方程:
离散状态转移方程在Simulink函数中实现,名为金宝appbatteryStateFcn
.函数的输入x
是状态向量,还是函数输出xNext
为下一步的状态向量,使用离散的状态转移方程计算得到。在函数中,需要指定的信号维数和数据类型x
和xNext
.在本例中,信号维数为x
和xNext
为2,且数据类型为double。额外的输入batteryStateFcn
为温度、估计容量和电流。注意,附加的输入是状态转移方程的输入,Unscented卡尔曼滤波块不需要这些输入。
类似地,测量函数也在名为的Simulink函数中实现金宝appbatteryMeasurementFcn
.
配置Unscented卡尔曼滤波块参数如下:
在系统模型选项卡,指定块参数如下:
您可以指定以下参数:
状态转换中的功能:batteryStateFcn
.
前面定义的实现离散状态转换方程的金宝appsimulink函数的名称。
过程噪声:添加剂
时不变协方差.添加剂
意味着噪声项直接加到最终信号中。
SOC和根据电池系统的动态特性进行估计。该电池的标称容量为30 Ah,以平均15A的电流幅值进行放电或充电循环。因此,一次放电或充电过程大约需要2小时(7200秒)。最大变化是100%的SOC和大约4伏特.
在SOC和是和,在那里为滤波器的采样时间。在这个例子中,设置为1秒。
因此,过程噪声是:
.
初始状态:.
假设SOC初始值为100%(电池充满电),初始值为设为0,因为我们没有任何的先验信息.
最初的协方差:
初始协方差表明初始猜测的准确性和可靠性。假设SOC的最大初始估计误差为10%,对于SOC的最大初始估计误差为1V.初始协方差矩阵设为.
无香味的转换参数:根据[2]指定
-α:1。确定x周围sigma点的分布。将Alpha设为1以获得更大的分布。-β:2。用于包含关于分布的先验知识。Beta的标称值是2。卡帕:0。中等尺度参数。Kappa的标称值是0。
测量功能:batteryMeasurementFcn
.
前面定义的实现度量功能的Simu金宝applink函数的名称。
测量噪声:添加剂
,时不变协方差为1e-3。
测量噪声V
是根据测量设备的精度估计的。用于电池电压测量的电压表的精度约为1%。电池电压约为4V。同样,我们有.因此,.
样品时间:.
电池的退化是通过降低容量来模拟的.在本例中,电池容量被设置为每次充放电循环减少1ah,以说明退化的影响。由于容量退化速率未知,设状态方程为随机漫步:
,
在哪里是充放电循环次数,和是过程噪音。
电池配置为容量30%时自动充电,容量90%时自动放电。利用这个信息通过积分电流来测量电池容量在一个充电或放电周期(库仑计数)。
的测量方程是:
在哪里是测量噪声。
电池退化的状态转移和测量方程可表示为以下状态空间形式:
在哪里和等于1。
对于上述线性系统,使用卡尔曼滤波估计电池容量。估计利用线性卡尔曼滤波方法改进SOC估计。在算例中,采用基于事件的线性卡尔曼滤波器进行估计.自,线性卡尔曼滤波器仅在充电或放电结束时启用。
配置参数如下:
在模型参数标签,指定工厂型号和噪声特性:
模型来源:输入端口
.
为了实现基于事件的卡尔曼滤波,只有当事件发生时才启用状态方程。换句话说,状态方程也是基于事件的。对于线性系统,设置状态方程为
.
一个:.在这个例子中,.因此,总是等于1。
C: 1、从.
初步估计源:对话框
.中指定初始状态初始状态x [0]
初始状态x [0]: 30。这是电池的标称容量(30Ah)。
问:
这是过程噪声的协方差.由于容量中的降解率在每个充放电循环约为1ah,因此设置工艺噪声为1。
R: 0.1。这是测量噪声的协方差.假设容量测量误差小于1%。用电池容量30ah,测量噪音.
样品时间: Ts。
在选项选项卡,添加一个输入端口启用
控制测量的更新。启用端口用于更新充电或放电事件的电池容量估计,而不是持续更新。
注意,设置启用
为0不会禁用使用状态方程的预测。因此,状态方程也配置为基于事件的。通过为卡尔曼滤波块设置一个基于事件的A和Q,使用状态方程的预测是禁用的启用
设置为0。
为了模拟系统,加载存储在文件中的电池参数BatteryParameters.mat
.该文件包含电池参数,包括,,.
负载BatteryParameters.mat
模拟系统。
sim卡(“BatteryExampleUKF”)
在每一个时间步骤,Unscented卡尔曼滤波器提供基于电压测量的SOC估计.绘制真实SOC,估计SOC,以及它们之间的差异。
%同步两个时间序列[RealSOC, EstimatedSOC] = synchronize(RealSOC, EstimatedSOC,“十字路口”);图;次要情节(2,1,1)情节(100 * RealSOC,“b”,“线宽”, 1.5);持有在情节(100 * EstimatedSOC,“r——”,“线宽”1);标题(“电荷状态”);包含(“时间(s)”);ylabel (“SOC(%)”);传奇(“实际”,“UKF估计”,“位置”,“最佳”,“定位”,“水平”);轴紧subplot(2,1,2) DiffSOC = 100*(RealSOC - EstimatedSOC);情节(DiffSOC。时间,DiffSOC。数据,“线宽”, 1.5);包含(“时间(s)”);ylabel (' \δSOC (%) ',“翻译”,“泰克斯”);传奇(真实SOC与估计SOC的差异,“位置”,“最佳”)轴紧
在初始估计误差后,SOC会迅速收敛到实际SOC。最终估计误差在0.5%以内。因此,无迹卡尔曼滤波器给出了准确的SOC估计。
在每次充放电过渡时,对电池容量进行估计,以改进SOC估计。电池系统输出指示信号,以告知电池在什么过程中。指示灯信号中放电过程用-1表示,充电过程用1表示。在这个例子中,指示器信号的变化被用来决定何时启用或禁用卡尔曼滤波器进行容量估计。我们绘制真实的和估计的容量以及充放电指示信号。
图;次要情节(2,1,1);情节(RealCapacity“b”,“线宽”, 1.5);持有在情节(EstimatedCapacity“r——”,“线宽”, 1.5);包含(“时间(s)”);ylabel (的能力(啊));传奇(“实际”,“KF估计”,“位置”,“最佳”);次要情节(2,1,2);情节(DischargeChargeIndicator.Time DischargeChargeIndicator.Data,“b”,“线宽”, 1.5);包含(“时间(s)”);ylabel (“允许信号”);
一般情况下,卡尔曼滤波能够跟踪实际容量。估计容量与实际容量之间存在半周期延迟。这是因为电池容量下降发生在一个充满放电充电周期结束。而库仑计数给出了最后一次放电或充电周期的容量测量。
这个例子展示了如何使用Unscented卡尔曼滤波块对锂电池进行非线性状态估计。此外,本文还介绍了基于事件的卡尔曼滤波器用于电池容量估计的步骤。利用新估计的容量来改进Unscented卡尔曼滤波器的SOC估计。
Huria, Tarun等。具有热依赖性的高保真电模型,用于大功率锂电池的表征和模拟。电动汽车会议(IEVC), 2012 IEEE国际。IEEE 2012。
Wan, Eric A.和Rudolph Van Der Merwe。"用于非线性估计的无迹卡尔曼滤波器"信号处理、通信和控制的自适应系统研讨会2000。AS-SPCC。IEEE 2000。Ieee 2000。