当我们不知道控制对象的准确数学模型但是能测量控制对象的输入输出时,可以用测量数据来估计控制对象的数学模型,这就是系统辨识。系统辨识分为两个步骤,结构辨识和参数估计。根据我个人的工作经验,工程师们对绝大多数控制对象的结构是比较清楚的,就算是新的控制对象也可以较为容易地通过机理分析得出对象是几阶的等结构信息。在工程实践中,不容易确定的是模型中参数的具体数值。庆幸的是,学术界对参数估计的理论研究比较成熟。参数估计在工程上也得到广泛的应用,比如很多厂商的变频器已经可以对电机进行参数估计。电机的动态数学模型早已被写进控制理论的教科书,模型结构已经基本被人类研究透彻,变频器只需要确定模型中的参数。对于更一般的控制对象,市场上的MATLAB也集成了参数估计的功能。

如果先掌握了理论,再使用MATLAB来做参数估计,肯定会手到擒来。掌握系统辨识的理论需要深厚的数学基础,可是我的数学功力不够,只能先上手,再慢慢地熟悉相关理论。我经常说让搞数学的去研究理论,我们做控制的更应该专注于解决实际问题,其实是在掩饰自己的数学功力不够。万幸的是,MATLAB的parameter estimation 已经相当成熟,大大降低了对使用者的数学功力的要求。

为了上手parameter estimation,我先用simulink搭建一个简单的二阶系统(分子分母的系数全部为1)

然后把该系统的输入输出保存到MATLAB的工作空间中,最后在另一个simulink模型中搭建另外一个二阶系统(系数随机生成)

并使用parameter estimation 来估计各项系数。

我在测量数据里加入了小功率的高斯白噪声,来模拟测量误差。

在最左边的parameters窗口中选择需要估计哪些参数,在Experiements 窗口中选择测量的数据,在顶部的OPTIONS中可以选择使用哪种估计算法来估计参数。不同算法的优缺点和适用范围不同,这也是使用这个工具所必需了解的理论知识。

MATLAB毕竟是商业软件,不讨有开源洁癖的同学和穷人喜欢。python 应该也能实现同样的功能,以后有时间去试试python。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据