系统辨识matlab最小二乘法

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

一、 实验题目:最小二乘法在系统辨识中的应用

二、 实验目的

1.掌握系统辨识的理论、方法及应用

2.熟练Matlab 下最小二乘法编程

3.掌握M 序列产生方法

三、 实验设备

1、

硬件设备:计算机配置,P4、32位CPU 、512M 内存 2、 软件设备: windows xp 操作系统 、matlab6.5软件包

四、 实验原理

最小二乘理论是有高斯(K.F.Gauss )在1795年提出:“未知量的最大可能值是这样一个数值,它使各次实际观测值和计算值之间的差值的平方乘以度量其精度的数值以后的和最小。”。

单输入单输出离散时间动态系统差分方程为:

)()()()k (1i 1i k e i k u i k Z Z bn

i na i b a +-=-+∑∑==其中Z (k )为输出变量,u(k)为输入变量,e(k)为偏差。

上式可以表示为)()()(-)k (1i 1i k e i k u i k Z Z bn

i na i b a +--=∑∑==各参数用矩阵表示 ⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡--------------=)()1()()1()2()1()2()1()1()

0()1()0(a a b a b a n l u l u n l z l z n u u n z z n u u n z z H (1) T l z z z Z )](),2(),1([,⋯= (2)

其中l 为所需要采集的点数。

[]T

n e E )(........).........0(e = (3) []T bn anb a ........1.........1=θ (4)

Z=H*θ+E ,E=Z-H*θ,根据最小二乘理论E 必须最小对上式进行求导,推出 Z H H H T T 1)(-=θ

根据表达式Z H H H T T 1)(-=θ带入(1)(2)(4)即可求出a1....an b1.......bn 。

五、实验代码以及实验结果

m=20; %置M序列总长度

y1=1;y2=1;y3=1;y4=0;

for i=1:m

x1=xor(y3,y4);%异或运算

x2=y1;

x3=y2;

x4=y3;

if y4==0;

u(i)=1;

else

u(i)=-1;

end

y1=x1;y2=x2;y3=x3;y4=x4;

end

z=zeros(21,1);%定义输出观测值的长度21行*1列的0矩阵

ZL=zeros(19,1);%定义输出观测值的长度19行*1列的0矩阵

for k=3:21

z(k)=-1.5*z(k-1)-z(k-2)+u(k-1)+3*u(k-2) ;%用理想输出值作为观测值

ZL(k-2)=z(k);

end

%subplot(3,1,1) %画三行一列图形窗口中的第一个图形

%stem(u) %画出输入信号u的图形

%subplot(3,1,2) %画三行一列图形窗口中的第二个图形

%i=1:1:16; %横坐标范围是1到16,步长为1

%plot(i,z) %图形的横坐标是采样时刻i, 纵坐标是输出观测值z, 图形格式为连续曲线

%subplot(3,1,3) %画三行一列图形窗口中的第三个图形

%stem(z),grid %画出输出观测值z的图形,并显示坐标网格

for m=2:20

HL=[-z(m) -z(m-1) u(m) u(m-1)];

for n=1:4;

H((m-1),n)=HL(n);

end

end

c1=H'*H;

c2=inv(c1);

c3=H'*ZL;

c=c2*c3

a1=c(1), a2=c(2), b1=c(3), b2=c(4)

实验结果:

c =

1.5000

1.0000

1.0000

3.0000

a1 =

1.5000

a2 =

1.0000

b1 =

1

b2 =

3.0000

六、实验结果分析

通过实验结果可知所得的实验结果与待辨识的系统传递函数的系数很接近了。即代码实现了待辨识系统的辨识。但是在改变系统传递函数的系数时,系数超过一定范围系统将辨识不出来,然而改变M序列的脉冲个数后范围将变化,由此可知待辨识系统的参数选择和M序列脉冲个数有关。

七、实验心得

通过本次实验掌握了M序列的产生机理,以及如何用MATLAB产生M序列。通过查帮助文档知道了如何使用循环指令以及如何产生一个随机矩阵,和全零矩阵。写代码是由于对矩阵的知识有些模糊,通过查阅资料强化了矩阵方面的一些知识。

相关文档
最新文档