这个例子演示了如何在Simulink®中使用无迹卡尔曼滤波器估计非线性系统的状态。万博1manbetx该实例还说明了如何开发一个基于事件的卡尔曼滤波器来更新系统参数以获得更精确的状态估计。该示例使用控制系统工具箱™或系统标识工具箱™运行。此示例不需要预测性维护工具箱™。
考虑具有以下等效电路[1]的电池模型
该模型由电压源构成, a串联电阻和一个钢筋混凝土块和。电池在充电和放电循环之间交替使用。在本例中,您将使用测量到的电池电流、电压和温度来估计电池模型的电荷状态(SOC)。假设电池是一个非线性系统,使用无迹卡尔曼滤波器估计SOC。电池的容量随着每一次放电-充电循环而下降,给出了一个不准确的SOC估计。使用基于事件的线性卡尔曼滤波估计电池容量时,电池过渡之间的充放电。估计的容量反过来可以用来指示电池的健康状况。
Simu万博1manbetxlink模型包含三个主要组件:电池模型、无迹卡尔曼滤波块和基于事件的卡尔曼滤波块。进一步的解释将在以下几节中给出。
open_system (“BatteryExampleUKF /”)
利用Simscape语言实现了具有热效应的电池模型。
电池模型的状态转换方程为:
在哪里和为RC块中的热敏电阻和荷电状态下的电容,电容之间的电压是多少,为输入电流,为电池温度,为电池容量(单位:Ah),是过程噪声。
输入电流为电池放电时随机产生的脉冲,充电时为恒定的脉冲,如下图所示。
测量方程为:
在哪里为实测电压输出,为串联电阻,为电压源的电动势,为测量噪声。
在模型中,和是依赖于SOC和电池温度的2D查找表。利用实验数据[1]对查找表中的参数进行识别。
要使用无迹卡尔曼滤波块,需要定义状态和测量方程的Matlab或Simulink函数。万博1manbetx这个例子演示了Simulink函数的使用。由于无迹卡尔曼滤波器是离散时间滤万博1manbetx波器,所以首先要对状态方程进行离散化。在这个例子中,使用了欧拉离散化。取采样时间。对于一般的非线性系统,系统可离散化为
非线性电池系统的状态向量为
。
应用欧拉离散化得到如下方程:
离散化状态转换方程被实现为一个Simulink函数,名为“电池状态转换cn”,如下图所示。万博1manbetx函数的输入x
是函数输出时的状态向量吗xNext
为下一步的状态向量,采用离散状态转换方程计算。需要指定的信号维数和数据类型x
和xNext
。在本例中,为的信号维数x
和xNext
为2,数据类型为double。额外的输入是温度、估计的容量和电流。注意,额外的输入是状态转换方程的输入,而不是UKF块所要求的。
测量功能也被实现为一个名为“电池测量fcn”的Simulink功能,如下图所示。万博1manbetx
块参数配置如下:
在系统模型选项卡,指定如下所示的块参数:
您可以指定以下参数:
状态转换功能:batteryStateFcn
。
前面定义的实现离散状态转换方程的万博1manbetxsimulink函数的名称。
过程噪声:添加剂
,具有时变协方差。的添加剂
表示噪声项直接加到最终信号中。
过程噪声为SOC和根据电池系统的动态特性进行估计。电池公称容量为30ah,以平均电流幅值15A进行放电/充电循环。因此,一个放电或充电过程大约需要2小时(7200秒)。最大的变化是100%的SOC和约4伏特的。
SOC和中每一步的最大变化是和,在那里为滤波器的采样时间。在这个例子中,设置为1秒。
过程噪声是:
。
初始状态:。
SOC的初始值假设为100%(充满电的电池),而初始值为设置为0,因为我们没有关于?的任何先验信息。
最初的协方差:
初始协方差表示初始猜测的准确性和可靠性。假设SOC的最大初始猜测误差为10%,SOC的最大初始猜测误差为1V。初始协方差矩阵设为。
无香味的转换参数:设置基于[2]
-α:1。确定西格玛点在x附近的分布。设置为1表示更大的分布。-β:2。用于合并分布的先验知识。的面值是2。卡帕:0。中等尺度参数。Kappa的名义值是0。
测量功能:batteryMeasurementFcn
。
前面定义的实现度量函数的simu万博1manbetxlink函数的名称。
测量噪声:添加剂
时不变协方差为1e-3。
测量噪声是根据测量设备的精度来估计的。用于电池电压测量的电压表大约有1%的准确度。电池电压约为4V。同样,我们有。因此,设置。
样品时间:。
电池退化是通过降低容量来建模的。在本例中,电池容量设置为每放电-充电循环减少1 Ah,以说明退化的影响。由于事先不知道容量的退化率,设的状态方程为随机漫步:
在哪里放电-充电的次数和是过程噪声。
配置电池电量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
模拟系统。
sim卡(“BatteryExampleUKF”)
在每个时间步长,无迹卡尔曼滤波器提供了基于电压测量的SOC估计。绘制实际SOC、估计SOC以及它们之间的差异。
同步两个时间序列[RealSOC, EstimatedSOC] =同步(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.Data“线宽”,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 (的指示信号);
一般来说,卡尔曼滤波器能够跟踪实际容量。在估计容量和实际容量之间有一个半周期的延迟。这种延迟是由于测量的时间。电池容量下降的计算发生在一个完整的充放电周期结束时。库仑计数给出了一个基于先前的放电或充电周期的容量测量。
本例演示了如何使用Simulink无迹卡尔曼滤波块对锂电池进行非线性万博1manbetx状态估计。此外,还介绍了基于事件的卡尔曼滤波器的设计步骤。新估计的容量用于改进无迹卡尔曼滤波器的SOC估计。
[1] Huria, Tarun等人。高保真电子模型与热依赖性的表征和模拟高功率锂电池。Electric Vehicle Conference (IEVC), 2012 IEEE International. IEEE, 2012.
Wan, Eric A.和Rudolph Van Der Merwe。用于非线性估计的无迹卡尔曼滤波器。一个daptive Systems for Signal Processing, Communications, and Control Symposium 2000. AS-SPCC. IEEE, 2000.