matlab辨识函数ar多通道,AR模型之纠结与predict函数
楼主,你好。
最近我也在研究这AR模型。
楼主问题挺多的哈,下面一个一个解答。
Q1 这里n是一个多项式表达式,m是一个iddata数据,这么理解对吗
A: 我认为是对的。MATLAB—System Identification 工具箱中使用“类”的数据。Iddata就是一个数据的类。对于类的数据,比方说x属于iddata类,输入y=get(x); 就可以查看类的具体数据值(结构体)。Iddata 中含有的属性有 “Domain”,”Name”,”OutputData”等。n是一个多项式的类。
Q2 predict函数
A: 楼主对于predict函数的参数意义存在误解。
函数:yp = predict(m,data,k)
输入: m – 模型类,data—iddata类,k--大于0的整数,不说明则默认无穷大
输出: yp – 预测数据,属于iddata类
功能: 根据输出输入数据(output-imput data) data,按照模型m,估计输出。K为向前预测的步数。
注意:这里的k和楼主理解的k不一样。并不是说k=10 就是把长度为100的时间序列向后推10步得到长110的时间序列。
这里解释下k步向前预测(与其说“预测”,不如说 “估计”这个词更好点)是个什么意思,即:已知0时刻到t时刻的输出数据,0时刻到t+k-1的输入数据,对t+k 时刻的输出值进行估计。对于时间序列来说,时间序列是没有输入数据仅有输出数据的。假如有长度100的时间序列y(1),y(2),….y(100),假设k=10,意义就是可以利用已知的输出y(1),y(2),…y(80)来估计t=90时刻的输出y^(90) (注:“^”代表估计的意思)。而y^(1)~y^(10) 没有可利用的已知输出,则默认为0,自然y^(1)~y^(10)=0。
楼主可能又要问:我一个20阶的AR模型在估计y^(90)的时候最多也就需要y(70)到y(89)的数据就够了啊。我只能说predict函数不是按AR模型来算的,而是将AR模型进行了转换(好像是转成了状态空间模型,源码太复杂了,我也看不太懂),所以估计y^(90)的时候y(1),y(2),…y(80)都用到了。说了这么多,总之为了方便就取k=1。
而且predict函数在上述例子中估计到第100个估计值后就不估计了,楼主想要的那种算到第110个数据的那种函数目前我也不知道,哪位网友发现了麻烦回复我一下。我觉得也就提出AR模型的系数按照AR模型定义自己编程算好点了•••
(详见:System Identification Theory for the User Second Edition LENNART LJUNG 清华大学出版社 P70)
Q3: z=idpoly([y],[]); %把多项式转换成模型
This model was not estimated from data. 这是什么意思?难道我的数据没有用到吗
A: 前面说过z是类数据。Z不是由数据直接估计得到的模型,而是通过y模型转换而来的,所以Z里面的属性为:This model was not estimated from data.
Q4: m=iddata([x],[]); %Question2:这一行是什么用处?
A: 将数组数据x转化为iddata类的数据m
#5 问题见 Q2