基于matlab/Simulink的参数辨识
2017-08-18 16:36
225 查看
基于Simulink的辨识
Simulink自带Parameter Estimation功能。可以对Simulink模型中的参数进行估计。MATLAB的Parameter Estimation官方说明中有一个电池参辨识的例子(见[Simulink参数辨识官方示例])。使用Simulink进行辨识的步骤为:
1. 建立Simulink模型,将需要辨识的参数用base workspace中的变量表示。
2. 打开菜单栏中Analysis选项下的Parameter Estimation功能。
3. 打开Transient Data, 导入使用实验或其他方法得到的输入、输出数据(由于用不到状态数据所以不用设置States)。在这里,输入数据为电池的电流,输出数据为电池的端电压。由于电池参数随SOC而变化,输入数据只能为脉冲放电的那一段数据,认为这段时间内电池的SOC没有太大变化。当然也可以将模型建立为与SOC有关的,但这样就过于复杂了。
4. 打开Variables,设置需要辨识的参数。在这里可以设置参数的初始值、范围等。由于使用的算法一般只能找到一个局部最优解,并不能保证为全局最优解,所以初始值的设置还是比较重要的。对于锂电池来说,电阻一般为mΩ量级,时间常数为10s~1000s。
5. 打开Estimation,进行参数估计的相关设置。勾选要用的Data Set和Parameters。使用Estimation Options进行估计算法的设置。MATLAB提供了几种优化算法,一般选非线性最小方差。比较重要的两个参数是参数截止误差(Parameter tolerance)和函数截止误差(Function tolerance)。只要满足了两次迭代的参数或cost function的不超过截止误差,迭代就会停止。在Parallel Options中可以选择启用parallel pool来进行多线程加速,但是有时候会失败。
6. 点击Start就可以开始了,勾选Show progress views可以看到仿真输出和参数的变化。
7. 按照同样的方法进行其他SOC下的参数辨识。也可以在Simulink中建立一个模块,对输入进行筛选,对不同的SOC使用不同的参数。可以一次性辨识出参数-SOC的关系。
这种方法的优点是简单易用。几乎全部为图形化操作,不需要写代码,只需要搭建好Simulink模型就可以进行估计了,而且几乎可以估计任何线性、非线性的模型。缺点是速度慢、效率低。每次迭代都需要编译并运行仿真程序很多次,这个过程程序十分卡顿。
Simulink自带Parameter Estimation功能。可以对Simulink模型中的参数进行估计。MATLAB的Parameter Estimation官方说明中有一个电池参辨识的例子(见[Simulink参数辨识官方示例])。使用Simulink进行辨识的步骤为:
1. 建立Simulink模型,将需要辨识的参数用base workspace中的变量表示。
2. 打开菜单栏中Analysis选项下的Parameter Estimation功能。
3. 打开Transient Data, 导入使用实验或其他方法得到的输入、输出数据(由于用不到状态数据所以不用设置States)。在这里,输入数据为电池的电流,输出数据为电池的端电压。由于电池参数随SOC而变化,输入数据只能为脉冲放电的那一段数据,认为这段时间内电池的SOC没有太大变化。当然也可以将模型建立为与SOC有关的,但这样就过于复杂了。
4. 打开Variables,设置需要辨识的参数。在这里可以设置参数的初始值、范围等。由于使用的算法一般只能找到一个局部最优解,并不能保证为全局最优解,所以初始值的设置还是比较重要的。对于锂电池来说,电阻一般为mΩ量级,时间常数为10s~1000s。
5. 打开Estimation,进行参数估计的相关设置。勾选要用的Data Set和Parameters。使用Estimation Options进行估计算法的设置。MATLAB提供了几种优化算法,一般选非线性最小方差。比较重要的两个参数是参数截止误差(Parameter tolerance)和函数截止误差(Function tolerance)。只要满足了两次迭代的参数或cost function的不超过截止误差,迭代就会停止。在Parallel Options中可以选择启用parallel pool来进行多线程加速,但是有时候会失败。
6. 点击Start就可以开始了,勾选Show progress views可以看到仿真输出和参数的变化。
7. 按照同样的方法进行其他SOC下的参数辨识。也可以在Simulink中建立一个模块,对输入进行筛选,对不同的SOC使用不同的参数。可以一次性辨识出参数-SOC的关系。
这种方法的优点是简单易用。几乎全部为图形化操作,不需要写代码,只需要搭建好Simulink模型就可以进行估计了,而且几乎可以估计任何线性、非线性的模型。缺点是速度慢、效率低。每次迭代都需要编译并运行仿真程序很多次,这个过程程序十分卡顿。
相关文章推荐
- 基于Simulink的FIR滤波器设计与仿真--初识matlab
- 基于MATLAB/Simulink开发STM32嵌入式微控制器:按键驱动跑马灯
- 学习《基于MATLAB/Simulink的系统技术与仿真》1
- 推荐专著一本:《基于MATLAB/Simulink和BeagleBoard的快速原型机开发》
- Matlab实现基于内容的图像检索系统
- 基于MIMICS和Matlab的虚拟内窥镜的构想
- C++与matlab混合编程基于主成份分析算法的数值分析(一)
- 基于Hough 变换的直线检测(Matlab实现)
- 基于MATLAB的数字水印技术研究
- 基于COM接口的VC++与MATLAB混合编程
- 基于MATLAB的简单函数调用
- 基于Retinex的图像去雾算法(MATLAB实现)
- 基于Matlab的最小方差控制仿真
- 基于matlab的SMO实现
- ubuntu matlab simulink 里传函只显示零点为 num(s)
- 基于SIFT特征的图像配准(附Matlab源代码)
- 基于dct变换的图像编解码(包含Z扫描与反Z扫描)的matlab程序
- (Matlab) simulink和m文件的相互调用
- 基于MATLAB的极值计算方法
- 基于MATLAB的线性代数 判断两向量是否正交