加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

系统辨识之Matlab相关分析求脉冲响应

(2013-09-29 16:30:58)
标签:

cra

系统辨识

ar

相关分析

脉冲响应

分类: 信号处理
这里用到的是Matlab系统辨识工具箱所带有的cra函数。下面通过实例说明这个函数的用法。
例:试着对一个二阶对象进行ARX建模和相关分析,并比较两种方法得到的脉冲响应和阶跃响应。
clear all
clc
[1, -0.5, 0.7];
[0.1, 0.5];
th0 poly2th(A, B);
idinput(500, 'rbs');
idsim([u, randn(500, 1)], th0);
[y, u];
ir cra(z);
 
arx(z, [2 2 0]);
imp [1; zeros(20, 1)];
irth sim(m, imp);
plot([ir, irth])
irth1 sim(th0, imp);
figure
plot([ir, irth, irth1])
 

 
程序详解:
 
th0 = poly2th(A, B);
该句建立一个多项式差分方程模型
th0 =
Discrete-time ARX model:  A(z)y(t) = B(z)u(t) + e(t)
  A(z) = 1 - 0.5 z^-1 + 0.7 z^-2                   
 
  B(z) = 0.1 + 0.5 z^-1                            
 
Sample time: 1 seconds
 
Parameterization:
   Polynomial orders:   na=2   nb=2   nk=0
   Number of free coefficients: 4
   Use "polydata", "getpvec", "getcov" for parameters and their uncertainties.
 
Status:                                                        
Created by direct construction or transformation. Not estimated.
u = idinput(500, 'rbs')
产生一个二值随机信号
y = idsim([u, randn(500, 1)], th0)
计算系统的响应,th0是上面建立的多项式模型,u是输入,randn是噪声。
ir = cra(z)
计算系统的脉冲响应估计,其中z = [y, u],也就是说包含的是输出输入信息。
至此,脉冲响应估计已经完成,信号数据保存在ir中。
下面的是通过仿真直接得到脉冲响应,用来对上面结果进行验证
m = arx(z, [2, 2, 0])
这里建立的是一个ar模型
后面的[2, 2, 0]代表ar模型的阶次,也就是na, nb, nk确定方法可以参考
从中截取一段解释
 
编程辨识的结果如下:A(:,:,1) = eye(2);
A(:,:,2) = [-1.5 0.4; -0.2 0];
A(:,:,3) = [0.7 0 ; 0.01 -0.7];
B(:,:,1) = [0 0.4 0;1 0 0];
B(:,:,2) = [0 -0.1 0;0 0 3];
B(:,:,3) = [0 0.15 0;0 0 4];
B(:,:,4) = [0 0 0;0 0 0];
B(:,:,5) = [0.2 0 0;0 2 0];
B(:,:,6) = [0.3 0 0;0 0 0];
m0 = idarx(A,B);
u = iddata([], idinput([200,3]));
e = iddata([], randn(200,2));
y = sim(m0, [u e]);
na = [2 1;2 2];
nb = [2 3 0;1 1 2];
nk = [4 0 0;0 4 1];
me = arx([y u],[na nb nk])
me.a % The estimated A-polynominal
 
 
首先na:
方程有2个,输出变量2个。所以na是2×2矩阵。
第一个方程y1,最早输出是y1(t-2),所以na是2,同理y2(t-1),所以,第二个是1。
因此, na矩阵第一行是(2,1)。

第二个方程:
最早输出是y1(t-2)和y2(t-2)。 na矩阵第二行是(2,2)。
其次nb和nk
2个方程,3个输入变量,因此nb,nk为2×3矩阵。

第一个方程:
输入u1:最晚输入是u1(t-4),最早输入是u1(t-5)。因此nk是4,nb是2(5-4+1=2)
输入u2:最晚输入是u2(t),最早输入是u2(t-2)。因此nk是0,nb是3(2-0+1=3)
输入u3:最晚输入最早输入是无。因此nk、nb都是0
nb第一行为(2,3,0) nk第一行为(4,0,0)


第二个方程:
输入u1:最晚输入是u1(t),最早输入是u1(t)。因此nk是0,nb是1(0-0+1=1)
输入u2:最晚输入是u2(t-4),最早输入是u2(t-4)。因此nk是4,nb是1(4-4+1=1)
输入u3:最晚输入u3(t-1),最早输入是u3(t-2)。因此nk=1、nb是2(2-1+1=2)
nb第一行为(1,1,2nk第一行为(0,4,1)
irth = sim(m, imp);
仿真脉冲响应
从最后结果对比可知,两种方法得到的脉冲响应非常接近。
 
另外,arx一句只是用另一种方法建立相同的模型,所以实际上,我们不需要如此,只需对th0直接进行仿真即可。
irth1 = sim(th0, imp);
plot([ir, irth, irth1])
 
意义分析
这个函数主要是用于确定系统的脉冲响应,因为我们知道,在实际系统中,很难给出一个脉冲信号,通常的方法都是通过M序列等伪随机信号进行激励,从而得到脉冲响应。之后由脉冲响应可以建立系统的数学模型。
 
 
 




0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有