系统辨识及其matlab仿真(一些噪声和辨识算法)

合集下载

系统辨识的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中进行系统辨识的技术方法主要有参数估计法和非参数估计法两种。

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.系统辨识的基本理论系统辨识是根据系统的输入输出的时间函数来确定描述系统行为的数学模型,是现代控制理论中的一个分支。

对系统进行分析的主要问题是根据输入时间函数和系统的特性来确定输出信号。

它包括确定系统数学模型结构和估计其参数的方法。

系统辨识的流程如图1所示。

图1 系统辨识过程流程图2.模型参数辨识的方法系统辨识包括模型阶次辨识和参数辨识。

经典参数辨识的方法主要有他包括脉冲响应法、阶跃响应法、频率响应法、最小二乘法、相关分析法、谱分析法和极大似然法等,其中最小二乘法是最基本和最经典的,也是其他方法基本的思想的来源。

比如辅助变量法。

2.1 最小二乘法辨识考虑如下CAR模型:(1)参数估计的任务是根据可测量的输入和输出,确定如下个参数:对象(1)可以写成如下最小二乘形式:(2)现有L组输入输出观测数据:利用最小二乘法得到系统参数的估计值为:(3)2.2 辅助变量法辨识当为有色噪声时,利用最小二乘法进行参数辨识时往往得不到无偏一致的参数估计量。

在这个时候可以引入变量,然后利用最小二乘法进行辨识就可得到无偏一致的参数估计量。

因此,对于线性或本质线性系统,其过程的模型都可以化成最小二乘形式,考虑如下所示的模型方程:(4)将上式写成最小二乘格式,则得:假定存在一个辅助变量矩阵,维数与H相同,它满足以下极限特性:式中Q是非奇异矩阵。

如果辅助变量满足上述条件,则有:(5)图2 系统仿真图3.建模实例3.1 非参数模型辨识某被控对象的数学模型可以表示为:,式中:;为白噪声,编制MATLAB程序,分别对上述对象进行ARX建模和辅助变量法建模,并比较两种方法得到的脉冲响应。

使用Matlab技术进行系统辨识的基本方法

使用Matlab技术进行系统辨识的基本方法

使用Matlab技术进行系统辨识的基本方法概述:系统辨识是指通过对已知输入输出数据的分析和处理,推断出系统的动态性质和数学模型的过程。

在科学研究、工程设计和控制应用中,系统辨识扮演着重要的角色。

而Matlab作为一种强大的数值计算和数据分析软件,为系统辨识提供了便利且高效的工具。

本文将介绍使用Matlab进行系统辨识的基本方法,并结合实例进行讲解。

一、数据采集与准备在进行系统辨识之前,首先需要采集到对应的输入输出数据。

一般来说,输入信号是已知的,可以通过外部激励或者系统自身的变动来获取;而输出信号则是根据输入信号通过系统响应得到的。

在采集数据时,需要注意数据的质量和采样频率的选择。

二、数据预处理在进行系统辨识之前,数据通常需要进行一些预处理,以去除噪声、平滑数据和调整时间序列等。

这可以通过Matlab中的数据处理函数和滤波器实现。

例如,可以使用高斯滤波器对数据进行平滑处理,或者使用降噪算法去除不必要的噪声。

三、参数估计参数估计是系统辨识的核心步骤之一,它通过对已知数据进行分析和处理,推断出系统的数学模型和参数。

在Matlab中,有多种方法和工具可供选择,如最小二乘法、最大似然法、系统辨识工具箱等。

这些工具可以根据不同的模型和数据类型灵活选择,并提供相应的算法和函数。

四、模型验证与优化根据估计得到的系统模型和参数,可以使用Matlab进行模型验证和优化。

模型验证是指将估计得到的模型与真实系统进行对比,检验其拟合程度和预测能力。

如果模型的拟合程度较差,则需要对参数进行调整和优化,以提高模型的准确性和稳定性。

五、模型预测与应用在系统辨识完成之后,可以使用得到的模型进行系统预测和应用。

通过对未知输入信号进行预测,可以得到相应的输出响应,进而实现对系统动态性质的分析和控制。

Matlab提供了丰富的预测和应用函数,例如时域模拟、频域分析、控制系统设计等,可以满足不同应用场景的需求。

六、案例分析为了更好地理解和掌握使用Matlab进行系统辨识的基本方法,下面通过一个简单的案例进行分析。

系统辨识理论及matlab仿真

系统辨识理论及matlab仿真

系统辨识理论及matlab仿真系统辨识是一门评估和改进系统性能的研究领域,它利用外部观测数据对系统进行建模,使用这种模型来识别系统行为以及建议改进措施。

它结合了计算机科学、工程学、统计学和应用数学等多种学科的方法。

系统辨识的方法可以用于分析机器人系统、有限元素模型、分散系统和非线性系统等。

系统辨识理论是现代工程中最重要的技术,它能够有效地分析和模拟系统,以解决重大工程挑战。

系统辨识理论的基础可以回溯到20世纪40年代,当时大量研究的重点在于控制系统的设计与形成。

随着进步,它拓展到多种应用,其中包括一般系统建模和优化,以及系统健康监测,智能控制系统,复杂过程建模等等。

Matlab是一种基于矩阵的编程语言,它可以提供强大的工具来支持系统辨识理论的应用。

利用Matlab,可以非常方便地实现模型建模、数据处理、数值求解以及可视化等功能。

此外,它还提供了大量预定义函数,可以极大地简化系统辨识理论中所需要实现的功能,如参数估计、优化、数据验证等。

系统辨识理论和Matlab仿真在工程实践中应用十分广泛,其中最值得一提的有:(1)机器人控制:利用系统辨识理论和Matlab仿真,可以对机器人运动特性进行模型建模,并实现复杂的运动控制;(2)流体动力学:利用系统辨识理论和Matlab仿真,可以对流体动力学进行建模和模拟,以便改善和优化系统性能;(3)模糊控制:利用系统辨识理论和Matlab仿真,可以实现模糊控制系统的建模和仿真,用于实现智能控制等。

系统辨识理论和Matlab仿真的研究成果不仅可以改善系统性能,还可以用于展示系统原理及其实现。

以上是我关于系统辨识理论及Matlab仿真的研究结果及其应用。

经过以上介绍,可以看出系统辨识理论及Matlab仿真在工程应用中有重要的作用,它们为解决复杂工程问题提供了可行的解决方案。

然而,在实际应用过程中,系统辨识理论及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仿真

系统辨识理论及matlab仿真现今,随着电子技术的发展,在计算机上实现系统辨识问题变得日益重要。

因此,本文将介绍系统辨识理论及matlab仿真。

要完成这一任务,首先必须掌握辨识过程中涉及到的有关知识,然后才能对系统进行辨识,找出系统的主要特征,从而判断系统属于何种类型。

为了使读者易于接受并容易理解这些知识,在这里给出了一个简化的系统辨识方法。

对该方法的应用还需读者结合系统的具体情况和现有的设备仪器等来分析。

这里仅举例说明辨识过程。

1。

为了提高系统辨识的效率,一般采用的是分层次的方法,即:( 1)层1:列出所要辨识的所有系统元件。

( 2)层2:给出每个系统元件的状态变量值,其含义就是它的各个可能状态;( 3)层3:指出系统元件某一状态变量值与其他状态变量值之间的关系式。

如果在层2和层3之间加入一个自学习控制过程,则被辨识系统可以简化为两部分:前面提到的第1和第2部分。

2。

列出全部系统元件的状态变量,这里不难看出每一层次的系统元件都有它们各自的可能状态。

同时也可列出最坏情况下所有元件的状态变量,即:。

由状态变量与可能状态,可以很方便地推导出系统的属性值,进而确定该系统属于何种类型。

下面将分别作以介绍。

3。

系统根据可能状态组成的三角形可以看成三种可能的系统结构:( 1)原型:简单系统结构,有3个独立元件,一个是原点,另两个是控制点,相当于节点,且在原点处可以设置任意一个输入,也可以设置任意一个输出。

( 2)星型结构:星型结构可以看成四个独立元件,有一个或多个中心节点,每个节点都可以被设置成输入或输出,且可以沿连线选择任意两个元件做连接,若这样选择,则系统可以看成环状结构。

4。

基于系统结构的辨识方法5。

基于系统状态变量的辨识方法7。

基于状态变量的辨识方法。

把系统的状态空间描述为状态向量空间,把描述系统的状态转移矩阵与其描述的状态向量组成一个多项式,利用矩阵的运算来辨识系统,在大多数情况下都可以得到比较满意的辨识结果。

系统建模与辨识 产生白噪声

系统建模与辨识 产生白噪声

实验一、Matlab/Simulink上机练习一、实验内容1、系统辨识信号的产生:U=idinput(N,type,Band,levels,auxvar);2、用simulink产生Noise,Sine,PRBS,用示波器观测波形;3、产生白噪声信号,计算其平均值,方差(和功率谱);4、选一模型对象,求其阶跃响应,然后再用白噪声作输入,计算某系统输出。

二、实验结果1、idinput函数产生系统辨识常用的典型信号。

格式u = idinput(N,'sine',band,levels,sinedata)指定产生信号的类型,可选类型如下%产生高斯随机信号u1=idinput(500,'rgs')stairs(u1)title('高斯随机信号')ylim([-5 5])%产生二值随机信号u2=idinput(500,'rbs')stairs(u2)title('二值随机信号')ylim([-1.5 1.5])%产生二值伪随机信号u3=idinput(500,'prbs') stairs(u3)title('二值伪随机信号') ylim([-1.5 1.5])m=mean(u3)2、3、% 产生白噪声N=100 a=idinput(100,'prbs') stairs(a)title('白噪声N=100') ylim([-1.5 1.5])m1=mean(a)v1=var(a)结果m1 =-0.1200v1 =0.99564、。

如何在MATLAB中进行系统辨识

如何在MATLAB中进行系统辨识

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

系统辨识及其MATLAB仿真

系统辨识及其MATLAB仿真
必须有一个对辨识所得到模型的验证评价
对辨识所得到模型的验证是系统辨识的重要环节。验证的目的是为了确定该 模型是否是模型集中针对当前观测数据的最佳选择。验证的方法主要有
利用先验知识验证,即根据对系统已有的知识来判断模型是否实用。 利用数据检验。当利用一组数据辨识得到一个模型之后,通常希望用另 一组未参与辨识的数据检验模型的适用性。如果检验结果失败,可能存在的问题 是:辨识所用的一组数据包含的信息不足或所选模型类不合适。另外,也可以用同
图表模型。它以图形或表格的形式来表现过程的特性。如阶跃响应、脉 冲响应和频率响应等,也称非参数模型。
数学模型 。它用数学结构的形式来反 映实际过程的行为特性 。常用的有 代 数 方 程、微 分 方 程、差 分 方 程 和 状 态 方 程 。
经济学上的
产生关系模型(代数方程)
式中, 为产值; 为劳动力; 为资本。 微分方程
入输出模型或状态空间模型、确定性模型或随机模型、线性模型或非线性模型等。
模型类的规定是根据人们对实际系统的了解以及建立模型的目的设定的。规定了
模型类后,再由输入输出数据按结构辨识的方法确定系统的结构参数,并且用参数
辨识的方法辨识系统的参数。
根据定义,我们所建立的模型必须与被测系统在某种意义上是等价的。
第 4 页
设 表示被测系统的一个模型,并且满足
是具有某种属性的模型类。一个系统可看做是从系统允许的输人空间 到输
出空间 的一个算子 相当于对象
属于某个算子类 。系统辨识的问题
是指对于一个给定的算子类 和一个对象
,确定一个模型类 及它的一
个元素
可以认为 是 的一个子集),使得 尽可能的逼近 。在 实
用已知的运动机理和经验确定系统的结构和参数(即确定模型)。

系统辨识与自适应控制matlab仿真_概述说明

系统辨识与自适应控制matlab仿真_概述说明

系统辨识与自适应控制matlab仿真概述说明1. 引言1.1 概述在控制系统中,系统辨识与自适应控制是两个重要的研究领域。

系统辨识是指通过实验数据来推断和建立数学模型,以揭示被控对象的动态特性和行为规律。

而自适应控制则是基于辨识模型预测,并根据外部环境变化及时调整控制策略,以实现对系统稳定性、鲁棒性和性能的优化。

本文将围绕系统辨识与自适应控制在Matlab仿真环境中的应用展开讨论。

首先,我们会介绍系统辨识和自适应控制的基本概念以及其在工程领域中的重要性。

然后,我们会详细介绍常用的系统辨识方法和自适应控制算法,并通过具体示例来说明它们的实际应用价值。

最后,我们会重点讲解如何利用Matlab进行仿真实验,并分享一些Matlab编程与仿真技巧。

1.2 文章结构本文共分为五个主要部分:引言、系统辨识、自适应控制、Matlab仿真以及结论与展望。

在引言部分,我们将介绍文章的背景和目的,以及整体结构安排。

接下来的三个部分将重点讨论系统辨识和自适应控制两个主题,并具体阐述各自的概念、方法、应用以及仿真结果分析。

最后一部分则是对全文进行总结回顾,并展望未来研究方向和发展趋势。

1.3 目的本文旨在通过对系统辨识与自适应控制在Matlab仿真环境中的研究与应用进行概述说明,帮助读者深入了解该领域的基本理论和实践技巧。

同时,在介绍相关概念和算法的同时,我们也希望能够启发读者思考并提出对未来研究方向和发展趋势的建议。

通过本文的阅读,读者将能够全面了解系统辨识与自适应控制在工程领域中的重要性,并学会利用Matlab进行仿真实验,从而加深对这一领域的理解与认知。

2. 系统辨识2.1 系统辨识概念系统辨识是指通过观测系统输入与输出之间的关系,以及对系统内部状态的估计,来建立数学模型以反映实际物理系统行为的过程。

在控制工程领域中,系统辨识是一种常用的方法,用于从已知输入与输出数据中推断出未知系统的特性和参数。

在系统辨识过程中,我们通常假设被研究的系统是线性、时不变且具有固定结构的。

系统辨识的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提供了多种参数辨识工具箱,例如System Identification Toolbox。

其中,最常用的方法包括最小二乘法、极大似然法、递归最小二乘法等。

最小二乘法是一种经典的参数估计方法,通过最小化测量值与预测值之间的差异来估计参数。

Matlab中的lsqcurvefit函数可以用于最小二乘拟合曲线。

例如,通过拟合一组数据点得到一个最优的曲线,可以估计曲线的参数。

极大似然法是一种基于概率统计的参数估计方法,通过最大化观测数据出现的似然函数来估计参数。

Matlab中的mle函数可以用于极大似然估计。

例如,在某个信号的概率密度函数已知的情况下,可以通过观测到的样本来估计概率密度函数的参数。

递归最小二乘法是一种递归更新参数的方法,可以在随时间变化的系统中实时地进行参数估计。

Matlab中的rls函数可以用于递归最小二乘估计。

例如,在自适应滤波中,可以通过递归最小二乘法来实时估计信号的参数。

三、频域辨识频域辨识是一种基于频谱分析的参数估计方法,可以在频率域中确定系统的特性。

Matlab提供了多种频域辨识工具箱,例如System Identification Toolbox和Signal Processing Toolbox。

其中,最常用的方法包括功率谱密度估计、自相关函数法、协方差法等。

功率谱密度估计是一种常用的频域参数估计方法,可以估计信号在不同频率上的能量分布。

Matlab中的pwelch函数可以用于功率谱密度估计。

第1章 绪论 [系统辨识理论及Matlab仿真]

第1章 绪论  [系统辨识理论及Matlab仿真]
分析进行建模,则系统可以称为“白箱”。如果对系统的客观规律 不清楚,只能从系统的试验中测量系统的响应数据,应用辨识方法 建立系统的数学模型,则称系统为“黑箱”。如果已知系统的某些 基本规律,但又有些机理还不清楚,则称系统为“灰箱”。
(2)按概率角度分:确定性的、随机性的 确定性模型所描述的系统,当状态确定后,其输出响应是唯一
系统辨识是根据系统的试验数据来确定系统的数学模型,必须 存在实际系统的输入输出数据。
6
1.1 建立数学模型的基本方法
(1)理论分析法 这种方法主要是通过分析系统的运动规律,运用已知的定律、
定理和原理,例如力学原理、生物学定律、牛顿定理、能量平衡方 程、传热传质原理等,利用数学方法进行推导,建立系统的数学模 型。
(4)按时间刻度分:连续的、离散的 用来描述连续系统的模型有微分方程、传递函数等,用来描
述离散系统的模型有差分方程、状态方程等。
(5)按参数与时间的关系分:定常的、时变的
定常系统的模型参数不随时间的变化而改变,而时变系统的
模型参数随时间的变化而改变。
19
(6)按参数与输入输出关系分:线性的、非线性的 线性模型用来描述线性系统,其显著特点是满足叠加原理和
则。一般采用输出误差准则,即当实际系统的输出和模型的输出
分别为 yk 和 ymk 时,输出误差为
k yk ymk
28
1.7 系统辨识的分类
系统辨识的分类方法很多,根据描述系统数学模型的不同可分 为线性系统和非线性系统辨识、集中参数系统和分布参数系统辨识; 根据系统的结构可分为开环系统与闭环系统辨识;根据参数估计方 法可分为离线辨识和在线辨识等。另外还有经典系统辨识和近代系 统辨识、系统结构辨识和系统参数辨识等分类。其中离线辨识与在 线辨识是系统辨识中常用的2个基本概念。

系统辨识与自适应控制matlab仿真代码

系统辨识与自适应控制matlab仿真代码

系统辨识与自适应控制Matlab仿真代码一、引言系统辨识与自适应控制是现代控制理论的重要分支之一,它能够对未知的系统进行建模和控制,具有广泛的应用前景。

Matlab作为一款强大的数学软件,具有丰富的工具箱和仿真功能,可以方便地进行系统辨识和自适应控制的仿真实验。

本文将介绍如何使用Matlab进行系统辨识和自适应控制的仿真实验。

二、系统辨识系统辨识是指根据系统的输入和输出数据,推导出系统的数学模型。

在Matlab中,可以使用System IdentificationToolbox进行系统辨识。

下面以一个简单的例子来说明如何使用System Identification Toolbox进行系统辨识。

例:假设有一个未知的二阶系统,其输入为正弦信号,输出为系统的响应。

采样频率为10 0Hz,采样时间为10秒。

输入信号的频率为2Hz,幅值为1。

1. 生成输入信号在Matlab中,可以使用如下代码生成输入信号:t = 0:0.01:10; % 采样时间u = sin(2*pi*2*t); % 2Hz正弦信号2. 生成输出信号假设系统的传递函数为:G(s) = K / (s^2 + 2ζωs + ω^2)其中K、ζ、ω为未知参数。

可以使用如下代码生成输出信号:K = 1;zeta = 0.2;omega = 2*pi*2;sys = tf(K, [1 2*zeta*omega omega^2]);y = lsim(sys, u, t);3. 进行系统辨识使用System Identification Toolbox进行系统辨识,可以得到系统的传递函数模型:G(s) = 0.9826 / (s^2 + 0.7839s + 12.57)其中,0.9826为K的估计值,0.7839为2ζω的估计值,12.57为ω^2的估计值。

可以看出,估计值与实际值比较接近。

三、自适应控制自适应控制是指根据系统的输入和输出数据,实时调整控制器的参数,以达到控制系统稳定的目的。

系统辨识及其matlab仿真)

系统辨识及其matlab仿真)

系统辨识及其matlab仿真)系统辨识是指利用已知的输入和输出数据,通过建立数学模型来描述和预测系统行为的过程。

它在工程领域中具有广泛的应用,包括控制系统设计、信号处理、通信系统等领域。

系统辨识可以分为参数辨识和非参数辨识两种方法。

参数辨识是指通过确定系统模型的参数来描述系统行为,常用的方法有最小二乘法、极大似然法等。

非参数辨识则是通过估计系统的输入输出关系函数来描述系统,常用的方法有频域方法、时域方法等。

在系统辨识过程中,噪声是一个不可忽视的因素。

噪声的存在会对辨识结果产生影响,因此需要对噪声进行建模和处理。

常用的噪声模型有高斯白噪声模型、AR模型、MA模型等。

在实际应用中,通常需要根据实际情况选择合适的噪声模型来进行系统辨识。

Matlab是一种常用的数学软件,它提供了丰富的工具箱和函数,可以方便地进行系统辨识的仿真。

在Matlab中,可以使用System Identification Toolbox进行系统辨识的建模和仿真。

该工具箱提供了多种辨识算法,包括线性和非线性的参数辨识方法。

在使用Matlab进行系统辨识仿真时,首先需要准备好输入输出数据。

对于已知系统,可以通过实验或者模拟得到系统的输入输出数据。

对于未知系统,可以通过对系统加入一定的激励信号,然后获取系统的响应数据来进行辨识。

接下来,可以使用Matlab提供的辨识函数进行系统辨识的建模。

对于线性系统,可以使用ARX模型、ARMAX模型、OE模型等进行建模。

对于非线性系统,可以使用非线性ARX模型、非线性ARMAX模型等进行建模。

这些辨识函数可以根据输入输出数据自动估计系统的参数,并生成系统模型。

在得到系统模型后,可以利用仿真工具对系统进行仿真分析。

例如,可以通过对系统模型进行输入信号的仿真,得到系统的输出响应,并与实际数据进行比较,验证辨识结果的准确性。

总之,系统辨识及其Matlab仿真是一种重要的工程方法,可以帮助我们理解和预测系统的行为。

matlab系统辨识工具箱使用的算法

matlab系统辨识工具箱使用的算法

matlab系统辨识工具箱使用的算法MATLAB的系统辨识工具箱使用多种算法来进行系统辨识。

这些算法通常包括以下几种:
1. 最小二乘法(Least Squares):这是最常用的系统辨识方法。

最小二乘法试图找到一组参数,使得实际数据和模型预测之间的误差平方和最小。

2. 极大似然估计(Maximum Likelihood Estimation):这种方法基于数据生成的模型概率密度函数,通过最大化似然函数来估计模型参数。

3. 递归最小二乘法(Recursive Least Squares):这是一种在线算法,可以在数据流中实时更新模型参数。

4. 扩展最小二乘法(Extended Least Squares):这种方法可以处理包含噪声和异常值的数据,通过引入权重来调整误差平方和。

5. 非线性最小二乘法(Nonlinear Least Squares):对于非线性系统,需要使用非线性最小二乘法来估计参数。

6. 遗传算法(Genetic Algorithms):这是一种启发式搜索算法,通过模拟自然选择和遗传过程来寻找最优解。

7. 粒子群优化算法(Particle Swarm Optimization):这是一种基于群体智能的优化算法,通过模拟鸟群、鱼群等生物群体的行为来寻找最优解。

以上这些算法都是MATLAB系统辨识工具箱中常用的算法,根据具体的问题和数据,可以选择最适合的算法来进行系统辨识。

MATLAB中的信号噪声分析与处理方法

MATLAB中的信号噪声分析与处理方法

MATLAB中的信号噪声分析与处理方法一、引言信号噪声是在实际工程应用中普遍存在的问题,噪声会对信号的质量和准确性产生不良影响。

因此,对信号噪声进行分析和处理是非常重要的。

MATLAB作为一款强大的科学计算软件,提供了丰富的信号处理工具和算法,可以方便地进行信号噪声分析与处理。

本文将介绍一些常用的MATLAB工具和方法,帮助读者更好地处理信号噪声。

二、信号噪声分析在进行信号噪声分析之前,首先需要了解噪声的特性和类型。

常见的噪声类型有白噪声、高斯噪声、脉冲噪声等。

其中,白噪声是一种功率谱密度恒定的噪声,常用于模拟信号分析。

高斯噪声则符合正态分布特性,常用于数字信号处理。

脉冲噪声则表现为突然出现的噪声干扰。

对于信号噪声的分析,可以使用MATLAB中的频谱分析工具来实现。

例如,可以利用MATLAB中的fft函数对信号进行频谱分析,得到信号的功率谱密度。

通过观察功率谱密度图,可以清楚地看到信号的频域特性和噪声的功率分布情况。

此外,MATLAB还提供了丰富的统计工具,可以计算信号的均值、方差等统计参数,帮助进一步分析信号的噪声特性。

三、信号噪声处理1. 滤波方法滤波是一种常用的信号噪声处理方法,其目的是通过选择合适的滤波器对信号进行处理,抑制或消除噪声。

在MATLAB中,可以利用fir1、butter等函数来设计和应用滤波器。

滤波器可以分为低通滤波器、高通滤波器、带通滤波器和带阻滤波器等不同类型。

根据信号噪声的特点和需求,选择合适的滤波器类型是十分重要的。

例如,如果信号中的噪声主要集中在高频段,可以选择高通滤波器进行去噪处理。

2. 去噪算法除了滤波方法外,还有其他一些去噪算法可以应用于信号噪声处理。

例如,小波去噪算法是一种常用的信号去噪方法。

该算法通过对信号进行小波分解,并利用小波系数的特性进行噪声抑制。

MATLAB提供了丰富的小波变换函数和去噪函数,可以方便地进行信号去噪处理。

另外,独立分量分析(ICA)是一种基于统计的信号盲源分离方法,也可以用于信号噪声的降维和去噪。

Matlab系统辨识

Matlab系统辨识

Matlab系统辨识建⽴系统的数学模型(1)使⽤tf函数建⽴传递函数模型对于下⾯这个传递函数:第⼀种模型建⽴⽅式:num = [12 15]den = [1 16 64 192];G = tf(num, den)其中num为分⼦多项式的系数,den为分母多项式的系数。

第⼆种模型建⽴⽅式:s = tf('s');G = (12*s+15)/(s^3+16*s^2+64*s+192)代码s = tf('s');表⽰⽤s这个变量来代表⼀个拉什算⼦s。

对于⼀个带有时延的传递函数模型,也可以使⽤tf函数来进⾏设置:G = tf(1,[1 1],'inDelay',5)通过设置tf函数的'inDelay'参数为5,建⽴了⼀个带有5秒延时的系统:也同样可以使⽤s = tf('s');的⽅式进⾏建⽴:G = exp(-5*s)/(s+1)另外,有时候分⼦或分母的多项式是多项式相乘的形式,⽐如下⾯的这个传递函数:这时可直接使⽤卷积函数(conv)来简化建⽴过程:num = [1 2 3];den = conv([1 0 3 4],[1 2]);G = tf(num,den)(2)使⽤zpk函数建⽴传递函数模型(零极点模型)对于下⾯这个传递函数:z = [-5 -5];p = [-1 -2 -2-2*i -2+2*i];k = 4;G = zpk(z,p,k)会在matlab中得到这样的传递函数:其中复数零极点会被⾃动乘起来,因为在matlab中⽆法显⽰复数的i或j。

使⽤函数pzmap绘制零极点:pzmap(G)绘制结果如下图所⽰:(3)传递函数模型间的变换已知传递函数获得模型的零极点向量:G = tf([7 2 8],[4 12 4 2]);[z,p,k] = zpkdata(G,'v')使⽤函数zpkdata,传⼊系统的传递函数模型,其中'v'表⽰⽤向量的形式进⾏表⽰。

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

【1】随机序列产生程序【2】白噪声产生程序【3】M序列产生程序【4】二阶系统一次性完成最小二乘辨识程序【5】实际压力系统的最小二乘辨识程序【6】递推的最小二乘辨识程序【7】增广的最小二乘辨识程序【8】梯度校正的最小二乘辨识程序【9】递推的极大似然辨识程序【10】Bayes辨识程序【11】改进的神经网络MBP算法对噪声系统辨识程序【12】多维非线性函数辨识程序的Matlab程序【13】模糊神经网络解耦Matlab程序【14】F-检验法部分程序【1】随机序列产生程序A=6;x0=1;M=255;for k=1:100x2=A*x0;x1=mod (x2,M);v1=x1/256;v(:,k)=v1;x0=x1;v0=v1;endv2=vk1=k;%grapherk=1:k1;plot(k,v,k,v,'r');xlabel('k'), ylabel('v');title('(0,1)均匀分布的随机序列') 【2】白噪声产生程序A=6; x0=1; M=255; f=2; N=100;for k=1:Nx2=A*x0;x1=mod (x2,M);v1=x1/256;v(:,k)=(v1-0.5)*f;x0=x1;v0=v1;endv2=vk1=k;%grapherk=1:k1;plot(k,v,k,v,'r');xlabel('k'), ylabel('v');title('(-1,+1)均匀分布的白噪声')【3】M序列产生程序X1=1;X2=0;X3=1;X4=0; %移位寄存器输入Xi初T态(0101),Yi为移位寄存器各级输出m=60; %置M序列总长度for i=1:m %1#Y4=X4; Y3=X3; Y2=X2; Y1=X1;X4=Y3; X3=Y2; X2=Y1;X1=xor(Y3,Y4); %异或运算if Y4==0U(i)=-1;elseU(i)=Y4;endendM=U%绘图i1=ik=1:1:i1;plot(k,U,k,U,'rx')xlabel('k')ylabel('M序列')title('移位寄存器产生的M序列')【4】二阶系统一次性完成最小二乘辨识程序%FLch3LSeg1u=[-1,1,-1,1,1,1,1,-1,-1,-1,1,-1,-1,1,1]; %系统辨识的输入信号为一个周期的M序列z=zeros(1,16); %定义输出观测值的长度for k=3:16z(k)=1.5*z(k-1)-0.7*z(k-2)+u(k-1)+0.5*u(k-2); %用理想输出值作为观测值endsubplot(3,1,1) %画三行一列图形窗口中的第一个图形stem(u) %画出输入信号u的经线图形subplot(3,1,2) %画三行一列图形窗口中的第二个图形i=1:1:16; %横坐标范围是1到16,步长为1plot(i,z) %图形的横坐标是采样时刻i, 纵坐标是输出观测值z, 图形格式为连续曲线subplot(3,1,3) %画三行一列图形窗口中的第三个图形stem(z),grid on%画出输出观测值z的经线图形,并显示坐标网格u,z%显示输入信号和输出观测信号%L=14%数据长度HL=[-z(2) -z(1) u(2) u(1);-z(3) -z(2) u(3) u(2);-z(4) -z(3) u(4) u(3);-z(5) -z(4) u(5) u(4);-z(6) -z(5) u(6) u(5);-z(7) -z(6) u(7) u(6);-z(8) -z(7) u(8) u(7);-z(9) -z(8) u(9) u(8);-z(10) -z(9) u(10)u(9);-z(11) -z(10) u(11) u(10);-z(12) -z(11) u(12) u(11);-z(13) -z(12) u(13) u(12);-z(14) -z(13)u(14) u(13);-z(15) -z(14) u(15) u(14)] %给样本矩阵HL赋值ZL=[z(3);z(4);z(5);z(6);z(7);z(8);z(9);z(10);z(11);z(12);z(13);z(14);z(15);z(16)]% 给样本矩阵zL 赋值%calculating parameters%计算参数c1=HL'*HL; c2=inv(c1); c3=HL'*ZL; c=c2*c3 %计算并显示%DISPLAY PARAMETERSa1=c(1), a2=c(2), b1=c(3), b2=c(4) %从中分离出并显示a1 、a2、b1、b2%End【5】实际压力系统的最小二乘辨识程序%FLch3LSeg2clear%工作间清零V=[54.3,61.8,72.4,88.7,118.6,194.0]'%赋初值V,并显示P=[61.2,49.5,37.6,28.4,19.2,10.1]'%赋初值P,并显示%logP=-alpha*logV+logbeita=[-logV,1][alpha,log(beita)]'=HL*sita%注释P、V之间的关系for i=1:6;%循环变量的取值为从1到6Z(i)=log(P(i));%赋系统的输出采样值end%循环结束ZL=Z'%给zL赋值HL=[-log(V(1)),1;-log(V(2)),1;-log(V(3)),1;-log(V(4)),1;-log(V(5)),1;-log(V(6)),1] %给HL赋值%calculating parameters%计算参数c1=HL'*HL; c2=inv(c1); c3=HL'*ZL; c4=c2*c3%计算%Separation of Parameters%分离变量alpha=c4(1) % 为c4的第1个元素beita=exp(c4(2)) % 为以自然数为底的c4的第2个元素的指数【6】递推的最小二乘辨识程序%FLch3RLSeg3clear%清理工作间变量L=15;% M序列的周期y1=1;y2=1;y3=1;y4=0;%四个移位积存器的输出初始值for i=1;%开始循环,长度为Lx1=xor(y3,y4);%第一个移位积存器的输入是第3个与第4个移位积存器的输出的“或”x2=y1;%第二个移位积存器的输入是第3个移位积存器的输出x3=y2;%第三个移位积存器的输入是第2个移位积存器的输出x4=y3;%第四个移位积存器的输入是第3个移位积存器的输出y(i)=y4;%取出第四个移位积存器幅值为"0"和"1"的输出信号,if y(i)>0.5,u(i)=-0.03;%如果M序列的值为"1"时,辨识的输入信号取“-0.03”else u(i)=0.03;%当M序列的值为"0"时,辨识的输入信号取“0.03”end%小循环结束y1=x1;y2=x2;y3=x3;y4=x4;%为下一次的输入信号做准备end%大循环结束,产生输入信号ufigure(1);%第1个图形stem(u),grid on%以径的形式显示出输入信号并给图形加上网格z(2)=0;z(1)=0;%取z的前两个初始值为零for k=3:15;%循环变量从3到15z(k)=1.5*z(k-1)-0.7*z(k-2)+u(k-1)+0.5*u(k-2);%给出理想的辨识输出采样信号end%RLS递推最小二乘辨识c0=[0.001 0.001 0.001 0.001]';%直接给出被辨识参数的初始值,即一个充分小的实向量p0=10^6*eye(4,4);%直接给出初始状态P0,即一个充分大的实数单位矩阵E=0.000000005;%相对误差E=0.000000005c=[c0,zeros(4,14)];%被辨识参数矩阵的初始值及大小e=zeros(4,15);%相对误差的初始值及大小for k=3:15; %开始求Kh1=[-z(k-1),-z(k-2),u(k-1),u(k-2)]'; x=h1'*p0*h1+1; x1=inv(x); %开始求K(k)k1=p0*h1*x1;%求出K的值d1=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];%求出p(k)的值p0=p1;%给下次用if e2<=E break;%若参数收敛满足要求,终止计算end%小循环结束end%大循环结束c%显示被辨识参数e%显示辨识结果的收敛情况%分离参数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(2);%第2个图形i=1:15;%横坐标从1到15plot(i,a1,'r',i,a2,':',i,b1,'g',i,b2,':') %画出a1,a2,b1,b2的各次辨识结果title('Parameter Identification with Recursive Least Squares Method')%图形标题figure(3); %第3个图形i=1:15; %横坐标从1到15plot(i,ea1,'r',i,ea2,'g',i,eb1,'b',i,eb2,'r:') %画出a1,a2,b1,b2的各次辨识结果的收敛情况title('Identification Precision') %图形标题【7】增广的最小二乘辨识程序%FLch3ELSeg4clearL=60;%四位移位积存器产生的M序列的周期y1=1;y2=1;y3=1;y4=0;%四个移位积存器的输出初始值for i=1;x1=xor(y3,y4);%第一个移位积存器的输入信号x2=y1;%第二个移位积存器的输入信号x3=y2;%第三个移位积存器的输入信号x4=y3;%第四个移位积存器的输入信号y(i)=y4;%第四个移位积存器的输出信号,幅值"0"和"1"if y(i)>0.5,u(i)=-1;%M序列的值为"1"时,辨识的输入信号取“-1”else u(i)=1;%M序列的值为"0"时,辨识的输入信号取“1”endy1=x1;y2=x2;y3=x3;y4=x4;%为下一次的输入信号作准备endfigure(1);%画第一个图形subplot(2,1,1); %画第一个图形的第一个子图stem(u),grid on%画出M序列输入信号v=randn(1,60); %产生一组60个正态分布的随机噪声subplot(2,1,2); %画第一个图形的第二个子图plot(v),grid on;%画出随机噪声信号R=corrcoef(u,v);%计算输入信号与随机噪声信号的相关系数r=R(1,2);%取出互相关系数u%显示输入型号v%显示噪声型号z=zeros(7,60);zs=zeros(7,60);zm=zeros(7,60);zmd=zeros(7,60);%输出采样、不考虑噪声时系统输出、不考虑噪声时模型输出、模型输出矩阵的大小z(2)=0;z(1)=0;zs(2)=0;zs(1)=0;zm(2)=0;zm(1)=0;zmd(2)=0;zmd(1)=0;%给输出采样、不考虑噪声时系统输出、不考虑噪声时模型输出、模型输出赋初值%增广递推最小二乘辨识c0=[0.001 0.001 0.001 0.001 0.001 0.001 0.001]';%直接给出被辨识参数的初始值,即一个充分小的实向量p0=10^6*eye(7,7);%直接给出初始状态P0,即一个充分大的实数单位矩阵E=5.0e-15;%取相对误差Ec=[c0,zeros(7,59)];%被辨识参数矩阵的初始值及大小e=zeros(7,60);%相对误差的初始值及大小for k=3:60; %开始求Kz(k)=1.5*z(k-1)-0.7*z(k-2)+u(k-1)+0.5*u(k-2)+v(k)-v(k-1)+0.2*v(k-2);%系统在M序列输入下的输出采样信号h1=[-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; x1=inv(x); k1=p0*h1*x1; %Kd1=z(k)-h1'*c0; c1=c0+k1*d1;%辨识参数czs(k)=1.5*z(k-1)-0.7*z(k-2)+u(k-1)+0.5*u(k-2);%系统在M序列的输入下不考虑扰动时的输出响应zm(k)=[-z(k-1),-z(k-2),u(k-1),u(k-2)]*[c1(1);c1(2);c1(3);c1(4)];%模型在M序列的输入下不考虑扰动时的的输出响应zmd(k)=h1'*c1;%模型在M序列的输入下的的输出响应e1=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 e2<=E break;%若收敛情况满足要求,终止计算end%判断结束end%循环结束c, e, %显示被辨识参数及参数收敛情况z,zmd %显示输出采样值、系统实际输出值、模型输出值%分离变量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(2);%画第二个图形i=1:60;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(3);%画出第三个图形i=1:60;plot(i,ea1,'r',i,ea2,'r:',i,eb1,'b',i,eb2,'b:',i,ed1,'g',i,ed2,'g:',i,ed2,'r+')%画出各个参数收敛情况title('Identification Error')%标题%response%响应figure(4);%画出第四个图形subplot(4,1,1); %画出第四个图形中的四个子图的第一个子图i=1:60;plot(i,zs(i),'r')%画出被辨识系统在没有噪声情况下的实际输出响应subplot(4,1,2); %画出第四个图形中的四个子图的第二个子图i=1:60;plot(i,z(i),'g')%画出被辨识系统的采样输出响应subplot(4,1,3); %画出第四个图形中的四个子图的第三个子图i=1:60;plot(i,zmd(i),'b')%画出模型含有噪声的输出响应subplot(4,1,4); %画出第四个图形中的四个子图的第四个子图i=1:60;plot(i,zm(i),'b')%画出模型去除噪声后的输出响应【8】梯度校正的最小二乘辨识程序%FLch4GAeg1clearu=[-1,-1,-1,-1,1,1,1,-1,1,1,-1,-1,1,-1,1,-1,-1,-1,-1,1];y=[0,-2,-6,-7,-7,-3,5,7,3,-1,5,3,-5,-3,1,-1,1,-5,-7,-7];%画出u和y图形figure(1), subplot(2,1,1), stem(u), subplot(2,1,2), stem(y), hold onk=1:20plot(k,y)%给出初始值h1=[-1,0,0]';h2=[-1,-1,0]';g=[0,0,0]';I=[1,0,0;0,1/2,0;0,0,1/4];h=[h1,h2,zeros(3,16)];%计算输入样本数据h(k)for k=3:18h(:,k)=[u(k),u(k-1),u(k-2)]';end%计算出权矩阵R(k)和估计值gfor k=1:18a=h(1,k)^2+(h(2,k)^2)/2+(h(3,k)^2)/4;%按照式(4.45)开始计算权矩阵a1=1/a;R=a1*I;%按照式(4.45)计算出权矩阵g(:,k+1)=g(:,k)+R*h(:,k)*(y(k+1)-h(:,k)'*g(:,k));%按照式(4.44)计算脉冲响应估计值end%画出图形g1=g(1,; g2=g(2,; g3=g(3,;figure(2)k=1:19;subplot(121)plot(k,g1,'r',k,g2,'g',k,g3,'b'),grid on%计算模型输出值ym及系统输出与模型输出之间的误差Eyfor k=1:18ym(k)=h(:,k)'*g(:,k); Ey(k)=y(k+1)-ym(k);endk=1:18;subplot(122)plot(k,Ey),grid ong, ym, Ey %显示脉冲响应估计值、模型输出值及系统输出与模型输出之间的误差figure(3)%画出脉冲响应曲线x=0:1:3;y=[0,g(1,18),g(2,18),g(3,18)];xi=linspace(0,3);yi=interp1(x,y,xi,'cubic');%三次插值plot(x,y,'o',xi,yi,'m'),grid on%画出脉冲响应估计值及其三次插值曲线【9】递推的极大似然辨识程序clear %清零a(1)=1;b(1)=0;c(1)=1;d(1)=0;u(1)=d(1);z(1)=0;z(2)=0; %初始化for i=2:1200 %产生m序列u(i)a(i)=xor(c(i-1),d(i-1));b(i)=a(i-1);c(i)=b(i-1);d(i)=c(i-1);u(i)=d(i);endu; %若取去‘;’可以在程序运行中观测到m序列v=randn(1200,1); %产生正态分布随机数V=0; %计算噪声方差for i=1:1200V=V+v(i)*v(i);endV1=V/1200;for k=3:1200 %根据v和u计算zz(k)=1.2*z(k-1)-0.6*z(k-2)+u(k-1)+0.5*u(k-2)+v(k)-v(k-1)+0.2*v(k-2);endo1=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:1200h=[-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)];endo1 %若取去‘;’可以在程序运行中观测到参数V1%绘图subplot(4,1,1)k=1:1200;plot(k,a1,'k:',k,a2,'b',k,b1,'r',k,b2,'m:',k,d1,'g',k,d2,'k');xlabel('k')ylabel('parameter')legend('a1=-1.2,','a2=0.6','b1=1.0','b2=0.5','d1=-1.0','d2=0.2'); %图标炷title('The parameter idendification of the RML');endsubplot(4,1,2)k=1:1200;plot(k,e1,'k',k,e2,'b',k,e3,'r',k,e4,'m',k,e5,'g',k,e6,'k');xlabel('k'); ylabel('error'); %title('误差曲线')endsubplot(4,1,3)k=1:1200;plot(k,u);xlabel('k'); ylabel('input'); %title('系统输入信号')endsubplot(4,1,4)k=1:1200;plot(k,v);xlabel('k'); ylabel('random noise'); %title('系统所加的随机噪声') end。

相关文档
最新文档