系统辨识实验报告1
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
编写并调试动态离散时间模型 LS 成批算法程序。 要求:(1)原始数据由 DU 和 DY 读出。 (2)调用求逆及相乘子程序。 (3)显示参数辨识结果。
二.实验原理:
1.批次处理的方法就是把所有的数据采集到一次性进行处理,但前提是 白色噪声、及 M 序列所共同作用而产生的输出,才能使用最小二乘法。虽然 这种方法的计算量庞大,但经常用于处理时不变系统,方法简单。
三.数据递推关系图:
14
四.实验运行结果:
函数界面示意图: 6. 只显示结果界面: 7. 显示过程的参考界面:
15
心得体会
我很喜欢这个课程的期末考核方式,不用再拘泥于在题目当中对该课程的了 解,而是通过 4 个 C 语言设计的练习来达到学习的目的,而且对以后的学习还有 很大的帮助。
在编写 C 语言的过程中,也遇到了一些阻碍,特别是在编写第 3,4 个的时候。 比如:用的数组太多,并且未将其初始化,运行出来的结果经常是很长的一段随 机数;或者一模一样的程序有时候就可以正常运行,有时候就总是出现报错…… 这些都是让我心塞了两周的问题。在这些问题解决之后,运行出来的结果却与实 际模型参数的出入有点大,于是又重新查找第 2 个实验是否是 M 序列产生的方式 有问题。通过对初始化寄存器赋给不同的值,可以让结果与真实模型参数之间的 误差达到最小。
相
xishu(4,1)
乘
列矩阵
12
四.实验运行结果:
13
实验 4
一.实验内容及要求:
编写并调试动态离散时间模型 LS 递推算法程序。 要求:
(1)原始数据由 DU 和 DY 读出。 (2)显示参数辨识结果。 (3)设置选择变量决定是否输出中间结果。
二.实验原理:
1.基本思路: 新的估计值 sita'(k+1)=老的估计值 sita'(k)+修正项
3. 在 gener 子函数中产生 M 序列 u(k)保存到文本文件中。 4. 在 output 子函数中,通过对 input 子函数(读入 v(k),u(k)的数据)、 deal 子函数(由公式 y(k)(k-1)+(k-2)=u(k-1)+(k-2)+v(k)求 y(k))的调用 来达到生成 y(k)序列并保存到文本文件中。
9
四.程序设计框图:
main 函 数
gener 子 函数
产生 DU
output 子 函数
产生 DY
退出程序
五.程序运行流程图:
1. main 函数:
input 子 函数
输入 DU, DV
deal 子 函数
得 DY
2. gener 函数:
3. output 函数:
10
11
实验 3
一.实验内容及要求:
通过这学期对系统辨识这个课程的学习,让我了解到系统辨识在建立数学模 型的方面的重要性。对于不了解系统的工作机理的人来说,也有了一个可以知道 系统模型的构建方法。但是也必须要我们对所构建模型有一个较为清醒的认识, 比如要知道模型的类型,如果是动态模型,则要知道模型的参数或者阶次(但是 权函数模型就不需要事前知道模型的参数或者阶次,不知道这种方法有没有什么 我们不知道的缺陷)。在处理数据上,又一次让我了解到世上没有两全其美的事 情,计算的复杂程度和精度就好像鱼和熊掌不能兼得。也正是因为这样,才会成 为促使人们在这方面的不断寻找最优化算法的动力。在对模型进行研究时,都是 从最简单的模型开始研究,比如在没有噪声的情况下,所得到的模型参数就为系 统模型真实参数。进一步,在白色噪声的情况下,所得到的参数就为系统模型真 实参数的估计……通过这样的推理,就可以得到 LS 在系统辨识问题上的普适性, 不管系统受怎样的干扰,只要通过一系列的变换,最后还是通过 LS 来解决模型 参数的确定工作。
实验 2 ................................................ 错误!未定义书签。 一.实验内容及要求: ............................... 错误!未定义书签。 二.实验原理: ..................................... 错误!未定义书签。 三.软件设计思想: ................................. 错误!未定义书签。 四.程序设计框图: ................................. 错误!未定义书签。 五.程序运行流程图: ............................... 错误!未定义书签。
1. 基本模型:y(k)=-a1y(k-1)-a2y(k-2)+b1u(k-1)+b2u(k-2)+v(k)。 2. 引入信息矩阵 P(k),维数为 4*4,初始化为 10^5~10^12*E 的一单位 阵。gama(k)为修正系数,为无穷小标量。x(k+1)=[-y(k) -y(k-1) u(k) u(k-1)]。sita'=[a1 a2 b1 b2]。y(k+1)=DY[k+3]。 3. sita'(k+1)=sita'(k)+gama(k+1)*P(k)*x(k+1)*[y(k+1)-x'(K=1)* sita'(k)]; 4. P(k+1)=P(k)-gama(k+1)*P(k)*x(k+1)*x'(k+1)*P(k); 5. gama(k+1)=1/[1+x'(k+1)*P(k)*x(k+1)];
实验 3 ................................................ 错误!未定义书签。 一.实验内容及要求: ............................... 错误!未定义书签。 二.实验原理: ..................................... 错误!未定义书签。 三.程序数据流程图: ............................... 错误!未定义书签。 四.实验运行结果: ................................. 错误!未定义书签。
2.构造模型 Y=X*sita+V 3.Y=[DY(3) DY(4) DY(499) ]已知 n=2,L=500,可知 m=497
所以有 X=
三.程序数据流程图:
X(m,4) 矩阵
转
TX(4,m)
置
矩阵
Y(m,1) 列矩阵
相 乘ji1(4, 4)方阵
求 逆
ni(4, 4)方阵
相
ji2(4,m
乘
)矩阵
4
invertible!“。
四.程序结构框图:
main 函 数
MulOp 子 函数
矩阵乘积
Inv 子 函 数
矩阵求逆
退出程序
way1 键 盘 输入矩阵
way2 文 本 输入
矩阵
qiuni 子函 数
Mul 矩阵乘 积子函数
五.运行示意图:
1. main 函数的主界面:
2. MulOp 子函数的界面:
3. 在 MulOp(a,b,c)子函数中,有两种输入矩阵的方式:way1,way2。 相对应的功能为键盘输入,文本输入。并且两者在处理矩阵时,都调用了 Mul 函数。
4. 在 Inv()子函数中,输入和显示原矩阵,和其相应的逆矩阵。调用 qiuni(double FangZ[][M],double FZNi[][M],int n)子函数,可以都得 到原矩阵的逆矩阵。但当原矩阵不可逆时,系统输出为”The array is not
,及可得
+
+
+
C 0
Байду номын сангаас
C 1
C 8
输 出
图中 Ci 表示反馈的两种可能连接方式,Ci=1 表示连线接通,第 9-i 级 加入反馈中;Ci=0 表示连线断开,第 9-i 级未参加反馈。
系统产生 M 序列的结构流程图:
8
初始化寄存器 a=[1,1,0,0,0,1,0,1,0]
移位寄存器 c=[0,0,0,1,0,0,0,0,1]
系统辨识实验报告
学院:信息科学与技术学院 专业:自动化 日期:2016/4/26
0
目录
实验 1 ................................................ 错误!未定义书签。 一.实验内容及要求: ............................... 错误!未定义书签。 二.实验原理: ..................................... 错误!未定义书签。 三.软件设计思想: ................................. 错误!未定义书签。 四.程序结构框图: ................................. 错误!未定义书签。 五.运行示意图: ................................... 错误!未定义书签。
1. ............................................................. LabWork1 错误!未定义书签。 2. ............................................................. LabWork2 错误!未定义书签。 3. ............................................................. LabWork3 错误!未定义书签。 4. ............................................................. LabWork4 错误!未定义书签。
2
3
实验 1
一.实验内容及要求:
1.编出矩阵 A 与 B 相乘得到的矩阵 R 的运算计算机程序 要求: (1)A 和 B 的维数及数值可通过键盘及数据文件输入 (2)计算结果 R 可由屏幕及文件输出 2.将 1 改写为子程序 3.查找有关的资料,读懂及调通矩阵求逆程序,并改写为子程序。
二.实验原理:
5
3. Inv 子函数的界面: 4. 通过键盘操作计算两个矩阵的乘积:
5. 求方阵的逆矩阵:
6
7
实验 2
一.实验内容及要求:
编写并调试动态模型仿真程序: 模型:y(k)(k-1)+(k-2)=u(k-1)+(k-2)+v(k) 已知:白噪声{v(k)}数据文件为 DV,数据长度为 L=500 要求:(1) 产生长度为 L 的 M 序列数据文件 DU
实验 4 ................................................ 错误!未定义书签。 一.实验内容及要求: ............................... 错误!未定义书签。 二.实验原理: ..................................... 错误!未定义书签。 三.数据递推关系图: ............................... 错误!未定义书签。
1. 两个矩阵 A、B 相乘得到 C 矩阵,首先要满足的条件是 A 的列数与 B
行数相等,否则不能相乘。当满足条件后,根据 C(i,k)= 可以求得 C 矩阵。
2. 当求矩阵的逆时,首先要判断其是否为方阵,若是则可以对其进行 下一步的操作。本次实验中求逆主要是通过构造一个增广矩阵(FangZ | E) 矩阵的初等行变换得到(E | FZNi)的这样的一个矩阵就可以求得矩阵的逆。 若矩阵 FangZ 不是满秩矩阵时,FangZ 没有 FZNi 。通过这样的求逆方式, 避免了大方阵的求取行列式运算。
M 序列的长度为
L=500
i
=1
Y
i
<L
N
输出 M 序列
M 序列 DU(i)=a(i)
寄存器向前移 1位
三.软件设计思想:
1. 该软件的主要功能是:产生 M 序列赋给 u(k)保存在文件中;由 u(k) 和 v(k)求得 y(k)保存在文件中。
2. 在 main 函数中给出 3 个选择:求 u(k);求 y(k);退出程序。其相 对应的函数名称为 gener,ouput,exit。
三.软件设计思想:
1. 确定该软件的功能主要有:键盘输入两个矩阵然后相乘;文本 data 输入两个矩阵将结果放在文本 result 中;键盘输入一个方阵求得其逆矩阵。 其中前两个的矩阵相乘运算部分设置为一个函数 Mul。
2. 在 main 函 数 中 提 供 两 个 关 于 矩 阵 的 选 择 : multiplitation ; invertion。其相对应的子函数为 MulOp(a,b,c),Inv()。
1
四.实验运行结果: ................................. 错误!未定义书签。 心得体会 ............................................. 错误!未定义书签。 附录(实验代码) ..................................... 错误!未定义书签。
(2) 产生长度为 L 的模型输出数据文件 DY
二.实验原理:
由于在现实中,白噪声序列很难求,所以寻找到 M 序列在一定程度上可 以代替白色噪声序列。由 L=500,所以 n=9。
根据 M 序列的特征方程:
可知 9 阶移位寄存器的多项式为
c=[0,0,0,1,0,0,0,0,1]
9 级线性移位寄存器:
二.实验原理:
1.批次处理的方法就是把所有的数据采集到一次性进行处理,但前提是 白色噪声、及 M 序列所共同作用而产生的输出,才能使用最小二乘法。虽然 这种方法的计算量庞大,但经常用于处理时不变系统,方法简单。
三.数据递推关系图:
14
四.实验运行结果:
函数界面示意图: 6. 只显示结果界面: 7. 显示过程的参考界面:
15
心得体会
我很喜欢这个课程的期末考核方式,不用再拘泥于在题目当中对该课程的了 解,而是通过 4 个 C 语言设计的练习来达到学习的目的,而且对以后的学习还有 很大的帮助。
在编写 C 语言的过程中,也遇到了一些阻碍,特别是在编写第 3,4 个的时候。 比如:用的数组太多,并且未将其初始化,运行出来的结果经常是很长的一段随 机数;或者一模一样的程序有时候就可以正常运行,有时候就总是出现报错…… 这些都是让我心塞了两周的问题。在这些问题解决之后,运行出来的结果却与实 际模型参数的出入有点大,于是又重新查找第 2 个实验是否是 M 序列产生的方式 有问题。通过对初始化寄存器赋给不同的值,可以让结果与真实模型参数之间的 误差达到最小。
相
xishu(4,1)
乘
列矩阵
12
四.实验运行结果:
13
实验 4
一.实验内容及要求:
编写并调试动态离散时间模型 LS 递推算法程序。 要求:
(1)原始数据由 DU 和 DY 读出。 (2)显示参数辨识结果。 (3)设置选择变量决定是否输出中间结果。
二.实验原理:
1.基本思路: 新的估计值 sita'(k+1)=老的估计值 sita'(k)+修正项
3. 在 gener 子函数中产生 M 序列 u(k)保存到文本文件中。 4. 在 output 子函数中,通过对 input 子函数(读入 v(k),u(k)的数据)、 deal 子函数(由公式 y(k)(k-1)+(k-2)=u(k-1)+(k-2)+v(k)求 y(k))的调用 来达到生成 y(k)序列并保存到文本文件中。
9
四.程序设计框图:
main 函 数
gener 子 函数
产生 DU
output 子 函数
产生 DY
退出程序
五.程序运行流程图:
1. main 函数:
input 子 函数
输入 DU, DV
deal 子 函数
得 DY
2. gener 函数:
3. output 函数:
10
11
实验 3
一.实验内容及要求:
通过这学期对系统辨识这个课程的学习,让我了解到系统辨识在建立数学模 型的方面的重要性。对于不了解系统的工作机理的人来说,也有了一个可以知道 系统模型的构建方法。但是也必须要我们对所构建模型有一个较为清醒的认识, 比如要知道模型的类型,如果是动态模型,则要知道模型的参数或者阶次(但是 权函数模型就不需要事前知道模型的参数或者阶次,不知道这种方法有没有什么 我们不知道的缺陷)。在处理数据上,又一次让我了解到世上没有两全其美的事 情,计算的复杂程度和精度就好像鱼和熊掌不能兼得。也正是因为这样,才会成 为促使人们在这方面的不断寻找最优化算法的动力。在对模型进行研究时,都是 从最简单的模型开始研究,比如在没有噪声的情况下,所得到的模型参数就为系 统模型真实参数。进一步,在白色噪声的情况下,所得到的参数就为系统模型真 实参数的估计……通过这样的推理,就可以得到 LS 在系统辨识问题上的普适性, 不管系统受怎样的干扰,只要通过一系列的变换,最后还是通过 LS 来解决模型 参数的确定工作。
实验 2 ................................................ 错误!未定义书签。 一.实验内容及要求: ............................... 错误!未定义书签。 二.实验原理: ..................................... 错误!未定义书签。 三.软件设计思想: ................................. 错误!未定义书签。 四.程序设计框图: ................................. 错误!未定义书签。 五.程序运行流程图: ............................... 错误!未定义书签。
1. 基本模型:y(k)=-a1y(k-1)-a2y(k-2)+b1u(k-1)+b2u(k-2)+v(k)。 2. 引入信息矩阵 P(k),维数为 4*4,初始化为 10^5~10^12*E 的一单位 阵。gama(k)为修正系数,为无穷小标量。x(k+1)=[-y(k) -y(k-1) u(k) u(k-1)]。sita'=[a1 a2 b1 b2]。y(k+1)=DY[k+3]。 3. sita'(k+1)=sita'(k)+gama(k+1)*P(k)*x(k+1)*[y(k+1)-x'(K=1)* sita'(k)]; 4. P(k+1)=P(k)-gama(k+1)*P(k)*x(k+1)*x'(k+1)*P(k); 5. gama(k+1)=1/[1+x'(k+1)*P(k)*x(k+1)];
实验 3 ................................................ 错误!未定义书签。 一.实验内容及要求: ............................... 错误!未定义书签。 二.实验原理: ..................................... 错误!未定义书签。 三.程序数据流程图: ............................... 错误!未定义书签。 四.实验运行结果: ................................. 错误!未定义书签。
2.构造模型 Y=X*sita+V 3.Y=[DY(3) DY(4) DY(499) ]已知 n=2,L=500,可知 m=497
所以有 X=
三.程序数据流程图:
X(m,4) 矩阵
转
TX(4,m)
置
矩阵
Y(m,1) 列矩阵
相 乘ji1(4, 4)方阵
求 逆
ni(4, 4)方阵
相
ji2(4,m
乘
)矩阵
4
invertible!“。
四.程序结构框图:
main 函 数
MulOp 子 函数
矩阵乘积
Inv 子 函 数
矩阵求逆
退出程序
way1 键 盘 输入矩阵
way2 文 本 输入
矩阵
qiuni 子函 数
Mul 矩阵乘 积子函数
五.运行示意图:
1. main 函数的主界面:
2. MulOp 子函数的界面:
3. 在 MulOp(a,b,c)子函数中,有两种输入矩阵的方式:way1,way2。 相对应的功能为键盘输入,文本输入。并且两者在处理矩阵时,都调用了 Mul 函数。
4. 在 Inv()子函数中,输入和显示原矩阵,和其相应的逆矩阵。调用 qiuni(double FangZ[][M],double FZNi[][M],int n)子函数,可以都得 到原矩阵的逆矩阵。但当原矩阵不可逆时,系统输出为”The array is not
,及可得
+
+
+
C 0
Байду номын сангаас
C 1
C 8
输 出
图中 Ci 表示反馈的两种可能连接方式,Ci=1 表示连线接通,第 9-i 级 加入反馈中;Ci=0 表示连线断开,第 9-i 级未参加反馈。
系统产生 M 序列的结构流程图:
8
初始化寄存器 a=[1,1,0,0,0,1,0,1,0]
移位寄存器 c=[0,0,0,1,0,0,0,0,1]
系统辨识实验报告
学院:信息科学与技术学院 专业:自动化 日期:2016/4/26
0
目录
实验 1 ................................................ 错误!未定义书签。 一.实验内容及要求: ............................... 错误!未定义书签。 二.实验原理: ..................................... 错误!未定义书签。 三.软件设计思想: ................................. 错误!未定义书签。 四.程序结构框图: ................................. 错误!未定义书签。 五.运行示意图: ................................... 错误!未定义书签。
1. ............................................................. LabWork1 错误!未定义书签。 2. ............................................................. LabWork2 错误!未定义书签。 3. ............................................................. LabWork3 错误!未定义书签。 4. ............................................................. LabWork4 错误!未定义书签。
2
3
实验 1
一.实验内容及要求:
1.编出矩阵 A 与 B 相乘得到的矩阵 R 的运算计算机程序 要求: (1)A 和 B 的维数及数值可通过键盘及数据文件输入 (2)计算结果 R 可由屏幕及文件输出 2.将 1 改写为子程序 3.查找有关的资料,读懂及调通矩阵求逆程序,并改写为子程序。
二.实验原理:
5
3. Inv 子函数的界面: 4. 通过键盘操作计算两个矩阵的乘积:
5. 求方阵的逆矩阵:
6
7
实验 2
一.实验内容及要求:
编写并调试动态模型仿真程序: 模型:y(k)(k-1)+(k-2)=u(k-1)+(k-2)+v(k) 已知:白噪声{v(k)}数据文件为 DV,数据长度为 L=500 要求:(1) 产生长度为 L 的 M 序列数据文件 DU
实验 4 ................................................ 错误!未定义书签。 一.实验内容及要求: ............................... 错误!未定义书签。 二.实验原理: ..................................... 错误!未定义书签。 三.数据递推关系图: ............................... 错误!未定义书签。
1. 两个矩阵 A、B 相乘得到 C 矩阵,首先要满足的条件是 A 的列数与 B
行数相等,否则不能相乘。当满足条件后,根据 C(i,k)= 可以求得 C 矩阵。
2. 当求矩阵的逆时,首先要判断其是否为方阵,若是则可以对其进行 下一步的操作。本次实验中求逆主要是通过构造一个增广矩阵(FangZ | E) 矩阵的初等行变换得到(E | FZNi)的这样的一个矩阵就可以求得矩阵的逆。 若矩阵 FangZ 不是满秩矩阵时,FangZ 没有 FZNi 。通过这样的求逆方式, 避免了大方阵的求取行列式运算。
M 序列的长度为
L=500
i
=1
Y
i
<L
N
输出 M 序列
M 序列 DU(i)=a(i)
寄存器向前移 1位
三.软件设计思想:
1. 该软件的主要功能是:产生 M 序列赋给 u(k)保存在文件中;由 u(k) 和 v(k)求得 y(k)保存在文件中。
2. 在 main 函数中给出 3 个选择:求 u(k);求 y(k);退出程序。其相 对应的函数名称为 gener,ouput,exit。
三.软件设计思想:
1. 确定该软件的功能主要有:键盘输入两个矩阵然后相乘;文本 data 输入两个矩阵将结果放在文本 result 中;键盘输入一个方阵求得其逆矩阵。 其中前两个的矩阵相乘运算部分设置为一个函数 Mul。
2. 在 main 函 数 中 提 供 两 个 关 于 矩 阵 的 选 择 : multiplitation ; invertion。其相对应的子函数为 MulOp(a,b,c),Inv()。
1
四.实验运行结果: ................................. 错误!未定义书签。 心得体会 ............................................. 错误!未定义书签。 附录(实验代码) ..................................... 错误!未定义书签。
(2) 产生长度为 L 的模型输出数据文件 DY
二.实验原理:
由于在现实中,白噪声序列很难求,所以寻找到 M 序列在一定程度上可 以代替白色噪声序列。由 L=500,所以 n=9。
根据 M 序列的特征方程:
可知 9 阶移位寄存器的多项式为
c=[0,0,0,1,0,0,0,0,1]
9 级线性移位寄存器: