系统辨识大作业

更新时间:2024-07-01 20:03:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

一、 问题描述

考虑仿真对象:

z(k)?0.9z(k?1)?0.15z(k?2)?0.02z(k?3)?0.7u(k?1)?0.15u(k?2)?e(k) e(k)?1.0e(k?1)?0.41e(k?2)??v(k),v~N(0,1)

式中,u(k)和z(k)是输入输出数据,v(k)是零均值、方差为1的不相关的随机噪声;u(k)采用与e(k)不相关的随机序列。 1. 设计实验,产生输入输出数据; 2. 使用基本最小二乘法估计参数;

3. 考虑其他适用于有色噪声的辨识方法估计参数; 4. 模型验证。

二、 问题分析

对于单输入单输出系统(Single Input Single Output, SISO),如图 1所示,将待辨识的系统看作“灰箱”,它只考虑系统的输入输出特性,而不强调系统的内部机理。图 1中,输入u(k)和输出z(k)是可以测量的,G(z?1)是系统模型,用来描述系统的输入输出特性,y(k)是系统的实际输出。N(z?1)是噪声模型,v(k)是均值为零的不相关随机噪声,e(k)是有色噪声。

图 1 SISO系统的“灰箱”结构

对于SISO随机系统,被辨识模型G(z)为:

b1z?1?b2z?2???bnz?ny(z) G(z)??u(z)1?a1z?1?a2z?2???anz?n其相应的差分方程为

y(k)???aiy(k?i)??bui(k?i)

i?1i?1nn若考虑被辨识系统或观测信息中含有噪声,被辨识模型可改写为

z(k)???aiy(k?i)??bui(k?i)?v(k)

i?1i?1nn式中,z(k)为系统输出量的第k次观测值;y(k)为系统输出量的第k次真值,y(k-1)为系统输出量的第k-1次真值,以此类推;u(k)为系统的第k个输入值,u(k-1)为系统的第k-1个输入值;v(k)为均值为0的不相关随机噪声。 1. 数据生成

本部分需要生成系统的输入输出数据以及噪声数据。 1)白噪声的生成

辨识数据通常包含有噪声,如果该噪声相关性较弱或者强度很小,可近似看作白噪声。本次实验问题中v(t)?N(0,1),即服从标准正态分布,可以将噪声看作为服从正态分布的白噪声过程,在Matlab中可以由randn函数生成。

2)输入数据的生成

伪随机二进制序列(Pseudo Random Binary Sequence, PRBS)是广泛应用的一种伪随机序列,所谓“二进制”是指序列中每个随机变量只有“0”或“1”两种逻辑状态。伪随机二进制序列可由多级线性反馈移位寄存器组成的随机信号发生器产生,其中具有最长循环周期的线性移位寄存器序列是伪随机二进制序列最常见的一种形式,简称M序列(Maximal Length Sequence)。M序列由于具有近似白噪声的性质,而且工程上易于实现,能够保证较好的系统辨识精度,是普遍采用的一种辨识用输入信号。

图 2 线性反馈移位寄存器产生伪随机二进制序列结构图

以一个4级线性反馈移位寄存器产生伪随机二进制序列为例,如图 2所

示。假设4个移位寄存器a0,a1,a2,a3输出的初态非全零,移位寄存器的工作原理是:一个移位脉冲来到后,每级移位寄存器的输出移到下一级移位寄存器作为输入,最末一级移位寄存器的输出即为伪随机二进制序列。

3)输出数据的生成

根据给定的SISO系统,可以求出z(k)的表达式:

z(k)??0.9z(k?1)?0.15z(k?2)?0.02z(k?3)?0.7u(k?1)

?0.15u(k?2)??v(k)?1.0e(k?1)?0.41e(k?2)其理想系数值为

a1?0.9,a2?0.15,a3?0.02,b1?0.7,b2??1.5,c1?1.0,c2?0.41.

可以根据生成的白噪声序列和输入序列,以及必要的0初始值,带入表达式即可得到采样输出数据。 2. 差分模型阶检验

在实际场景中,辨识模型的阶数和纯时延往往是未知的,在很多情况下仅仅依靠猜测。在模型的阶数和纯时延不确定时,设系统模型为

y(t)???aiy(t?i)??bjy(t?i)??(t)i?1j?1nn

其中n为模型的阶数,?(t)?C(z?1)e(t)

模型的阶估计可以采用多种方法,本实验采用比较简单易行的损失函数检验法。定义预报误差(噪声方差的估计值)的平方和为损失函数,即

1N?(t)JN???Ni?1

当n从小增大时,JN应随之减小,当n增大到某一值时,JN应近似白噪声过程。采用以下的检验原则:在n-1这一点,JN最后一次出现陡峭的下降,此

??n。 后就近似地保持不变或只有微小的下降,则取n3. 参数辨识模型

在系统辨识和参数估计领域中,最广泛的估计方法时最小二乘法和极大似然估计法。最小二乘法作为一种最基本的估计方法应用极为广泛,其他的大多数估计算法都与最小二乘法有关。它既可用于动态系统,也可用于静态系统;可用于线性系统,也可用于非线性系统;可用于离线估计,也可用于在线估计。在随机环境下利用最小二乘法时,无须知道观测数据的概率统计信息,而这种方法获得的结果,却有相当好的统计性质。

最小二乘参数估计方法来源于数理统计的回归分析,它能提供一个在最小方差意义上与实验数据最好的你和的模型。该估计在一定条件下有最佳的统计特性,即它们是一致的,无偏的和有效的。最小二乘法时一个经典的方法,概念简明,适应范围广,在一些情况下,可得到与极大似然法一样好的统计效果,它能很方便地与其他辨识算法建立关系。 (1)递推最小二乘算法

当获得一批数据后,可一次求得相应的参数估计值,这样处理问题的方法称为一次完成算法或批处理算法。它在理论研究方面有许多方便之处,但当矩阵的维数增加时,矩阵求逆运算的计算量会急剧增加,将给计算机的计算速度和存储量带来负担,而且不适合在线辨识,无法跟踪参数随时间变化的情况。为了减少计算量,减少数据在计算机中所占的存储量,也为了实时地辨识出动态系统的特性,在用最小二乘法进行参数估计时,把它转化成参数递推的估计。

参数递推估计是指被辨识的系统,每取得一次新的测量数据后,就在前一次估计结果的基础上,利用新引入的测量数据对前一次估计的结果进行修正,从而递推地得出新的参数估计值。这样,随着新测量数据的引入,一次接一次地进行参数估计,直到估计值达到满意的精确程度为止。最小二乘递推算法的基本思想可以概括为:

?(k)=上次估计值??(k?1)+修正项 当前的估计值??(k)是在旧的估计值??(k?1)的基础上,利用新的观测数据对旧的即新的估计值?估计值进行修正而成的。

考虑如下模型:A(z?1)z(k)?B(z?1)u(k)?v(k),其中u(k),z(k)分别是系统的输入和输出;v(k)是均值为零,方差为一的不相关白噪声。且满足:

?A(z?1)?1?a1z?1?a2z?2?......?anz?n ??1?1?2?m?B(z)?b1z?b2z?......?bmz?h(k)?[?z(k?1),...,?z(k?n),u(k?1),...u(k?m)]T令?

??[a,a,...a,b,b,...b]12n12m?则使用加权最小二乘参数估计递推算法(Recursive Weighted Least Squares, RWLS)有:

?(k)???(k?1)?K(k)[z(k)?hT(k)??(k?1)]???1?1T?K(k)?P(k?1)h(k)[h(k)p(k?1)h(k)?]? ?(k)??P(k)?[I?K(k)hT(k)]P(k?1)?T?h(k)?[?z(k?1),...?z(k?n),u(k?1),...,u(k?m)] ?

图 3 最小二乘递推辨识参数估计过程中信息的变换

可以看出,取?(k)?1的时候,加权最小二乘估计就退化成了最小二乘参数估计的递推算法(Recursive Least Squares, RLS)。加权参数围内选择,如果选

1可以在(0,1]范?11?1,所有的采样数据都是等同加权的,如果??1,?(k)?(k)则表示对新近获得的数据给予充分大的加权因子,而削弱历史观测数据的影响。

?(0)和P(0)。 实际计算时,需要首先确定初始参数??P(0)??2I?为充分大实数一般说来选取 ?

??(0)???为充分小的向量对于这样的系统,使用最小二乘法参数估计的递推算法进行辨识可以得到无偏估计,但是如果噪声模型必须用C(z?1)v(k)表示时,此时就无法得到无偏估计了,因为该方法没有把噪声模型考虑进去。

使用递推最小二乘法进行系统辨识的过程如图4所示。 (2)增广最小二乘法

当噪声均值为0时,最小二乘参数估计算法为无偏估计;当噪声的均值不为0时,最小二乘参数估计算法为有偏估计。为了解决最小二乘参数估计的有偏性,

将噪声模型的辨识同时考虑进去,因此称为增广最小二乘法。该算法可以看成是对一般最小二乘参数辨识算法的简单推广或扩充,因此又称为扩充最小二乘算法。

考虑如下模型:A(z?1)z(k)?B(z?1)u(k)?C(z?1)v(k),其中u(k),z(k) 分别是系统的输入和输出;v(k)是均值为零,方差为一的不相关白噪声。且满足:

?A(z?1)?1?a1z?1?a2z?2?...?anz?n??1?1?2?m ?B(z)?b1z?b2z?...?bmz?C(z?1)?1?cz?1?cz?2?...?cz?v12v?在模型阶次n,m,v已经确定的情况下,令

?h(k)?[?z(k?1),...,?z(k?n),u(k?1),...u(k?m),v(k?1),...v(k?v)]T ?T??[a1,a2,...an,b1,b2,...bm,c1,c2,...,cv]?由于v(k)是白噪声,所以利用增广最小二乘法这一形式上的变换,即可获得参数?的无偏估计。不过由于数据向量h(k)中包含着不可测的噪声量

v(k?1),v(k?2),...v(k?v),因此要用相应的估计值代替。当k?0,v(k)?0;当

T,即可得递推公式如下: k?0,v(k)?z(k)?h(k?)?(k?1)?(k)???(k?1)?K(k)v??(k)??K(k)?P(k?1)h(k)[hT(k)P(k?1)h(k)?1]?1?? P(k)?[I?K(k)hT(k)]P(K?1)??T?(k?1)??(k)?z(k)?h(k)????(k?1),...?v?(k?v)]T?h(k)?[?z(k?1),...?z(k?n),?u(k?1),...?u(k?m),?v?P(0)?I一般说来选取初值 ?

?(0)?0?增广最小二乘递推算法扩充了最小二乘法的参数向量?和数据向量h(k)的维数,把噪声模型的辨识同时考虑进去。最小二乘法的许多结论对它都是适用的,但最小二乘法只能获得模型的参数估计,对于有色噪声,也就是噪声模型必须用

C(z?1)v(k)表示时,只能采用增广最小二乘递推算法,方可获得无偏估计。这是最小二乘参数估计的递推算法不可代替的。

增广最小二乘算法的流程如图5所示。

图4 递推最小二乘参数辨识流程图

图5 增广最小二乘算法流程图

三、Matlab仿真及运行结果

在本次实验中,?取值为1,则系统辨识对象为:

z(k)??0.9z(k?1)?0.15z(k?2)?0.02z(k?3)?0.7u(k?1)?1.5u(k?2)??v(k)?1.0e(k?1)?0.41e(k?2)1. 差分模型的阶检验

在实际应用场景中,模型的阶数和纯时延往往是未知的,在此种情况下,一般采用如下方法来确定模型的阶数:固定一个阶数n,当n从小增大时,定义损失函数JN应随之减小,当n增大到某一值时,JN应近似白噪声过程。在n-1这一点,JN最后一次出现陡峭的下降,此后就近似地保持不变或只有微小的下降,

??n。使用Matlab进行模型阶数确定代码如下: 则取n%%%%%%%%%%%%%噪声方差的估计值和损失函数法定阶%%%%%%%%%% clear close all; L=100;

y1=1;y2=1;y3=1;y4=0; for i=1:L+5;

x1=xor(y3,y4); %第一个移位寄存器的输入信号 x2=y1; %第二个移位寄存器的输入信号 x3=y2; %第三个移位寄存器的输入信号 x4=y3; %第四个移位寄存器的输入信号

y(i)=y4; %第四个移位寄存器的输出,即M序列,幅值为“0”或“1”

if y(i)>0.5;

u(i)=-1; %M序列的值为1时,辨识的输入取-1 else

u(i)=1; %M序列为0时,输入取1

end

y1=x1;y2=x2;y3=x3;y4=x4;%移位寄存器的输出序列 end

v=randn(L+5,1);

%--------- ksi(k)=lamda*v(k)-ksi(k-1)-0.41*ksi(k-2)--------------% ksi(2) = 0;ksi(1) = 0; %设ksi的前两个初始值为0 lamda = 1; for k=3:L+5;

ksi(k) = lamda*v(k) - ksi(k-1) - 0.41*ksi(k-2);

end

z(3)=0;z(2)=0;z(1)=0; %取z的前三个初始值为零 for k=4:L+5;

z(k) = -0.9*z(k-1) - 0.15*z(k-2) - 0.02*z(k-3) + 0.7*u(k-1) - 1.5*u(k-2) + ksi(k); %理想辨识输出采样信号 end

% 模型阶次n=1 for i=1:L

H1(i,1)=z(i);; H1(i,2)=u(i); end

estimate1=inv(H1'*H1)*H1'*z(2:L+1)';

D1=(z(2:L+1)'-H1*estimate1)'*(z(2:L+1)'-H1*estimate1)/L; %噪声方差的估计值 AIC1=L*log(D1)+4*1; % 模型阶次n=2 for i=1:L

H2(i,1)=z(i+1);; H2(i,2)=z(i); H2(i,3)=u(i+1); H2(i,4)=u(i); end

estimate2=inv(H2'*H2)*H2'*z(3:L+2)';

D2=(z(3:L+2)'-H2*estimate2)'*(z(3:L+2)'-H2*estimate2)/L; %噪声方差的估计值 AIC2=L*log(D2)+4*2; % 模型阶次n=3 for i=1:L

H3(i,1)=z(i+2); H3(i,2)=z(i+1); H3(i,3)=z(i); H3(i,4)=u(i+2);

H3(i,5)=u(i+1); H3(i,6)=u(i); end

estimate3=inv(H3'*H3)*H3'*z(4:L+3)';

D3=(z(4:L+3)'-H3*estimate3)'*(z(4:L+3)'-H3*estimate3)/L; %噪声方差的估计值 AIC3=L*log(D3)+4*3; % 模型阶次n=4 for i=1:L

H4(i,1)=z(i+3); H4(i,2)=z(i+2); H4(i,3)=z(i+1); H4(i,4)=z(i); H4(i,5)=u(i+3); H4(i,6)=u(i+2); H4(i,7)=u(i+1); H4(i,8)=u(i); end

estimate4=inv(H4'*H4)*H4'*z(5:L+4)';

D4=(z(5:L+4)'-H4*estimate4)'*(z(5:L+4)'-H4*estimate4)/L; %噪声方差的估计值 AIC4=L*log(D4)+4*4;

% 模型阶次n=5 for i=1:L

H5(i,1)=z(i+4); H5(i,2)=z(i+3); H5(i,3)=z(i+2); H5(i,4)=z(i+1); H5(i,5)=z(i); H5(i,6)=u(i+4); H5(i,7)=u(i+3);

H5(i,8)=u(i+2); H5(i,9)=u(i+1); H5(i,10)=u(i); end

estimate5=inv(H5'*H5)*H5'*z(6:L+5)';

D5=(z(6:L+5)'-H5*estimate5)'*(z(6:L+5)'-H5*estimate5)/L; %噪声方差的估计值 AIC5=L*log(D5)+4*5;

plot(1:5,[AIC1 AIC2 AIC3 AIC4 AIC5]) grid on

title('损失函数法判断模型阶次') xlabel('阶次') ylabel('损失函数')

程序运行结果如图6所示:

图6 模型阶次的判定

由图6可知,当系统阶次从1到5变化时,在n=3及以后,损失函数只有微小的下降,在n=4以后又出现上升的趋势,所以取n=3作为模型的阶次。

2. 参数辨识

(1)递推最小二乘法

根据前文所述递推最小二乘法算法流程,编写递推最小二乘法程序如下:

% 递推最小二乘辨识 clc clear all

%采用M序列方法产生输入数据 L=90;?个数据 namenda=1;

y1=1;y2=1;y3=1;y4=0; u_f=2; for i=1:L

x1=xor(y3,y4); x2=y1; x3=y2; x4=y3; y(i)=y4; if y(i)>0.5 u(i)=-u_f; else

u(i)=u_f; end

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

v=1*randn(L,1); eb(2)=0;eb(1)=0; for k=3:L

eb(k)=-eb(k-1)-0.41*eb(k-2)+namenda*v(k); end

z(3)=0;z(2)=0;z(1)=0; for k=4:L;

z(k)=-0.9*z(k-1)-0.15*z(k-2)-0.02*z(k-3)+0.7*u(k-1)-1.5*u(k-2)+eb(k); end figure(1) i=1:30; subplot(2,1,1) stem(u(i));

title('输入M序列') grid on subplot(2,1,2) stem(z(i)); title('输出序列') grid on; %

c0=[0.001 0.001 0.001 0.001 0.001]'; p0=10^3*eye(5,5); E= 0.0000005; c=[c0,zeros(5,L-1)]; e=zeros(5,L); %

for k=4:L

h1=[-z(k-1),-z(k-2),-z(k-3),u(k-1),u(k-2)]'; k1=p0*h1*inv(h1'*p0*h1+1); c1=c0+k1*(z(k)-h1'*c0); e1=c1-c0; e2=e1./c0; e(:,k)=e2; c0=c1; c(:,k)=c1;

p1(:,:,k)=p0-k1*k1'*[h1'*p0*h1+1]; p0=p1(:,:,k); if abs(e2)<=E N=k; break; end N=k; end

% 递推最小二乘仿真图 a1_f=c(1,N) a2_f=c(2,N) a3_f=c(3,N) b1_f=c(4,N) b2_f=c(5,N)

a1=c(1,1:N); a2=c(2,1:N);a3=c(3,1:N);b1=c(4,1:N); b2=c(5,1:N); ea1=e(1,:); ea2=e(2,:); ea3=e(3,:);eb1=e(4,:); eb2=e(5,:); i=1:N; figure(2)

plot(i,a1,'r',i,a2,'b',i,a3,'y',i,b1,'k',i,b2,'g'); legend('a1','a2','a3','b1','b2'); grid on;

title('递推最小二乘参数估计') figure(3) i=1:30;

plot(i,ea1(1:30),'r',i,ea2(1:30),'b',i,ea3(1:30),'y',i,eb1(1:30),'k',i,eb2(1:30),'g'); grid on;

legend('参数a1误差','参数a2误差','参数a3误差','参数b1误差','参数b2误差'); title('被估参数误差收敛情况')

程序运行结果如图7至图9所示。

图7 输入及输出信号

图8 递推最小二乘参数估计

图9 被估参数误差收敛情况

使用递推最小二乘算法进行系统辨识的结果如表 1所示。

表 1 递推最小二乘算法的辨识结果

参数

0.9 0.9367

0.15 0.1591

0.02 -0.0138

0.7 0.6275

-1.5 -1.3558

真值 估计值

从上表中可以看出,对于含有有色噪声的系统,采用递推最小二乘法进行辨

识获得结果有较大误差,并不是无偏估计。所以,一般情况下,对于含有有色噪声的系统应采用增广递推最小二乘算法进行辨识。

(2)增广最小二乘法

根据前文所述增广最小二乘法算法流程,编写增广最小二乘法程序如下:

%%%%%%%%%%%%%%%%%%增广最小二乘法的参数辨识算法%%%%%%%%%%%%%%%%%%% clear all

close all

%--------------------------M序列的产生-----------------------% L=60 ; %移位寄存器产生的M序列周期(取L=60) y1=1;y2=1;y3=1;y4=0; %四个移位寄存器输入的初值 for i=1:L;

x1=xor(y3,y4); %第一个移位寄存器输入的信号 x2=y1; %第二个移位寄存器输入的信号 x3=y2; %第三个移位寄存器输入的信号 x4=y3; %第四个移位寄存器输入的信号

y(i)=y4; %第四个移位寄存器的输出,即M序列,幅值为0或1 if y(i)>0.5;

u(i)=-1; %M序列的值为1时,辨识的输入为-1 else

u(i)=1; %M序列的值为0时,辨识的输入为1 end

y1=x1;y2=x2;y3=x3;y4=x4; %移位寄存器的输出序列,为下一次的输入信号做准备 end figure(1);

subplot(3,1,1);

stem(u),grid on %画出M序列输入信号径线图并给图形加上网格 title('输入信号(M序列)')

%-----------------------------随机噪声的产生--------------------% v=randn(1,L); %产生一组L=60个正态分布的噪声 subplot(3,1,2);

plot(v),grid on %画出随机噪声信号 title('随机噪声信号e(k)')

%---------------------------实际噪声的产生-----------------------% %--------- ksi(k)=lamda*v(k)-ksi(k-1)-0.41*ksi(k-2)--------------% ksi(2) = 0;ksi(1) = 0; %设ksi的前两个初始值为0 lamda = 1; for k=3:L;

ksi(k) = lamda*v(k) - ksi(k-1) - 0.41*ksi(k-2); end

subplot(3,1,3) plot(ksi), grid on

title('实际噪声信号\\xi(k)')

%--------------------------辨识过程----------------------------%

z(3)=0;z(2)=0;z(1)=0;zm(3)=0;zm(2)=0;zm(1)=0; %输出采样,不考虑噪声时系统输出,不考虑噪声时模型输出,模型输出的初值

c0=[0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001]'; %直接给出辨识被辨识参数的初始值,即一个充分小的实向量

p0=10^6*eye(8,8); %直接给出初始向量P0,即一个充分大的实数单位矩阵 c=[c0,zeros(8,L-1)]; %被辨识参数参数矩阵的初始值及大小 e=zeros(8,L); %相对误差的初始值及大小 for k=4:L; %开始求K

z(k) = -0.9*z(k-1) - 0.15*z(k-2) - 0.02*z(k-3) + 0.7*u(k-1) - 1.5*u(k-2) + ksi(k); %系统在M序列下的输出采样信号

h1=[-z(k-1),-z(k-2),-z(k-3),u(k-1),u(k-2),v(k),ksi(k-1),ksi(k-2)]'; %为求K(k)做准备

x=h1'*p0*h1+1;x1=inv(x);k1=p0*h1*x1; %K d1=z(k)-h1'*c0;c1=c0+k1*d1; e1=c1-c0;e2=e1./c0; e(:,k)=e2;

c0=c1;

%给下一次用

%辨识参数c

%求参数误差的相对变化

c(:,k)=c1; %把递推出的辨识参数c的列向量加入辨识参数矩阵

p1=p0-k1*k1'*[h1'*p0*h1+1]; % find p(k)

p0=p1; %给下次的计算使用 end %整个循环结束 c,e, % 分离变量

a1=c(1,:);a2=c(2,:);a3=c(3,:);b1=c(4,:);b2=c(5,:); %分离出a1,a2,a3,b1,b2 d1=c(6,:);d2=c(7,:);d3=c(8,:); %分离出的d1,d2,d3 % 分离变量的收敛情况

ea1=e(1,:);ea2=e(2,:);ea3=e(3,:);eb1=e(4,:);eb2=e(5,:); %分离出a1,a2,b1,b2的收敛情况 ed1=e(6,:);ed2=e(7,:);ed3=e(8,:); %分离出d1,d2,d3的收敛情况 figure(2); i=1:L;

plot(i,a1,'r',i,a2,'r:',i,a3,'r+',i,b1,'b',i,b2,'b:',i,d1,'g',i,d2,'g:',i,d3,'g+') grid on

legend('a1','a2','a3','b1','b2','c1','c2','c3') title('辨识曲线')

figure(3); i=1:L;

plot(i,ea1,'r',i,ea2,'r:',i,ea3,'r+',i,eb1,'b',i,eb2,'b:',i,ed1,'g',i,ed2,'g:',i,ed3,'g+') %画出各个参数的收敛情况 grid on

legend('ea1','ea2','ea3','eb1','eb2','ec1','ec2','ec3') title('辨识误差曲线') figure(4);

i=1:L;plot(i,z(i),'g'), grid on;

title('辨识系统的输出响应') %画出被辨识系统的输出响应

%显示被辨识参数及参数收敛情况

程序运行结果如图10至图13所示。

图10输入数据及噪声

图11 辨识曲线

图12辨识误差曲线

图13辨识的输出响应

使用增广最小二乘算法进行系统辨识的结果如表 2所示。

表 2 增广最小二乘算法的辨识结果

参数

0.9

0.15 0.15

0.02 0.02

0.7 0.7

-1.5 -1.5

1.0 1.0

真值 -1.0 -0.4 -1.0 -0.4

估计值 0.9

从上表中可以看出,对于含有有色噪声的系统,采用增广最小二乘法进行系

统辨识可以取得无偏估计。

四、模型与误差分析

对系统进行辨识后,需要对辨识所得的系统进行进一步的模型验证,以观察所得的模型是否是对当前观测数据的最佳选择。对模型进行验证,可以采用事先生成的输入数据,分别输入到已知模型和经过系统辨识所得的模型中,检验所得模型是否存在问题。如果检验失败,可能存在的问题是:辨识所用的一组数据包含的信息部足或所选的模型类不合适。

对本实验中的已知对象及经过系统辨识所得的模型,选取一组输入信号为:

u?[1,?1,1,?1,1,1,?1,1,1,?1,1,1,?1,?1,?1,1]

比较原参考对象的输出以及辨识模型的输出。具体代码如下: %%%%%%%%%%%%%模型检验%%%%%%%%%%%%%%%%%

clear all close all

u=[1,-1,1,-1,1,1,-1,1,1,-1,1,1,-1,-1,-1,1];%系统输入信号 L=20

z=zeros(1,L); x=zeros(1,L); y=zeros(1,L); v=randn(1,L);

%---------------------------实际噪声的产生-----------------------% %--------- ksi(k)=lamda*v(k)-ksi(k-1)-0.41*ksi(k-2)--------------% ksi(2) = 0;ksi(1) = 0; %设ksi的前两个初始值为0 lamda = 1;

for k=3:L;

ksi(k) = lamda*v(k) - ksi(k-1) - 0.41*ksi(k-2); end

for k=4:16

z(k)=-0.9*z(k-1)-0.15*z(k-2)-0.02*z(k-3)+0.7*u(k-1)-1.5*u(k-2)+ksi(k)

%真实模型的输出

y(k)=-1.2317*y(k-1)-0.4735*y(k-2)-0.0600*y(k-3)+0.8534*u(k-1)-1.2373*u(k-2) %递推最小二乘辨识模型输出

x(k)=-0.9*x(k-1)-0.15*x(k-2)-0.02*x(k-3)+0.7*u(k-1)-1.5*u(k-2)+ksi(k)

%增广最小二乘辨识模型的输出 end figure(1); subplot(3,1,1) stem(u) ,grid on title('系统输入信号') subplot(3,1,2) i=1:1:L;

plot(i,z,'r',i,y,'b'),grid on

legend('真实模型输出','递推最小二乘辨识模型') title('真实模型输出和递推最小二乘辨识模型输出值') subplot(3,1,3) i=1:1:L;

plot(i,z,'r',i,x,'g'),grid on

legend('真实模型输出','增广最小二乘辨识模型') title('真实模型输出和增广最小二乘辨识模型输出值') figure(2); subplot(2,1,1) i=1:1:L;

plot(i,z-y), grid on;

title('真实模型与递推最小二乘辨识模型的差值') subplot(2,1,2) i=1:1:L

plot(i,z-x), grid on;

title('真实模型与增广最小二乘辨识模型的差值')

程序运行结果如图14和图15所示。

图14 不同辨识模型输出和真实系统输出对比

图15 真实模型与辨识模型输出信号的差值

由上图并结合表1和表2,分析可得

表 1 递推最小二乘算法的辨识结果

参数

0.9 0.9367

0.15 0.1591

0.02 -0.0138

0.7 0.6275

-1.5 -1.3558

真值 估计值

表 2 增广最小二乘算法的辨识结果

参数

0.9

0.15 0.15

0.02 0.02

0.7 0.7

-1.5 -1.5

1.0 1.0

真值 -1.0 -0.4 -1.0 -0.4

估计值 0.9

辨识给定的含有色噪声的系统时,最小二乘递推辨识算法的参数辨识结果是有偏差的,无法达到稳定值,但是这个误差是在[-0.5,0.5]范围内,还是可以接受的。而与最小二乘递推辨识算法相比,增广最小二乘递推辨识算法考虑了噪声模型,并且在递推到第九步时辨识结果就达到了稳定值,具有辨识速度快、辨识结果精确的特点。因此,对于含有有色噪声的系统,使用增广二乘辨识算法能够取得较好的效果。

五、实验总结

通过本次仿真实验,使我加深了对系统辨识算法的认识和了解,对于最小二乘参数辨识这种系统辨识领域中最基本最常用的方法有了较好的掌握,并通过MATLAB仿真熟悉了系统辨识的一般内容和步骤,对系统辨识的基本过程有了一个较为清晰的认识。

最后,王立琦老师这一学期给我们所带的系统辨识这门课程使我受益良多,对我的科研工作有很大的启发借鉴意义。在此十分感谢王老师的指导和帮助。

本文来源:https://www.bwwdw.com/article/gn9.html

Top