精华内容
下载资源
问答
  • 系统辨识

    千次阅读 2019-07-28 22:12:40
    系统辨识 系统辨识是根据系统的输入输出时间函数来确定描述系统行为的数学模型。系统辨识是现代控制理论中的一个分支。 通过建立数学模型的目的是估计表征系统行为的重要参数,建立一个能模仿真实系统行为的模型,用...

    Introduction

    系统辨识

    系统辨识是根据系统的输入输出时间函数来确定描述系统行为的数学模型。系统辨识是现代控制理论中的一个分支。
    通过建立数学模型的目的是估计表征系统行为的重要参数,建立一个能模仿真实系统行为的模型,用当前可测量的系统的输入和输出预测系统输出的未来演变,以及设计控制器。
    Zadeh(1962)指出:“系统辨识是在输入和输出数据的基础上,从一类模型中确定一个与所观测系统等价的模型”。
    Ljung(1978)指出:“系统辨识有三个要素——数据,模型类和准则,即根据某一准则,利用实测数据,在模型类中选取一个拟合的最好的模型”。

    System Identification is the experimental approach to process modeling, and the modeling for identification of dynamical systems from input/output data, which confirm a model in a set of models that presents the dynamic characteristics of the system under an optimized criterion.

    • System Identification 和 Parameter Estimation 的区别
      Parameter estimation是系统辨识问题的简化,因为结构已知,参数未知。

    System Identification的方法可以分为两大类:

    • 离线辨识
      将一定时间内积累的采样数据集中进行一次辨识计算。
    • 在线辨识
      每个采样周期都根据新的采样数据进行一次递推辨识计算,节省计算时间和内存空间,便于及时掌握系统现状。
    输入信号

    合理选择辨识的输入信号是能否获得好的辨识结果的关键之一。
    为了使系统可辨识,输入信号必须满足一定的条件。最低要求是在辨识时间内系统的动态必须被输入信号持续激励。也就是说,在试验期间内输入信号必须充分激励系统的所有模态。
    更进一步,输入信号的选择应能使给定系统的辨识模型精度更高。这就引出了最优输入信号设计的问题。

    在具体工程应用中,选择输入信号时还应考虑以下因素:

    1. 输入信号的功率和幅值不宜过大,以免使系统工作在非线性区,但也不宜过小,以致信噪比太小,直接影响辨识精度;
    2. 输入信号对系统的“静扰动”要小,即应使正负向扰动机会均等;
    3. 工程上要便于实现,成本低。

    辨识中常用的输入信号有白噪声或伪随机信号。

    输出谱密度关系告诉我们:要充分激励系统,就要使输入信号的频谱“宽”于系统频谱。

    功率谱是描述信号的重要特征之一。物理意义:对于任何信号,我们将它分解成若干个(无限个)不同频率的正弦信号分量。这些正弦波分量的功率谱与其频率的对应关系即为信号的功率谱。

    辨识的基本要素:

    1. 输入输出数据(辨识的基础)
      必须包含有关系统特性的足够信息。
      时域角度:信号变化剧烈,且呈现非周期性; 频域的角度:频域宽。
    2. 模型类
    3. 等价准则
      评判“辨识得到的模型”是否满足“实际需要” 的一个“准则”。

    辨识就是按照一定的准则从某一类模型中找出一个与输入输出数据拟合的最好的模型。

    状态空间表达式
    • 经典控制理论
      对于一个线性定常系统,可用常微分方程或传递函数加以描述,可将某个单变量作为输出,直接和输入联系起来。实际上系统除了输出量这个变量之外,还包含其它相互独立的变量,而微分方程或传递函数对这些内容的中间变量是不便描述的,因而不能包含系统的所有信息。显然,从能否完全揭示系统的全部运动状态来说,用微分方程或传递函数来描述一个线性定常系统有其不足之处。
    • 现代控制理论
      在用状态空间法分析法分析系统时,系统的动态特性是由状态变量构成的一阶微分方程组来描述的。它能反映系统的全部独立变量的变化,从而能同时确定系统的全部内部运动状态,而且可以方便的处理初始条件。这样,在设计控制系统时,不再只局限于输入量、输出量、误差量,为提高系统性能提供了有力的工具。加之可以利用计算机进行分析设计及实时控制,因而可以应用于非线性系统、时变系统、多输入-多输出系统以及随机过程等。
    • 状态空间表达式
      由状态方程和输出方程表示,在状态空间中对控制系统作完整表述的公式。
      系统的状态方程为:
      x˙(t)=Ax(t)+Bu(t)\dot{x}(t)=Ax(t)+Bu(t)
      其中,A为nxn的常系数矩阵,称作系统矩阵; B为nxr的常系数矩阵,称作控制矩阵。A与B都由系统本身的参数决定。u是输入信号,x是状态变量。
      系统的输出方程:
      y(t)=Cx(t)+Du(t)y(t)=Cx(t)+Du(t)
      其中,C 为 m×n 的常系数矩阵,称为输出矩阵,它表达了输出变量与状态变量之间的关系; D 为 m×r 的常系数矩阵,称为直接转移矩阵,它表示输入变量通过矩阵 D 直接转移到输出。在大多数实际系统中, D=0 。 y 是输出, x 是系统状态, u 是输入。

    Reference:
    https://github.com/Skylark0924/System_Identification

    展开全文
  • 系统辨识系统辨识系统辨识系统辨识系统辨识
  • 系统辨识,简单的介绍系统辨识的概念及要点!
  • 系统辨识MATLAB程序系统辨识MATLAB程序系统辨识MATLAB程序系统辨识MATLAB程序系统辨识MATLAB程序系统辨识MATLAB程序系统辨识MATLAB程序系统辨识MATLAB程序系统辨识MATLAB程序系统辨识MATLAB程序系统辨识MATLAB程序...
  • 系统辨识与建模:系统辨识与建模
  • 系统辨识资料大全(matlab系统辨识工具箱)合集。 系统辨识 合集 系统辨识工具箱 网上辛苦搜得 系统辨识 合集 系统辨识工具箱 matlab m
  • MATLAB系统辨识工具箱-系统辨识工具箱.rar MATLAB系统辨识工具箱,,英文版的,不是很难。 希望对大家有帮助。
  • 系统辨识与仿真,神经网络仿真例子及程序,研究生系统辨识课程期末作业及答案
  • 过程辨识 系统辨识

    2013-04-15 19:33:18
    系统辨识领域的经典课程,包含详细的系统辨识方法
  • 系统辨识

    2018-01-22 15:10:14
    非线性系统辨识,专著包括维纳系统,volterra系统的辨识方法与算法
  • 系统辨识基本概念

    2014-04-15 11:02:05
    系统辨识
  • 系统辨识理论及应用 箫德云 系统辨识新论 丁峰.
  • 控制系统辨识

    2018-07-05 15:03:08
    关于如何使用matlab进行控制系统辨识的书籍,详细讲解了辨识的流程和方法
  • 系统辨识文档

    2017-07-18 18:11:47
    关于系统辨识的理论基础
  • 系统辨识课件

    2012-07-09 19:25:45
    系统辨识课件 系统辨识基础 经典系统辨识
  • 系统辨识.zip

    2019-06-27 11:12:44
    里面为做的系统辨识的仿真程序,为m文件,助于对系统辨识的理解
  • 系统辨识最小二乘法

    2019-04-17 19:10:52
    最小二乘法进行系统辨识
  • 系统辨识文件

    2015-08-08 12:11:45
    Matlab系统辨识软件使用
  • 系统辨识及其matlab仿真含m文件-系统辨识及其matlab仿真.part2.rar 发现论坛中做系统辨识的会员不多,尤其是做化工方面的。今天本人上传系统辨识方面的书--《系统辨识及其matlab仿真》,好像没人发过吧?呵呵。pdf...
  • 系统辨识及其matlab仿真含m文件-系统辨识及其matlab仿真.part3.rar 发现论坛中做系统辨识的会员不多,尤其是做化工方面的。今天本人上传系统辨识方面的书--《系统辨识及其matlab仿真》,好像没人发过吧?呵呵。pdf...
  • 系统辨识与建模

    2018-11-01 20:18:09
    系统辨识与建模,包含各种系统辨识的算法,如最基本的最小二乘算法
  • 系统辨识理论

    2015-01-28 11:36:09
    系统辨识——使用者的理论,第二版)一书是著名的系统辨识方面的权威、瑞典Linkoping大学L.Ljung教授编著的。L.Ljung教授现任瑞典皇家工程科学院院土、瑞典皇家科学院院士、IFAC顾问、IEEEFellow及多家国际刊物...
  • 系统辨识与参数估计课程讲义2006-系统辨识与参数估计—00绪论.ppt 北京科技大学《系统辨识与参数估计》课程讲义
  • 完整的报告形式,系统辨识的大作业,采用经典辨识方法,用的是面积法和Hankel矩阵法,报告后附录了相对应的matlab程序
  • Hello,欢迎做客我的博客。 这里会介绍关于机器人的方方面面,希望对你有所帮助。...MATLAB的System Identification Toolbox(系统辨识工具箱),其中的Nonlinear Grey-Box Models(非线性灰箱建...

    Hello,欢迎做客我的博客。
    这里会介绍关于机器人的方方面面,希望对你有所帮助。
    今天的内容关于机器人动力学模型的参数辨识,这是在做机器人控制前的关键一步!

    工具和参考链接

    由于机器人动力学模型往往都是非线性的,这里用到的工具是:

    MATLAB的System Identification Toolbox(系统辨识工具箱),其中的Nonlinear Grey-Box Models(非线性灰箱建模工具),链接如下:

    System Identification Toolbox

    Nonlinear Grey-Box Models

    主要的参考示例:
    Modeling an Industrial Robot Arm

    1 机器人动力学模型

    在对模型参数进行辨识之前,首先需要对机器人进行建模,建模的方法通常是牛顿欧拉法或者拉格朗日方法。关于建模的部分,读者可以参考我之前的博客。如:
    机器人动力学建模之牛顿欧拉法推导

    此处,直接给出机器人的非线性动力学模型如下:
    x˙1=Kasinx2x˙2=Kbx32x˙3=uy1=x1y2=x2y3=x3 \begin{aligned} \dot{x}_1 &=K_a\sin{x_2}\\ \dot{x}_2 &=K_bx_3^2\\ \dot{x}_3 &=u\\ y_1 &= x_1\\ y_2 &= x_2\\ y_3 &= x_3 \end{aligned}
    其中,xx代表状态,uu代表输入,yy代表输出。
    KaK_aKbK_b为待辨识参数。

    2 辨识前的准备——采集实验数据

    在进行参数辨识前,我们需要采集输入和输出数据,即给定一组uu,然后记录系统的yy。通常,我们可以让uu是正弦信号,或者多个正弦信号的叠加,以获得更好的辨识效果。

    通常来说,我们需要通过实验去采集数据。

    在这里,我们的目的是介绍MATLAB系统辨识工具箱的用法,为了更加直观的看出系统辨识的效果,我们可以基于上述动力学模型生成一组数据,来检验MATLAB的系统辨识效果。

    数据生成程序:

    clc;
    clear all;
    close all;
    
    period = 0.01; % 注意这里是采样时间
    T = 10;
    
    % 参数设置
    Ka = 1.21;
    Kb = -0.6;
    
    x1 = 0;
    x2 = 0;
    x3 = 0;
    
    Input = [];
    Output = [];
    
    for t = 0:period:T
        % 给定输入,正弦函数
        u = sin(2*pi/10*t);
        % 系统动力学模型迭代
        x1_p = x1 + Ka*sin(x2)*period;
        x2_p = x2 + Kb*x3^2*period;
        x3_p = x3 + u*period;
        x1 = x1_p;
        x2 = x2_p;
        x3 = x3_p;
        % 输出
        y1 = x1;
        y2 = x2;
        y3 = x3;
        % 保存数据
        Input = [Input; u];
        Output = [Output; y1,y2,y3];
    end
    
    % 保存数据
    save('blogexample.mat', 'Input', 'Output');
    
    

    注意,这里我们设置了Ka=1.21K_a=1.21以及Kb=0.6K_b=-0.6。下面,我们可以看看MATLAB是否能辨识得到这组参数。

    3 系统辨识——MATLAB代码示例

    利用MATLAB进行系统辨识的步骤分为两步:

    • 定义模型文件(定义机器人动力学模型)
    • 设置辨识过程()

    3.1 模型文件

    程序如下:

    function [dx, y] = blogmodel_m(t, x, u, Ka, Kb, varargin)
    %% 函数的参数dx,y,t,x,u不可更改
    %% 函数参数Ka,Kb即为待辨识参数
      % 输出方程
      y = [x(1); x(2); x(3)];
      % 动力学模型(微分方程),dx即为x的导数
      dx = [Ka*sin(x(2)); ...
            Kb*x(3)^2; ...
            u];
    end
    

    3.2 定义辨识过程

    整个辨识过程主要用到四个函数:

    • idnlgrey:生成一个系统辨识对象(包含了系统模型,输入,状态,输出向量等等信息)
    • iddata:将数据打包为iddata格式,便于系统辨识工具箱使用
    • nlgreyest:系统辨识函数(主要函数,执行的就是优化参数的过程)
    • compare:对比真实输出和模型输出的结果

    下面是详细程序以及注释:
    程序如下:

    clc;
    clear all;
    close all;
    
    %% 配置模型
    FileName     = 'blogmodel_m';               % 模型文件.
    Order        = [3 1 3];                     % 输出、输入和状态向量的维数 [ny nu nx].
    Parameters   = [1, -1]';                    % 待辨识参数的初始值
    InitialStates = zeros(3, 1);                % 系统状态的初始值
    Ts            = 0;                          % Time-continuous system.
    % 生成一个系统辨识对象
    nlgr = idnlgrey(FileName, Order, Parameters, InitialStates, Ts, ...
                            'Name', 'Blog Example Model', ... % 定义对象的名称
                            'InputName',  {'Voltage'}', ... % 定义输入向量的名称
                            'InputUnit', {'V' }', ... % 定义输入向量的单位
                            'OutputName', {'Position' 'Velocity' 'Acceleration'}', ... % 定义输出向量的名称
                            'OutputUnit', {'m' 'm/s' 'm/s^2'}', ... % 定义输出向量的单位
                            'TimeUnit', 's'); % 定义时间的单位
    % 设置系统状态向量的名称和单位            
    nlgr = setinit(nlgr, 'Name', {'Position' 'Velocity' 'Acceleration'}');
    nlgr = setinit(nlgr, 'Unit', {'m' 'm/s' 'm/s^2'}');
    % 设置待辨识参数的名称
    nlgr = setpar(nlgr, 'Name', {'Ka : coeff 1' 'Kb : coeff2' });
    nlgr.Parameters(1).Fixed = false; % 将参数1设置为可变参数,默认即为可变参数,若设置为固定参数,则优化时,该参数不变
    nlgr.Parameters(1).Minimum = -10; % 设置参数1的下界为-10
    nlgr.Parameters(1).Maximum = 10;  % 设置参数1的上界为10
    % 打印出nlgr的信息
    present(nlgr)
    
    %% 导入数据
    dataset = load('blogexample.mat');
    z = iddata(dataset.Output, dataset.Input, 0.01, 'Name', 'Actual Data'); % 将数据打包为iddata格式,注意这里面的0.01代表了数据采样时间为0.01秒
    z.InputName = {'Voltage'}; % 定义输入向量的名称
    z.InputUnit = {'V' }; % 定义输入向量的单位
    z.OutputName = {'Position' 'Velocity' 'Acceleration'}; % 定义输出向量的名称
    z.OutputUnit = {'m' 'm/s' 'm/s^2'}; % 定义输出向量的单位
    z.Tstart = 0; % 定义起始时刻
    z.TimeUnit = 's'; % 定义时间单位
    
    present(z);
    
    %% 参数效果
    X0init = zeros(3,1);
    nlgr = setinit(nlgr, 'Value', num2cell(X0init)); % 设置状态向量的初始值
    figure(1)
    % 对比系统真实输出和模型输出(参数辨识前)
    compare(getexp(z, 1), nlgr, [], compareOptions('InitialCondition', X0init)); 
    
    %% 辨识系统参数
    nlgr = nlgreyest(nlgr, getexp(z, 1), nlgreyestOptions('Display', 'on')); % 系统辨识
    figure(2) 
    % 对比系统真实输出和模型输出(参数辨识后)
    compare(getexp(z, 1), nlgr, [], compareOptions('InitialCondition', X0init));
    
    

    4 系统辨识结果

    4.1 辨识前

    在这里插入图片描述

    4.2 辨识后

    在这里插入图片描述
    参数辨识的结果为:Ka=1.211K_a=1.211Kb=0.600K_b=-0.600。和我们生成数据时设置的Ka=1.21K_a=1.21以及Kb=0.6K_b=-0.6几乎完全相同。

    另外,从辨识结果也可以看到,参数辨识的效果相当只好。

    5 更多

    更多关于参数辨识过程的设置,比如优化算法,容许误差,可参考:
    nlgreyestOptions

    关于模型验证,参数辨识效果的展示,可参考:
    Model Validation

    关于本文的实例,大家可从下面链接中下载整理好的版本:
    MATLAB参数辨识的小例子

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,136
精华内容 1,254
关键字:

系统辨识