标签:
cra系统辨识ar相关分析脉冲响应 |
分类: 信号处理 |
这里用到的是Matlab系统辨识工具箱所带有的cra函数。下面通过实例说明这个函数的用法。
例:试着对一个二阶对象进行ARX建模和相关分析,并比较两种方法得到的脉冲响应和阶跃响应。
clear all
clc
A
B
th0
u
y
z
ir
m
imp
irth
plot([ir,
irth1
figure
plot([ir,
|
程序详解:
th0 = poly2th(A,
B);
该句建立一个多项式差分方程模型
th0 =
Discrete-time ARX model:
Sample time: 1 seconds
Parameterization:
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)。
|
irth = sim(m,
imp);
仿真脉冲响应
从最后结果对比可知,两种方法得到的脉冲响应非常接近。
另外,arx一句只是用另一种方法建立相同的模型,所以实际上,我们不需要如此,只需对th0直接进行仿真即可。
irth1 = sim(th0, imp);
plot([ir, irth, irth1])
意义分析
这个函数主要是用于确定系统的脉冲响应,因为我们知道,在实际系统中,很难给出一个脉冲信号,通常的方法都是通过M序列等伪随机信号进行激励,从而得到脉冲响应。之后由脉冲响应可以建立系统的数学模型。
后一篇:[转载]M序列的生成