Matlab系统辨识尝试之详细过程1

合集下载

使用Matlab进行线性系统辨识与控制的技巧

使用Matlab进行线性系统辨识与控制的技巧

使用Matlab进行线性系统辨识与控制的技巧引言:线性系统辨识和控制是现代控制理论和工程应用中的重要内容。

Matlab作为一种强大的数学计算和编程软件,为我们提供了丰富的工具和函数,方便了线性系统辨识与控制的实现。

本文将介绍一些使用Matlab进行线性系统辨识与控制的技巧。

一、线性系统辨识1. 数据采集与预处理对于线性系统辨识,首先需要采集系统的输入输出数据。

在Matlab中可以使用内置函数来进行数据采集,如"sim"函数进行仿真实验,或者使用数据采集卡等外部设备来获取现实世界中的数据。

采集到的数据通常需要进行预处理,如去除噪声、滤波或数据归一化等。

在Matlab中有丰富的信号处理工具箱,可以方便地进行数据预处理。

2. 系统模型的选择线性系统辨识的目标是找到一个数学模型来描述实际系统的动态行为。

在选择系统模型时,可以根据应用需求选择合适的模型种类,如ARX模型、ARMA模型、ARMAX模型等。

在Matlab中,可以使用System Identification Toolbox来进行系统模型的选择和参数估计。

这个工具箱提供了多种模型结构和参数估计算法,方便用户根据系统特性进行模型的选择。

3. 参数估计与模型验证在选择好系统模型后,需要进行参数估计和模型验证。

在Matlab中,可以使用System Identification Toolbox中的函数来进行参数估计,如"armax"函数和"arx"函数等。

参数估计结果可以通过模型验证来评估模型的拟合程度和预测性能。

Matlab中的"compare"函数可以绘制真实输出和模型输出的对比曲线,帮助用户评估模型的准确性。

二、线性系统控制1. 控制器设计线性系统控制的目标是设计一个控制器来使得系统达到所期望的性能要求。

在Matlab中,可以使用Control System Toolbox来进行控制器设计。

利用Matlab进行系统辨识的基本步骤

利用Matlab进行系统辨识的基本步骤

利用Matlab进行系统辨识的基本步骤系统辨识是在工程领域中广泛应用的一项技术,它可以通过实验数据来推断系统的特性和行为。

Matlab作为一种强大的数值计算与数据可视化软件,在系统辨识领域也扮演着重要的角色。

本文将介绍利用Matlab进行系统辨识的基本步骤,以帮助读者更好地了解和应用这一技术。

系统辨识的基本步骤可以分为数据采集、预处理、模型选择、参数估计和模型评估五个阶段。

下面将依次介绍每个阶段的具体步骤。

一、数据采集数据采集是系统辨识中至关重要的一步,它需要准备好合适的实验设备,并进行数据记录。

在Matlab中,可以利用数据采集卡或传感器等设备进行数据采集。

一般来说,需要采集输入信号和输出响应信号。

二、预处理预处理是为了提高辨识结果的准确性而对采集到的数据进行处理。

首先要检查数据是否存在异常值或噪声,如果有则进行滤波处理。

另外,还可以进行数据归一化、降采样和数值平滑等处理,以适应不同的辨识方法。

三、模型选择模型选择是在系统辨识过程中非常关键的一步。

在Matlab中,可以选择多种模型结构进行辨识,包括线性模型、非线性模型、时变模型和非参数模型等。

选择合适的模型结构要根据具体问题的要求和实际情况进行综合考量。

四、参数估计参数估计是确定系统辨识结果的过程,它可以通过最小二乘法或极大似然法等统计方法来估计模型的参数。

在Matlab中,可以使用现成的函数或自定义算法进行参数估计。

参数估计的结果可以用来表示系统的传递函数、状态空间模型或差分方程等。

五、模型评估模型评估是对辨识结果进行验证和优化的过程。

在Matlab中,可以利用辨识误差、残差分析和模型预测误差等指标来评估模型的质量。

如果评估结果不理想,还可以尝试调整模型结构或参数估计方法,进行迭代优化。

在实际应用中,系统辨识常常涉及到复杂的数学理论和算法。

Matlab作为一种集成了各类工具箱和函数的软件,可以大大简化系统辨识的步骤,提高辨识的效率和准确性。

Matlab中的系统辨识与参数估计技术

Matlab中的系统辨识与参数估计技术

Matlab中的系统辨识与参数估计技术Matlab(Matrix Laboratory)是一款强大的数学软件,被广泛应用于科学计算、数据处理和工程设计等领域。

在实际工程项目中,经常需要通过已有的数据来推断系统的行为模型,这就涉及到系统辨识与参数估计技术。

本文将介绍在Matlab中使用系统辨识与参数估计技术的方法和步骤。

一、系统辨识与参数估计的概念系统辨识和参数估计是在给定输入输出数据的前提下,通过数学或统计方法来推断系统的动态模型和参数值的过程。

系统辨识旨在从实验数据中提取出模型的结构信息,而参数估计则是为了获得模型的具体参数值。

二、离散时间系统的辨识与参数估计对于离散时间系统,常用的辨识方法有ARX、ARMA和ARMAX等。

以ARX 模型为例,其数学表达式为:y(t) = -a(1)y(t-1) - a(2)y(t-2) - … - a(na)y(t-na) + b(1)u(t-1) + b(2)u(t-2) + … +b(nb)u(t-nb)其中,y(t)表示系统的输出,u(t)表示系统的输入,a和b分别是系统的参数。

在Matlab中,可以使用System Identification Toolbox来进行辨识和参数估计。

首先,需要将实验数据导入到Matlab中,然后根据数据的性质选择合适的辨识方法和模型结构。

接下来,使用辨识工具箱提供的函数,通过最小二乘法或最大似然估计等算法来得到系统的参数估计值。

三、连续时间系统的辨识与参数估计对于连续时间系统,常用的辨识方法有传递函数模型、状态空间模型和灰色系统模型等。

以传递函数模型为例,其数学表达式为:G(s) = num(s)/den(s)其中,num(s)和den(s)分别是系统的分子和分母多项式。

在Matlab中,可以使用System Identification Toolbox或Control System Toolbox 来进行连续时间系统的辨识和参数估计。

利用Matlab进行系统辨识的技术方法

利用Matlab进行系统辨识的技术方法

利用Matlab进行系统辨识的技术方法一、引言系统辨识是研究系统动态特性的一个重要方法,它广泛应用于控制系统、信号处理、通信等领域。

利用Matlab进行系统辨识能够实现快速、准确的模型建立和参数估计。

本文将介绍在Matlab环境下常用的系统辨识技术方法及其应用。

二、系统辨识的基本概念系统辨识是通过对系统的输入和输出信号进行观测和分析,以推断系统的结构和参数。

一般来说,系统辨识包括建立数学模型、估计系统参数和进行模型验证三个步骤。

1. 建立数学模型建立数学模型是系统辨识的第一步,它是描述系统行为的数学表达式。

常用的数学模型包括线性模型、非线性模型和时变模型等。

2. 估计系统参数在建立了数学模型之后,需要通过对实验数据的分析,估计出系统的参数。

参数估计可以通过最小二乘法、极大似然估计法等方法实现。

3. 模型验证模型验证是为了确定估计得到的系统模型是否准确。

常用的方法有经验验证、残差分析、模型检验等。

三、常用的系统辨识技术方法1. 线性参数模型线性参数模型是最常用的系统辨识方法之一。

它假设系统具有线性特性,并通过估计线性模型的参数来描述系统。

在Matlab中,可以使用函数"arx"进行线性参数模型的辨识。

2. 神经网络模型神经网络模型是一种非线性模型,它通过人工神经元的连接权值来描述系统行为。

在Matlab中,可以使用"nlarx"函数进行神经网络模型的辨识。

3. 系统辨识工具箱Matlab提供了丰富的系统辨识工具箱,包括System Identification Toolbox和Neural Network Toolbox等。

这些工具箱提供了各种方法和函数,方便用户进行系统辨识分析。

四、利用Matlab进行系统辨识的应用案例1. 系统辨识在控制系统中的应用系统辨识在控制系统中具有广泛的应用,如无人机控制、机器人控制等。

通过对系统进行辨识,可以建立准确的数学模型,并用于控制器设计和系统优化。

系统辨识实验1实验报告

系统辨识实验1实验报告

实验报告--实验1.基于matlab的4阶系统辨识实验课程:系统辨识题目:基于matlab的4阶系统辨识实验作者:专业:自动化学号:11351014目录实验报告 (1)1.引言 (2)2.实验方法和步骤 (2)3.实验数据和结果 (2)4.实验分析 (4)1、 引言系统辨识是研究如何确定系统的数学模型及其参数的理论。

而模型化是进行系统分析、仿真、设计、预测、控制和决策的前提和基础。

本次实验利用matlab 工具对一个简单的4阶系统进行辨识,以此熟悉系统辨识的基本步骤,和matlab 里的一些系统辨识常用工具箱和函数。

这次实验所采取的基本方法是对系统输入两个特定的激励信号,分别反映系统的动态特性和稳态特性。

通过对输入和输出两个系统信号的比较,来验证系统的正确性。

2、 实验方法和步骤2.1 实验方法利用matlab 对一个系统进行辨识,选取的输入信号必须能够反映系统的动态和稳态两个方面的特性,才能更好地确定系统的参数。

本次实验采取了两种输入信号,为反映动态特性,第一个选的是正弦扫频信号,由下面公式产生:选定频率范围 ,w(t)是时间t 的线性函数,具有扫频性质,可以反映系统的动态特性。

为反映稳态特性,选的输入信号是阶跃信号。

以上的到两组数据,利用matlab 的merge()函数,对两组数据融合,然后用matlab 系统辨识工具箱中的基于子空间方法的状态空间模型辨识函数n4sid()来对系统进行辨识2.2 实验步骤(1)建立一个4阶的线性系统,作为被辨识的系统,传递函数为3243211548765()125410865s s s G s s s s s -+-+=++++(2)产生扫频信号u1和阶跃信号u2(3)u1、u2作为输入对系统进行激励,分别产生输出y1和y2 (4)画出稳态测试输入信号u1-t 的曲线,和y1-t 的曲线 画出动态测试输入信号u2-t 的曲线,和y2-t 的曲线(5)使用merge()函数对u1-y1数据和u2-y2数据进行融合,并使用n4sid()函数对系统进行辨识。

利用Matlab进行系统辨识的技术方法

利用Matlab进行系统辨识的技术方法

利用Matlab进行系统辨识的技术方法在Matlab中进行系统辨识的技术方法主要有参数估计法和非参数估计法两种。

1.参数估计法:参数估计法是通过拟合已知输入和输出数据的数学模型来估计系统的参数。

常用的参数估计方法包括最小二乘法(OLS)、最小二乘法(LSE)、最小二乘法(MLE)和极大似然估计法(MLE)等。

a) 最小二乘法(OLS):OLS方法通过最小化实际输出与模型预测输出之间的误差平方和来估计系统参数。

在Matlab中,可以使用lsqcurvefit函数来实现最小二乘法的系统辨识。

b) 最小二乘法(LSE):LSE方法是通过最小化实际输出与模型预测输出之间的误差平方和来估计系统参数。

在Matlab中,可以使用lsqnonlin函数来实现最小二乘法的系统辨识。

c) 最小二乘法(MLE):MLE方法是通过最大化似然函数来估计系统参数。

在Matlab中,可以使用mle函数来实现最大似然估计法的系统辨识。

2.非参数估计法:非参数估计法不需要事先指定系统的数学模型,而是直接根据输入和输出数据的统计特性进行系统辨识。

常用的非参数估计方法包括频域方法、时域方法和时频域方法等。

a) 频域方法:频域方法通过对输入和输出数据进行频谱分析来估计系统的频率响应。

常用的频域方法包括傅里叶变换、功率谱密度估计和频率响应函数估计等。

在Matlab中,可以使用fft函数和pwelch函数来实现频域方法的系统辨识。

b) 时域方法:时域方法通过对输入和输出数据进行时间序列分析来估计系统的时域特性。

常用的时域方法包括自相关函数估计和互相关函数估计等。

在Matlab中,可以使用xcorr函数来实现时域方法的系统辨识。

c) 时频域方法:时频域方法结合了频域方法和时域方法的优势,可以同时估计系统的频率响应和时域特性。

常用的时频域方法包括短时傅里叶变换和小波变换等。

在Matlab中,可以使用spectrogram函数和cwt函数来实现时频域方法的系统辨识。

使用Matlab进行模式识别的基本步骤

使用Matlab进行模式识别的基本步骤

使用Matlab进行模式识别的基本步骤引言:模式识别是一种通过对数据和信号进行分析,以识别和分类模式的技术。

它在众多领域中都有广泛的应用,如图像处理、语音识别、生物信息学等。

而Matlab作为一种强大的科学计算软件,为模式识别提供了丰富的工具包和算法库。

本文将介绍使用Matlab进行模式识别的基本步骤,帮助读者了解模式识别的基本流程和方法。

一、数据预处理在进行模式识别之前,首先需要对数据进行预处理。

数据预处理可以分为以下几个步骤:1. 数据采集与收集:从实验或实际应用中获取所需的数据,可以利用传感器、仪器等设备进行数据采集,或从数据集合中获取。

2. 数据清洗:对数据进行清洗和去噪,去除噪声、异常值和缺失值等,以确保所使用的数据可靠。

3. 特征提取:对数据进行特征提取,将数据转换为更加有意义和可分辨的特征。

常用的特征提取方法包括主成分分析(PCA)、离散小波变换(DWT)等。

4. 数据归一化:对数据进行归一化处理,消除不同尺度和单位的影响,使得数据处于相同的量级。

二、模式分类模式分类是模式识别的核心任务之一,其目标是通过已知的样本数据来训练分类器,以便对未知的数据进行分类。

在Matlab中,可以使用各种机器学习算法进行模式分类,如支持向量机(SVM)、人工神经网络(ANN)、决策树等。

1. 数据分割:将已知的样本数据分成训练集和测试集,一般将训练集占总数据的70%-80%,测试集占20%-30%。

分割数据的目的是为了验证分类器的性能和准确率。

2. 特征选择:选择合适的特征子集,以减少特征维度和提高分类器的效果。

3. 分类模型训练:使用训练集来训练分类模型,根据选择的算法和特征,通过迭代和优化的方式,得到最优的分类模型。

4. 分类模型评估:利用测试集对分类模型进行评估,计算分类的准确率、召回率、F1得分等指标,评估分类器的性能和效果。

三、模式识别应用模式识别在各个领域都有广泛的应用。

本节将介绍几个常见的模式识别应用案例,并简要介绍使用Matlab进行处理的方法。

Matlab中的系统辨识和参数标识技巧

Matlab中的系统辨识和参数标识技巧

Matlab中的系统辨识和参数标识技巧引言:在工程和科学领域中,系统辨识是一项重要的任务。

通过对系统进行辨识和参数标定,我们可以建立数学模型来描述系统的行为。

在Matlab中,有许多工具和技巧可以用来进行系统辨识和参数标定。

本文将介绍一些常用的工具和技巧,以帮助读者更好地理解和应用这些方法。

一、准备工作在进行系统辨识和参数标定之前,我们首先需要准备一些基本的工作。

首先,我们需要收集系统的输入和输出数据。

输入数据通常是对系统施加的激励信号,例如阶跃信号或随机信号。

输出数据是系统对输入信号的响应。

收集足够量的数据对于准确辨识系统非常重要。

其次,我们需要确保数据的质量。

在收集数据时,我们需要注意采样频率和信噪比。

采样频率要足够高,以捕捉系统的快速动态响应;信噪比要足够高,以避免噪声对数据的影响。

如果数据质量不高,将会使得系统辨识和参数标定的结果不准确。

二、线性系统辨识线性系统辨识是系统辨识领域中的一项基本任务。

在Matlab中,可以使用System Identification Toolbox来进行线性系统辨识。

首先,我们可以使用中自相关函数(cross-correlation)来计算输入和输出数据之间的相关性。

这可以通过Matlab中的xcorr函数实现。

相关性分析可以帮助我们了解系统的输入和输出之间的关系,为后续的系统辨识提供参考。

接下来,我们可以使用频域分析方法来对系统进行辨识。

其中一个常用的方法是基于频率响应函数的辨识方法,例如最小二乘法(Least Squares)等。

这些方法可以通过Matlab中的tfest函数来实现。

另外,我们还可以使用时域辨识方法,例如最小均方误差法(Least Mean Squares)等。

时域辨识方法通常通过求解线性方程组来确定系统的参数。

在Matlab中,我们可以使用lsim和inv函数来实现这些方法。

三、非线性系统辨识与线性系统不同,非线性系统的辨识更加复杂。

系统辨识MATLAB讲课讲稿

系统辨识MATLAB讲课讲稿

系统辨识作业方法一: 递推最小二乘法[NUM]=xlsread('shuju','B4:B257');u=NUM;[NUM1]=xlsread('shuju','C4:C257');z=NUM1;N=length(u);c0=[0.001,0.001,0.001,0.001]'; %直接给出被辨识参数的初始值,取一个充分小的实向量p0=10^7*eye(4,4); %初始状态P0也采用直接取方式,取一个充分大的实数单位矩阵E=0.00000005; %相对误差E参考值c=[c0,zeros(4,253)]; %被辨识参数矩阵的初始值及大小e=zeros(4,254); %相对误差的初始值及大小%开始递推运算for k=3:N;h1=[-z(k-1),-z(k-2),u(k-1),u(k-2)]'; %求h1x=h1'*p0*h1+1;x1=inv(x);k1=p0*h1*x1;%求k1c1=c0+k1*(z(k)-h1'*c0); %求ce1=(c1-c0)./c0;%求参数的相对变化e(:,k)=e1; %把当前相对变化的列向量加入误差矩阵的最后一列c0=c1; %新获得的参数作为下一次递推的旧参数c(:,k)=c1; %把当前所辨识参数的c1列向量加入辨识参数矩阵的最后一列p1=p0-k1*h1'*p0; %求p1值p0=p1; %把当前值给下次用if norm(e1)<=Ebreak; %若参数收敛满足要求,终止计算endend%分离参数a1=c(1,:);a2=c(2,:);b1=c(3,:);b2=c(4,:);ea1=e(1,:);ea2=e(2,:);eb1=e(3,:);eb2=e(4,:);figure(1); %画第1个图形i=1:254; %横坐标从1到254plot(i,a1,'k',i,a2,'b',i,b1,'r',i,b2,'g') %画出a1,a2,b1,b2的各次辨识结果legend('a1','a2','b1','b2');xlabel('k');ylabel('辨识参数'); %标注纵轴变量title('最小二乘各次递推参数估计值') %图形标题a1=c(1,254)a2=c(2,254)b1=c(3,254)b2=c(4,254)figure(2); %画第2个图形i=1:254; %横坐标从1到254plot(i,ea1,'k',i,ea2,'b',i,eb1,'r',i,eb2,'g'); %画出a1,a2,b1,b2的各次辨识结果的收敛情况legend('ea1','ea2','eb1','eb2');xlabel('k') %标注横轴变量ylabel('参数误差') %标注纵轴变量title('参数的误差收敛情况') %图形标题ea1=e(1,254)ea2=e(2,254)eb1=e(3,254)eb2=e(4,254)最小二乘递推辨识结果:a1 = -0.6418 a2 =-0.3451 b1 = 0.0015 b2 =-0.0014 ea1 =-1.4483e-004 ea2 =3.5589e-004eb1 = -0.0020 eb2 = -0.0021二、似然法辨识v=randn(254,1); %产生正态分布随机数V=0; %计算噪声方差for i=1:254V=V+v(i)*v(i);endV1=V/254;N=xlsread('shuju.xls') ; %取数据作为输入输出矩阵A=N([1 : 254],[1,2,3]);x=A(:,2);y=A(:,3);u=x';z=y';%得到输入输出数据o1=0.001*ones(6,1);p0=eye(6,6); %赋初值zf(1)=0.1;zf(2)=0.1;vf(2)=0.1;vf(1)=0.1;uf(2)=0.1;uf(1)=0.1;%迭代计算参数值和误差值for k=3:254h=[-z(k-1);-z(k-2);u(k-1);u(k-2);v(k-1);v(k-2)];hf=h;K=p0*hf*inv(hf'*p0*hf+1);p=[eye(6,6)-K*hf']*p0;v(k)=z(k)-h'*o1;o=o1+K*v(k) ;p0=p;o1=o;a1(k)=o(1);a2(k)=o(2);b1(k)=o(3);b2(k)=o(4);d1(k)=o(5);d2(k)=o(6);e1(k)=abs(a1(k)+1.2);e2(k)=abs(a2(k)-0.6);e3(k)=abs(b1(k)-1.0);e4(k)=abs(b2(k)-0.5);e5(k)=abs(d1(k)+1.0);e6(k)=abs(d2(k)-0.2);zf(k)=z(k)-d1(k)*zf(k-1)-d2(k)*zf(k-2);uf(k)=u(k)-d1(k)*uf(k-1)-d2(k)*uf(k-2);vf(k)=v(k)-d1(k)*vf(k-1)-d2(k)*vf(k-2);hf=[-zf(k-1);-zf(k-2);uf(k-1);uf(k-2);vf(k-1);vf(k-2)];end%若取去‘’可以在程序运行中观测到参数%绘图figure(1)k=1:254;plot(k,a1,'k:',k,a2,'b',k,b1,'r',k,b2,'m:',k,d1,'g',k,d2,'k');xlabel('k')ylabel('参数辨识')legend('a1=-1.2,','a2=0.6','b1=1.0','b2=0.5','d1=-1.0','d2=0.2'); %图标炷title('递推极大使然 RML');figure(2)k=1:254;plot(k,e1,'k',k,e2,'b',k,e3,'r',k,e4,'m',k,e5,'g',k,e6,'k');xlabel('k') ;ylabel('误差过度过程') ; title('误差曲线')三、增广法辨识z=xlsread('shuju','B4:B257');u=xlsread('shuju','C4:C257');v=randn(1,254);c0=[0.001 0.001 0.001 0.001 0.001 0.001 0.001]'; %直接给出被辨识参数的初始值,即一个充分小的实向量p0=10^6*eye(7,7); %直接给出初始状态P0,即一个充分大的实数单位矩阵E=0.00000000005; %相对误差E=0.000000005c=[c0,zeros(7,253)]; %被辨识参数矩阵的初始值及大小e=zeros(7,254); %相对误差的初始值及大小for k=3:254; %开始求Kh1=[-z(k-1),-z(k-2),u(k-1),u(k-2),v(k),v(k-1),v(k-2)]'; %为求K(k)作准备x=h1'*p0*h1+1;k1=p0*h1*(inv(x)); %Kd1=z(k)-h1'*c0; c1=c0+k1*d1; %辨识参数 ce1=c1-c0; e2=e1./c0; %求参数误差的相对变化e(:,k)=e2;c0=c1; %给下一次用c(:,k)=c1; %把递推出的辨识参数 c 的列向量加入辨识参数矩阵p1=p0-k1*k1'*[h1'*p0*h1+1]; %find p(k)p0=p1; %给下次用if e<=Ebreak; %若收敛情况满足要求,终止计算end%判断结束end%循环结束%分离变量a1=c(1,:); a2=c(2,:); b1=c(3,:); b2=c(4,:); %分离出a1、 a2、 b1、 b2d1=c(5,:); d2=c(6,:); d3=c(7,:); %分离出d1、 d2、 d3ea1=e(1,:); ea2=e(2,:); eb1=e(3,:); eb2=e(4,:); %分离出a1、 a2、 b1、 b2的收敛情况ed1=e(5,:); ed2=e(6,:); ed3=e(7,:); %分离出d1 、d2 、d3的收敛情况figure(1); %画第二个图形i=1:254;plot(i,a1,'r',i,a2,'r:',i,b1,'b',i,b2,'b:',i,d1,'g',i,d2,'g:',i,d3,'g +') %画出各个被辨识参数title('Parameter Identification with Recursive Least Squares Method') %标题figure(2);i=1:254; %画出第三个图形plot(i,ea1,'r',i,ea2,'r:',i,eb1,'b',i,eb2,'b:',i,ed1,'g',i,ed2,'g:',i ,ed2,'r+') %画出各个参数收敛情况title('Identification Precision') %标题figure(3);subplot(4,1,1); %画出第四个图形,第一个子图i=1:254;plot(i,zs(i),'r') %画出被辨识系统在没有噪声情况下的实际输出响应subplot(4,1,2); i=1:254;plot(i,z(i),'g') %第二个子图,画出被辨识系统的采样输出响应subplot(4,1,3); i=1:254;plot(i,zm(i),'b') %第三个子图,画出模型含有噪声的输出响应subplot(4,1,4); i=1:254;plot(i,zs(i),'b') %第四个子图,画出模型去除噪声后的输出响应。

如何在MATLAB中进行系统辨识

如何在MATLAB中进行系统辨识

如何在MATLAB中进行系统辨识引言:在系统辨识中,我们通常会使用数据来推导出系统的数学模型,进而对系统进行建模和预测。

MATLAB作为一种强大的数值计算和分析工具,提供了丰富的系统辨识工具包,能够帮助我们实现这一目标。

本文将介绍如何使用MATLAB进行系统辨识,包括数据预处理、模型选择、参数估计等内容。

一、数据预处理系统辨识的第一步是数据预处理,即对采集到的数据进行处理和清洗,以提高后续建模和分析的准确性。

常见的数据预处理技术包括去除异常值、平滑数据、采样率调整等。

在MATLAB中,我们可以使用一系列内置的函数和工具箱来完成这些任务。

例如,使用"findoutliers"函数可以检测并去除异常值,使用"smoothdata"函数可以平滑数据,使用"resample"函数可以进行采样率调整等。

二、模型选择在系统辨识中,我们需要选择适合的数学模型来描述系统的行为。

常用的系统模型包括线性模型、非线性模型、时变模型等。

在MATLAB中,我们可以使用"sysident"工具箱中的函数来进行模型选择。

其中最常用的方法是ARX模型和ARMAX模型。

ARX模型适用于仅包含输入和输出的线性系统辨识,而ARMAX 模型适用于包含自回归项和移动平均项的线性系统辨识。

根据实际情况和需求,选择适合的模型进行建模。

三、参数估计参数估计是系统辨识中的关键步骤,其目的是通过观测数据来估计系统模型中的参数。

在MATLAB中,我们可以使用"arx"和"armax"函数进行参数估计。

这些函数将原始观测数据作为输入,并根据选择的模型类型进行系统参数的估计。

具体的参数估计方法包括最小二乘法、极大似然法、递推最小二乘法等。

根据系统模型和实际需求,选择合适的参数估计方法进行系统参数的估计。

四、模型验证模型验证是系统辨识中的重要环节,其目的是验证建立的系统模型是否能够准确地描述观测数据。

(完整版)系统全参数辨识matlab实现

(完整版)系统全参数辨识matlab实现

实用标准文案4. 设某物理量Y 与X 满足关系式Y=aX 2+bX+c ,实验获得一批数据如下表,试辨识模型参数a ,b 和c 。

(50分)报告要求:要有问题描述、参数估计原理、程序流程图、程序清单,最后给出结果及分析。

(1)问题描述:由题意知,这是一个已知模型为Y=aX 2+bX+c ,给出了10组实验输入输出数据,要求对模型参数a ,b ,c 进行辨识。

这里对该模型参数辨识采用递推最小二乘法。

(2)参数估计原理对该模型参数辨识采用递推最小二乘法,即RLS ( recurisive least square ),它是一种能够对模型参数进行在线实时估计的辨识方法。

其基本思想可以概括为:新的估计值)(ˆk θ=旧的估计值)1(ˆ-k θ+修正项 下面将批处理最小二乘法改写为递推形式即递推最小二乘参数估计的计算方法。

批处理最小二乘估计θˆ为Y T TΦΦΦ=-1)(ˆθ,设k 时刻的批处理最小二乘估计为:k T k k T k Y ΦΦΦ=-1)(ˆθ令111)]1()()1([)()(----+-=ΦΦ=k k k P k P T kT k ϕϕ K 时刻的最小二乘估计可以表示为kT k Y k P k Φ=)()(ˆθ=)]()()[(11k y k Y k P k T k ϕ+Φ-- =)]1(ˆ)()()[()1(ˆ--+-k k k y k K kT θϕθ ;式中)()()(k k P k K ϕ=,因为要推导出P(k)和K(k)的递推方程,因此这里介绍一下矩阵求逆引理:设A 、(A+BC )和(I +B CA 1-)均为非奇异方阵,则111111)()(------+-=+CA B CA I B A A BC A 通过运用矩(3)程序流程图(如右图1所示)递推最小二乘法(RLS)步骤如下:已知:n、b n和d。

aStep 1 :设置初值)0(ˆθ和P(0),输入初始数据;Step2 :采样当前输出y(k)、和输入u(k)Step3 :利用上面式①②③计算)(k K、)(ˆkθ和)(k P;Step4 :k→k+1,返回step2,继续循环。

MATLAB系统辨识工具箱学习详细教程

MATLAB系统辨识工具箱学习详细教程

MATLAB系统辨识工具箱学习详细教程MATLAB系统辨识工具箱是MATLAB软件中的一个工具箱,用于进行系统辨识和模型建模的分析。

该工具箱提供了多种辨识算法和工具,可以对线性和非线性系统进行辨识,并生成对应的数学模型。

下面将为您详细介绍MATLAB系统辨识工具箱的学习过程。

首先,在使用MATLAB系统辨识工具箱前,需要安装MATLAB软件并具备一定的MATLAB编程基础。

如果您还没有安装MATLAB或者对MATLAB不够熟悉,建议您先进行相关的学习和了解。

1.学习基本概念:在开始学习MATLAB系统辨识工具箱之前,需要了解一些基本概念,例如系统辨识、模型建模、参数估计等。

可以通过阅读相关的系统辨识的教材或者进行在线,对相关概念有一个基本的了解。

2.熟悉MATLAB系统辨识工具箱界面:3.数据导入:在进行系统辨识之前,首先需要准备好系统辨识所需的数据。

数据可以是实验数据或者仿真数据,可以是时域数据或者频域数据。

在系统辨识工具箱界面的“数据导入”区域,可以将数据导入到MATLAB中进行后续的辨识分析。

4.选择模型类型:在进行系统辨识之前,需要选择适合的数学模型类型。

MATLAB系统辨识工具箱提供了多种常见的模型类型,包括ARX模型、ARMAX模型、OE模型、TFE模型等。

选择合适的模型类型对辨识结果的精度和准确性有重要的影响。

5.选择辨识算法:在选择模型类型后,需要选择合适的辨识算法进行参数估计和模型建模。

MATLAB系统辨识工具箱提供了多种常用的辨识算法,例如最小二乘法、极大似然法、递推最小二乘法等。

选择合适的辨识算法也对辨识结果的精度和准确性有重要的影响。

6.进行系统辨识:在选择了合适的模型类型和辨识算法后,可以在系统辨识工具箱界面中点击“辨识”按钮,开始进行系统辨识分析。

系统辨识工具箱会根据所选的模型类型和辨识算法,对输入的数据进行参数估计和模型建模,并生成相应的辨识结果。

7.结果分析和评估:在系统辨识完成后,可以在系统辨识工具箱界面中查看辨识结果和模型质量评估。

Matlab系统辨识.doc

Matlab系统辨识.doc

Matlab系统辨识(系统识别工具)系统识别工具箱早就听说过,matlab是广泛而深刻的,并且有很大的权力。

因此,我相信一定有更简单、更直观、更强大的工具来完成这一儿科技巧。

在查看数据后,我做了一个小实验,并在simulink中验证了该方法。

这种方法的主要原则是:确定系统的输入输出数据后(两列向量为N×1形式,如果为1×N,将提示错误!之后,设计了某种识别原则(比如说,二阶?三阶?无论传递函数是零极点形式还是带阻尼形式,等等。

),然后交给强大的matlab,得到识别结果。

一步一步来,plz!步骤1.建立模型以获得系统的输入和输出数据。

图1中系统的输入是一个阶跃信号,由Scope1监控并输出到工作区(不允许这个阶跃),采样周期为0.1s,以获得输入变量u(101×1矩阵);我在系统的阶跃响应上叠加了一个白噪声,当然我不能添加任何噪声。

添加噪声是为了期望对实际情况进行更真实的模拟。

如图2和图2所示,在Scope2中也监控白噪声参数设置,并且结果也输出到工作空间以获得响应数据y(也是101×1矩阵)步长2.进入识别工具箱设置识别规则。

在命令窗口中直接输入ident,输入回车,然后输入识别工具箱。

图3 .图3 .单击导入下拉菜单选择时域数据。

参见图4。

图4 .在输入图5中的红色圆圈区域之前获得的系统输入和输出数据。

图5在下面图6的绿色圆圈中输入一些数据信息。

因为在前一个模型中,我将跳转点放在0,并将0设置在这里。

如果先前模型的模拟是1,那么这里也应该是1。

采样时间为0.1s,根据实际情况统一设置。

图6中的设置完成后,点击导入,界面变为图7。

图7。

如果在图8中选中红色方框选项,我们刚刚设置的输入和输出数据曲线将会出现。

如图9所示,其他检查选项是频域分析和显示,因此暂时不需要。

图8和图9显示了输入和输出是否与我们的实际设置一致。

如果是这样,我们离成功不远了。

如果我们发现任何异常,我们将再次检查,直到我们可以确保数据导入没有问题。

系统辨识的Matlab实现方法(手把手)

系统辨识的Matlab实现方法(手把手)

最近在做一个项目的方案设计,应各位老总的要求,只有系统框图和器件选型可不行,为了凸显方案设计的高大上,必须上理论分析,炫一下“技术富”,至于具体有多大实际指导意义,那就不得而知了!本人也是网上一顿百度,再加几日探索,现在对用matlab 实现系统辨识有了一些初步的浅薄的经验,在此略做一小节。

必须要指出的是,本文研究对象是经典控制论理最简单最常用的线性时不变的siso 系统,而且是2阶的哦,也就是具有如下形式的传递函数:121)(22++=Ts s T s G ξ 本文要做的就是,对于有这样传递函数的一个系统,要辨识得到其中的未知数T , ξ!!这可是控制系统设计分析的基础哦,没有系统模型,啥理论、算法都是白扯,在实际工程中非常重要哦! 经过总结研究,在得到系统阶跃响应实验数据之后(当然如果是其他响应,也有办法可以辨识,在此还是只讨论最简单的阶跃响应实验曲线,谁让你我是菜鸟呢),利用matlab 至少可以有两种方法实现实现(目前我只会两种,呵呵)!一、函数法二、GUI 系统辨识工具箱下面分别作详细介绍!一、 函数法看官别着急,先来做一段分析(请看下面两排红*之间部分),这段分析是网上找来的,看看活跃一下脑细胞吧,如果不研读一下,对于下面matlab 程序,恐怕真的就是一头雾水咯!*******************************************************************************G(s)可以分解为:))((1)(212ωω++=s s T s G其中, [][]11112221--=-+=ξξωξξωTT1ω、2ω都是实数且均大于零。

则有:211ωω=T ,21212ωωωωξ+=传递函数进一步化为:))(()(2121ωωωω++=s s s G 因此,辨识传递函数就转化为求解1ω、2ω。

当输入为单位阶跃函数时,对上式进行拉普拉斯反变换,得系统时域下的单位阶跃响应为:tteet y 212111221)(ωωωωωωωω---+--=即 tteet y 21211122)(1ωωωωωωωω-----=-令1ω=2ωk )1(>k,得tk t ek e k k t y 22111)(1ωω-----=-⎥⎦⎤⎢⎣⎡--=---t k t e k e k k 2)1(2111ωω 对上式两边取以e 为底的对数得[]⎥⎦⎤⎢⎣⎡-+--=---t k e k t k k t y 2)1(211ln 1ln )(1ln ωω 当∞→t 时,⎥⎦⎤⎢⎣⎡---t k e k 2)1(11ln ω0→,则上式化简为[]t k k t y 21ln )(1ln ω--=-该式的形式满足直线方程b at t y +=)(*其中,)(*t y =[])(1ln t y -,1ln ,2-=-=k kb a ω)1(>k通过最小二乘算法实现直线的拟合,得到a ,b 的值,即可得到1ω、2ω的值,进而可得系统的传递函数。

系统辨识的MATLAB实现方法

系统辨识的MATLAB实现方法

系统辨识的MATLAB实现方法
一、引言
系统辨识是一种技术,可用于建立输入和输出变量之间的关系。

它可
以从实际测量数据中提取出过去的运行模式,并以表示此模式的模型形式
表达出来。

由于这种技术可以有效地收集数据,因此它在科学研究和工业
应用中越来越受到重视。

MATLAB是一种强大的工具,用于数据处理,模型建构和检验,其中
包括系统辨识。

本文探讨了用MATLAB来实现系统辨识的方法,详细介绍
了手把手的MATLAB系统辨识实现过程。

二、步骤
1、数据准备
2、设计系统观测器
系统观测器是一种用于描述系统行为的数学模型。

为了确定系统观测
器的形式,需要考虑输入和输出变量的物理本质以及相互作用的机制。

MATLAB中有一系列用于建立系统观测器的函数,例如ss,tf,zpk,fotf,nlarx等。

3、设计系统辨识器
系统辨识器是用来构建系统观测器的工具,确定系统的参数。

系统辩识实验报告

系统辩识实验报告

一、实验目的1. 理解系统辨识的基本概念和原理。

2. 掌握递推最小二乘算法在系统辨识中的应用。

3. 通过实验,验证算法的有效性,并分析参数估计误差。

二、实验原理系统辨识是利用系统输入输出数据,对系统模型进行估计和识别的过程。

在本实验中,我们采用递推最小二乘算法对系统进行辨识。

递推最小二乘算法是一种参数估计方法,其基本思想是利用当前观测值对系统参数进行修正,使参数估计值与实际值之间的误差最小。

递推最小二乘算法具有计算简单、收敛速度快等优点。

三、实验设备1. 电脑一台,装有MATLAB软件。

2. 系统辨识实验模块。

四、实验步骤1. 打开MATLAB软件,运行系统辨识实验模块。

2. 在模块中输入已知的系数a1、a2、b1、b2。

3. 生成输入序列u(t)和噪声序列v(t)。

4. 将输入序列u(t)和噪声序列v(t)加入系统,产生输出序列y(t)。

5. 利用递推最小二乘算法对系统参数进行辨识。

6. 将得到的参数估计值代入公式计算参数估计误差。

7. 仿真出参数估计误差随时间的变化曲线。

五、实验结果与分析1. 实验结果根据实验步骤,我们得到了参数估计值和参数估计误差随时间的变化曲线。

2. 结果分析(1)参数估计值:通过递推最小二乘算法,我们得到了系统参数的估计值。

这些估计值与实际参数存在一定的误差,这是由于噪声和系统模型的不确定性所导致的。

(2)参数估计误差:从参数估计误差随时间的变化曲线可以看出,递推最小二乘算法在短时间内就能使参数估计误差达到较低水平。

这说明递推最小二乘算法具有较好的收敛性能。

(3)参数估计误差曲线:在实验过程中,我们发现参数估计误差曲线在初期变化较快,随后逐渐趋于平稳。

这表明系统辨识过程在初期具有较高的灵敏度,但随着时间的推移,参数估计误差逐渐减小,系统辨识过程逐渐稳定。

六、实验结论1. 递推最小二乘算法在系统辨识中具有较好的收敛性能,能够快速、准确地估计系统参数。

2. 实验结果表明,递推最小二乘算法能够有效减小参数估计误差,提高系统辨识精度。

系统辨识地Matlab实现方法(手把手)

系统辨识地Matlab实现方法(手把手)

最近在做一个项目的方案设计,应各位老总的要求,只有系统框图和器件选型可不行,为了凸显方案设计的高大上,必须上理论分析,炫一下“技术富”,至于具体有多大实际指导意义,那就不得而知了!本人也是网上一顿百度,再加几日探索,现在对用matlab 实现系统辨识有了一些初步的浅薄的经验,在此略做一小节。

必须要指出的是,本文研究对象是经典控制论理最简单最常用的线性时不变的siso 系统,而且是2阶的哦,也就是具有如下形式的传递函数:121)(22++=Ts s T s G ξ 本文要做的就是,对于有这样传递函数的一个系统,要辨识得到其中的未知数T , ξ!!这可是控制系统设计分析的基础哦,没有系统模型,啥理论、算法都是白扯,在实际工程中非常重要哦! 经过总结研究,在得到系统阶跃响应实验数据之后(当然如果是其他响应,也有办法可以辨识,在此还是只讨论最简单的阶跃响应实验曲线,谁让你我是菜鸟呢),利用matlab 至少可以有两种方法实现实现(目前我只会两种,呵呵)!一、函数法二、GUI 系统辨识工具箱下面分别作详细介绍!一、 函数法看官别着急,先来做一段分析(请看下面两排红*之间部分),这段分析是网上找来的,看看活跃一下脑细胞吧,如果不研读一下,对于下面matlab 程序,恐怕真的就是一头雾水咯!*******************************************************************************G(s)可以分解为:))((1)(212ωω++=s s T s G其中, [][]11112221--=-+=ξξωξξωTT1ω、2ω都是实数且均大于零。

则有:211ωω=T ,21212ωωωωξ+=传递函数进一步化为:))(()(2121ωωωω++=s s s G 因此,辨识传递函数就转化为求解1ω、2ω。

当输入为单位阶跃函数时,对上式进行拉普拉斯反变换,得系统时域下的单位阶跃响应为:tteet y 212111221)(ωωωωωωωω---+--=即 tteet y 21211122)(1ωωωωωωωω-----=-令1ω=2ωk )1(>k,得tk t ek e k k t y 22111)(1ωω-----=-⎥⎦⎤⎢⎣⎡--=---t k t e k e k k 2)1(2111ωω 对上式两边取以e 为底的对数得[]⎥⎦⎤⎢⎣⎡-+--=---t k e k t k k t y 2)1(211ln 1ln )(1ln ωω 当∞→t 时,⎥⎦⎤⎢⎣⎡---t k e k 2)1(11ln ω0→,则上式化简为[]t k k t y 21ln )(1ln ω--=-该式的形式满足直线方程b at t y +=)(*其中,)(*t y =[])(1ln t y -,1ln ,2-=-=k kb a ω)1(>k通过最小二乘算法实现直线的拟合,得到a ,b 的值,即可得到1ω、2ω的值,进而可得系统的传递函数。

系统识别 matlab第1章

系统识别 matlab第1章

第1章控制系统仿真的基本概念计算机的出现和发展对现代科学技术以及人们生活的几乎一切领域产生了极其深远的影响。

尤其是数值计算、数据处理、通信、数理统计、人工智能以及自动控制等方面已离不开计算机的应用。

在控制系统方面,计算机除了能够直接进行在线实时控制和构成控制网络之外,而且对于控制系统的分析、设计、综合和仿真也起着越来越大的作用,成为科学技术和工程技术人员应用计算机进行控制系统分析和设计的一项专门技术。

1.1 发展历史对实际系统进行分析、综合、设计和预测研究时,需要得出系统的动态特性,这时控制系统尚未完成,需应用控制系统计算机仿真技术对系统进行预先研究;或者出于经济性和安全性的考虑,或者在实际控制系统上作实验时间长,成本高,也需用控制系统仿真技术。

控制系统仿真就是对控制系统模型的实验,它的应用已有很长的历史,大致经历了5个发展阶段:1、50年代以前主要是物理仿真,用物理模型仿真实际系统。

例如:用R、L、C震荡电路模拟机械震荡系统;用运算放大器组成电路模拟被控对象的动态模型,再用运算放大器电路组成控制器构成闭环反馈控制系统仿真实际控制系统;又如利用许多小容量的同步机,感应电动机与直流电机组成一个系统作为电力网的模型,研究电力系统的稳定性。

2、50年代是模拟计算机和数字机仿真刚刚开始发展。

3、60~70年代数字与模拟混合仿真得到了快速发展,尤其是数字仿真发展迅速,出现了很多的数字仿真语言,如DSL、CSSL、DARE-P等,使数字仿真技术得到了普及。

混合仿真系统有两种基本结构:一种是在模拟机基础上增加一些数字逻辑功能——混合模拟机;另一种是由模拟机、数字计算机及其接口电路组成——数字-模拟混合计算机。

模拟机计算速度快,但精度低,数字计算机计算精度高,但相对模拟机而言计算速度较慢。

混合仿真兼顾了两者的优点。

4、80年代微计算机技术的迅速发展,采用微机阵列、基于并行处理原理的全数字仿真系统有取代混合仿真系统的趋势5、90年代以后,随着计算机运算速度和存储容量的极大提高,以及在80年代末90年代初适于控制系统仿真的MATLAB的出现,使得在控制系统仿真领域,数字仿真技术已占统治地位。

matlab系统辨识

matlab系统辨识

(System Identification Tool)系统辨识工具箱早听说matlab博大精深,神通广大了,于是乎我确定肯定有更简单、直观、强大的工具来完成这小儿科把戏。

查资料琢磨之后,我做了个小实验,在simulink里验证了该种方法。

该方法的大原则是:在确定了系统的输入输出数据(两个列向量N×1形式,如果是1×N,会提示出错!)之后,设计好一定的辨识原则(比如说是2阶?3阶?,传递函数是零极点形式,还是带阻尼形式,等等),然后就交给强大的matlab,得到辨识结果。

Step by step,plz!Step1、建立模型获取系统输入输出数据图1图1系统的输入是阶跃信号,用Scope1监视,并输出到workspace (这步不会的自己百度哦),采样周期是0.1s,得到输入变量u(101×1的矩阵);本人在系统的阶跃响应上叠加了一白噪声,当然也可以不加噪声,加了噪声就是期望更真实的模拟实际情况,白噪声参数设置见图2图2同样在Scope2监视,也将结果输出到workspace,得到响应数据y(同样也是101×1的矩阵)Step 2、进入辨识工具箱&设置辨识规则直接在command window 输入 ident,回车,进入辨识工具箱图3图3点击import下拉菜单,选时域数据time domain data,见图4图4在下图5红色圈区域输入之前得到的系统输入和输出数据,u和y图5在下图6绿色圈内输入数据的一些信息,因为之前模型中,阶跃起点我是放在0s处的,这里也设置0,如果前面模型仿真是1s,这里应该也是1s;采样时间是0.1s,根据实际情况设置统一哦图6设置完之后,点击import此时界面变成图7图7如果在下图8勾选红框这个选项,就会出现我们刚才设定输入输出数据的曲线,如图9所示,其他勾选项是频域的分析和显示,暂不用它。

图8图9看看与我们实际设置的输入输出是否符合,如果符合,那么我们离成功就不远咯,如果发现异常,那再好好检查一遍,直到确保数据导入没有问题!下面两段红色斜杠之间的内容,对于本实验,可以直接跳过,看一下对后续复杂模型的处理有好处哦,也算全面熟悉一下工具。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Matlab系统辨识尝试之详细过程1
前面介绍了Matlab系统辨识工具箱的一些用法,这里拿一个直观的例子来尝试工具箱的具体用法。

比较长,给个简单目录吧:
1.辨识的准备
2.辨识数据结构的构造
3.GUI辨识
4.辨识效果
5.对固有频率的辨识
6.结构化辨识
7.灰箱辨识
8.加入kalman滤波的灰箱辨识
1.辨识的准备
在辨识前,首先要根据自己辨识的情况,确定要辨识的状态空间模型的一些特点,如连续还是离散的;有无直通
分量(即从输入直通到输出的分量);输入延迟;初始状态等。

了解了这些情况就可以更快速的配置辨识时的一些设
置选项。

2.辨识数据结构的构造
使用原始数据构造iddata结构:
data=iddata(y,u,Ts);
这里以一个弹簧质量系统的仿真为例
代码如下,其中用到了函数MDOFSolve,这在之前的博文介绍过(/?p=183),拿来用即可。

如果发现运行有错误,可以将MDOFSolve函数开头的一句
omega2=real(eval(omega2));
注释掉。

%弹簧质量系统建模
clc
clear
close all
m=200;
k=980*1000;
c=1.5*1000;
m1=1*m;
m2=1.5*m;
k1=1*k;
k2=2*k;
k3=k1;
%%由振动力学知识求固有频率
M=[m10;0m2];
K=[k1+k2-k2;-k2k3+k2];
[omega,phi,phin]=MDOFSolve(M,K);
fprintf('固有频率:%fHz\n',subs(omega/2/pi));
%%转化到状态空间
innum=2;
outnum=2;
statenum=4;
A=[0100;
-(k1+k2)/m10k2/m10;
0001;
k2/m20-(k3+k2)/m20];
B=[00;
1/m10;
00;
01/m2];
C=[1000;
0010];
D=zeros(outnum,innum);
K=zeros(statenum,innum);
mcon=idss(A,B,C,D,K,'Ts',0);%连续时间模型
figure
impulse(mcon)
%%信号仿真,构造数据供辨识
n=511;%输入信号长度
Ts=0.001;
t=0:Ts:(n-1)*Ts;
u1=idinput(n,'prbs');%输入1为伪随机信号
u2=zeros(n,1);%输入2为空
u=[u1u2];
simdat=iddata([],u,Ts);%形成输入数据对象
e=randn(n,2)*1e-7;
simopt=simOptions('AddNoise',true,'NoiseData',e);%添加噪声yn=sim(mcon,simdat,simopt);%加噪声仿真
y=sim(mcon,simdat);%无噪声仿真
figure
for i=1:outnum
subplot(outnum,1,i)
plot(t,y.OutputData(:,i))
hold on
plot(t,yn.OutputData(:,i),'r')
axis tight
title(sprintf('输出%d',i))
legend({'无噪声仿真','含噪声仿真'})
end
%保存输入输出数据,供后续辨识
data=iddata(y.OutputData,simdat.InputData,Ts);
datan=iddata(yn.OutputData,simdat.InputData,Ts);
运行后,变量data中保存了无噪声的系统仿真输入输出数据,datan中为含噪声的仿真数据。

产生的图形如下固有频率:9.915822Hz
固有频率:22.853200Hz
3.GUI辨识
辨识可以从GUI开始,GUI的辨识对应的代码可以导出,方便以后更便捷的调整参数。

3.1输入ident打开系统辨识工具箱
3.2数据导入到GUI,如下
3.3原始数据预处理,主要是去趋势detrend:
3.4开始状态空间辨识
3.5先做阶次选择,红框标记的为建议设置,其他设置根据自己的模型特性做配置
点击Estimate做阶次估计
可以看到4阶后落差明显,所以4阶是最好的阶次,插入此辨识模型,查看辨识结果如下,可以看到辨识结果很好(因为原始数据中没加入噪声)。

在辨识主窗口双击辨识结果,可以看到辨识结果,点击Present可以将结果显示出来,Diary and Notes里有辨识的相关代码,可以拿来进一步做修改。

上面有个N4Horizon参数设置,它表示N4SID算法中使用的前向和后向预测界,意义如下:
它是一个包含3个元素的向量[r sy su],其中r是最大前向预测界,表示使用多达r步的前向预测器;sy、su表示预测器使用过去输出和过去输入的个数。

这些值的设置对辨识结果有实质性的影响,但没有简单的准则指导如何选择它们。

如果指定N2Horizon为一个k*3的矩阵,则可以测试不同参数的效果,结果会给出最佳预测模型。

如果设置成一个标量,则表示3个值相同。

如果自己不知如何设置这些参数,可以让N2Horizon='auto',这样软件会根据AIC准则选择sy和su的值。

'auto'也是默认值。

3.6辨识的改善
后面可以尝试调整参数改善辨识效果,如使用PEM迭代辨识方法、改变辨识的状态方程形式等。

下面总结一些常用的改善辨识效果的方法:
3.6.1PEM或N4SID方法的选择
N4SID为子空间方法,可以先用来估计得到一个初始模型;PEM为最小化预测误差迭代方法(得到最大似然估计),对应的函数为ssest,可以对初始估计进行改善。

PEM会默认先运行N4SID得到初始估计矩阵再对初始估计矩阵进行迭代优化,所以它运行时间较长。

N4SID运行比SSEST快,但精度和鲁棒性均不如SSEST,需要指定额外的难于调整的参数。

3.6.2Focus的选择
这在之前博文介绍过,这里简单提一下:
Prediction:使用噪声模型H的逆来衡量不同频率范围内拟合的相对重要性。

这与最小化一步前向预测相对应,适合于在一段短时间间隔的拟合。

适合于输出预测应用。

Simulation:使用输入的频谱来衡量不同频率范围内拟合的相对重要性,而不使用噪声模型来衡量。

适合于输出仿真应用。

Stability:适合于估计最稳定的模型。

Filter:通过弹出Estimation Focus对话框来指定一个用户滤波器。

干扰模型由估计数据决定。

3.6.3Initial state
指定对待初始状态的方法。

这个在使用PEM方法辨识时作为迭代的初始状态使用。

如果辨识得到不精确的解,可以尝试指定特定的方法来处理初始状态而不是选择自动。

Auto:基于估计的数据自动选择Zero、Estimate或Backcast。

Zero:如果初始状态对估计误差的效果微不足道,可以设置为0来最优化方法的效果。

Estimate:把初始状态作为一个未知的参数向量从数据中辨识。

Backcast:用后向滤波方法(最小二乘拟合)估计初始状态。

3.6.4K的辨识
当不确定如何配置K时,可以先不辨识它,只辨识系统矩阵。

在得到系统模型后,再使用ssest配置K为自由参数辨识改善模型。


init_sys=ssest(data,n,'DisturbanceModel','none');
init_sys.Structure.k.Free=true;
sys=ssest(data,init_sys);
init_sys为无噪声的动态模型。

4.辨识效果
上面讲的过程中是对无噪声数据处理的,效果很好,这里对各辨识算法的效果做对比。

对无噪声数据,n4sid和ssest辨识的效果如下
可以看到对无噪声数据两种算法的效果都非常好,都能达到准确的辨识。

对含噪声数据,n4sid和ssest辨识的效果如下
误差曲线图如下
可以看到n4sid算法对含噪声的数据辨识相对较差,而ssest辨识效果很好,基本把原系统辨识出来了。

相关文档
最新文档