24小时热门版块排行榜    

查看: 2825  |  回复: 9
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

书寻玉

铁杆木虫 (正式写手)

[求助] MIMO系统子空间系统辨识算法求助 已有1人参与

我想问下,大家有没有做过MIMO系统的子空间系统辨识啊,最好是双输入双输出系统的辨识,有没有相关的资料共享下,最好是MATLAB的例程。我按书上的方法编制了MATLAB程序,算出来不对,其中B、D怎么用最小二乘法求呢,最好有详细的资料提供下啊,不胜感激啊。
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

southisland

新虫 (初入文坛)

【答案】应助回帖

找到了当时写的matlab函数
function [A,B,C,D]=mysubid(Y,U,I,obqr)
%基本的线性开环子空间辨识算法
%Y:辨识输出信号,  U:辨识输入信号,  I:Hankel矩阵行数
%obqr:如果使用QR分解的斜向投影,则置于非0的任意数
%obqr==0,使用斜向投影
%计算时可选直接投影或者基于QR分解的斜向投影
%extract matrices A & C from matric Gam,then Solve least square:
%M=L*X*[B;D]
% 2012-4-11 rewrite 2012-5-11
%2012-7-11 增加可测噪声模型的辨识

%%%START%%%
if (nargin < 4);obqr = 0;end
[m,N]=size(U);p=size(Y,1);
J=N-2*I+1;
% obqr = 1;
%% STEP 1: 构造输入输出数据hankel矩阵块% HklU=blkhank(U,I,J );
Up=[];Yp=[];Uf=[];Yf=[];
for i=1:I
    Up=[Up;U(:,i:J+i-1)];
    Uf=[Uf;U(:,I+i:J+I+i-1)];
    Yp=[Yp;Y(:,i:J+i-1)];
    Yf=[Yf;Y(:,I+i:J+I+i-1)];
end

%% STEP 2:投影并加权(直接投影和QR分解斜向投影)
%直接正交投影
Wp=[Yp;Up];
if obqr==0
    PI_Uf=eye(J)-Uf'*pinv(Uf*Uf')*Uf;
    O=Yf*PI_Uf*Wp'*pinv(Wp*PI_Uf*Wp')*Wp;
else
    %采用QR分解计算斜向投影
    YuW=[Uf;Wp;Yf];
    [yu_q,yu_r]=qr(YuW');
    R= yu_r';% R = R(1:2*I*(m+p),1:2*I*(m+p));         % Truncate
    Q=yu_q';
    O=R(I*p+2*I*m+1:2*I*(m+p),p*I+1:I*(2*p+m))*inv(R(m*I+12*m+p)*I,m*I+12*m+p)*I))...
        *R(m*I+12*m+p)*I,12*m+p)*I)*Q(12*m+p)*I,;
end

%% STEP 3:SVD分解,选择系统状态阶数
[Uu,S,V] = svd(O);
ss = diag(S)';
lnss=log(ss);
h = bar(1:I*p,lnss,'b');
grid on;title('Singular Value Histogram');xlabel('The Number of Singular Value ');ylabel('Singular Value');
n = input('  System order ? ');%选择系统阶数

%% STEP 4:由Gam利用其移不变性计算C和A
U1=Uu(:,1:n);V1=V(1:n,;
r=sqrt(S(1:n,1:n));
Gam=U1*r;
Xf=r*V1;
C_h=Gam(1:p,1:n);
A_h=pinv(Gam(1:p*(I-1),1:n))*Gam(p+1:p*I,1:n);

%% STEP 5:计算B和D: 对于M=L*X*[B;D]采用LS计算B,D
tao=Gam';%注意:转置矩阵
PI_Gam=eye(size(tao,2))-tao'*inv(tao*tao')*tao;%Gam转置的正交投影算子,PI_Gam*Gam=0
Ms=PI_Gam*Yf*pinv(Uf);
for k=1:I
    M(I*p*(k-1)+1:I*p*k,=Ms(:,m*(k-1)+1:m*k);%构造M的列块矩阵
    L(I*p*(k-1)+1:I*p*k,=[PI_Gam(:,p*(k-1)+1:p*I),zeros(p*I,p*(k-1))];%构造L的块方阵
end
IG  = [eye(p),zeros(p,n);zeros(p*(I-1),p),Gam(1I-1)*p,];%构造【I,0;0,gamma】矩阵
% Solve least squares
sol_bd = (L*IG)\M;
D_h = sol_bd(1:p,;B_h = sol_bd(p+1:p+n,;
3楼2014-02-23 16:55:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 10 个回答

southisland

新虫 (初入文坛)

【答案】应助回帖

我写的一段程序,可以参考下
/////////////////////step 5 利用最小二乘计算B、D///////////////////
                /*参考[Peter Van Overschee,96]Subspace Identification for Linear Systems:
                Theory Implementation Applications,pp.56*/
                Matrix<Type> Mi,Li,MM(I*(p*I-n),m),LL(I*(p*I-n),p*I),IGamd(p*I,p+n),BD;
                Mi=trT(U2)*R31*pinv(R11);
                Li=trT(U2);
                for (int i=1;i<=I;i++)
                {
                        for(int j=1;j<=p*I-n;j++)
                        {
                                for(int k=1;k<=m;k++)
                                        MM((i-1)*(p*I-n)+j,k)=Mi(j,(i-1)*m+k);
                        }
                }
                for(int i=1;i<=I*(p*I-n);i++)
                        for(int j=1;j<=p*I;j++)
                                LL(i,j)=double(0);
                for (int i=1;i<=I;i++)
                {
                        for(int j=i;j<=I;j++)
                        {
                                for(int k=1;k<=p*I-n;k++)
                                {
                                        for(int t=1;t<=p;t++)
                                                LL((i-1)*(p*I-n)+k,(j-i)*p+t)=Li(k,(j-1)*p+t);
                                }
                        }
                }
                //设置矩阵IGamd=[Ip,0;0,Gamd]
                for (int i=1;i<=p;i++)
                {
                        for(int j=1;j<=p+n;j++)
                        {
                                if (j==i)
                                        IGamd(i,j)=double(1);
                                else
                                        IGamd(i,j)=double(0);
                        }
                }
                for (int i=1;i<=p*(I-1);i++)
                {
                        for(int j=1;j<=p;j++)
                                IGamd(p+i,j)=double(0);
                        for(int j=1;j<=n;j++)
                                IGamd(p+i,p+j)=Gamd(i,j);
                }

                //QRD<Type> qrBD;qrBD.dec(LL*IGamd);BD=qrBD.solve(MM);
                BD=pinv(LL*IGamd)*MM; //最小二乘计算BD=[D;B]

                for(int i=0;i<n+p;i++)
                {
                        if(i<p)
                                D.setRow(BD.getRow(i),i); //提取D矩阵
                        else
                                B.setRow(BD.getRow(i),i-p); //提取B矩阵
                }
                //计算算法耗时
2楼2014-02-23 16:50:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

书寻玉

铁杆木虫 (正式写手)

引用回帖:
2楼: Originally posted by southisland at 2014-02-23 16:50:39
我写的一段程序,可以参考下
/////////////////////step 5 利用最小二乘计算B、D///////////////////
                /*参考Subspace Identification for Linear Systems:
                Theory Implementation Applications,pp.56*/
                M ...

非常感谢你,能分享下其他的step吗?非常感谢啊
4楼2014-02-23 18:48:04
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

southisland

新虫 (初入文坛)

【答案】应助回帖

引用回帖:
4楼: Originally posted by 书寻玉 at 2014-02-23 18:48:04
非常感谢你,能分享下其他的step吗?非常感谢啊...

没有其他步骤了,基本的SIM算法就这几个步骤的。

[ 发自小木虫客户端 ]
5楼2014-02-24 16:45:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 为什么资助数各大高校都创新高,自己申请怎么就这么难 +8 Kittylucky 2026-08-27 8/400 2026-08-27 18:33 by raiy123
[教师之家] 导师吐槽:我怎么摊上了这么个极品研究生! +7 苏东坡二世 2026-08-23 7/350 2026-08-27 18:14 by 瞬息宇宙
[基金申请] 青基如何破局 +6 lyz123lyz 2026-08-27 7/350 2026-08-27 17:31 by 宁静致远sy
[基金申请] 国自然面上复盘~欢迎讨论 (金币+5) +10 晴天加油 2026-08-26 11/550 2026-08-27 16:35 by msuhlx
[基金申请] 看板上这么多中的,有点像50人群里49个人都是骗子的那种感觉…… +5 a089 2026-08-26 6/300 2026-08-27 14:05 by jonewore
[基金申请] 怎么看青基中了没有啊 +5 叶九微 2026-08-26 5/250 2026-08-27 10:35 by l_zh2008
[硕博家园] 售SCI一区T0P文章,我:8.O.55.1.O.54,科目齐全,可+急 +3 LIbGuocjEEYw 2026-08-26 4/200 2026-08-27 02:01 by Ie9AyIAvGbvs
[基金申请] 2026年的国家社科基金项目通讯评审的新规则与新动向、新挑战 +7 process2012 2026-08-23 10/500 2026-08-26 19:23 by hmhminy
[基金申请] 系统查不到 +10 董八千 2026-08-26 10/500 2026-08-26 16:30 by Equinoxhua
[基金申请] 2026年8月25日国自然放榜前突然收到列入评审专家邮件,有关系吗? +25 木水思豆 2026-08-25 28/1400 2026-08-26 14:53 by draco1987
[基金申请] 哪位高人中了,把查询到的截图贴出来让我看看,让我长长见识 +4 yuleib84 2026-08-26 5/250 2026-08-26 13:40 by yuleib84
[基金申请] 国合里面能看到了 +7 一怀馨秋 2026-08-26 7/350 2026-08-26 11:23 by zhaosm1982
[基金申请] 系统进不去 +4 yanglien 2026-08-26 5/250 2026-08-26 11:10 by wenfengw83
[基金申请] 项目信息和经费信息在系统里都可以看到了 +6 wittyboy 2026-08-26 14/700 2026-08-26 10:55 by wittyboy
[基金申请] 国合可查了 +3 paperzjh 2026-08-26 3/150 2026-08-26 10:41 by LemmonTr
[基金申请] 今天务委会开完了,明天出结果吗 +19 angus9576 2026-08-25 23/1150 2026-08-26 10:03 by zp519
[基金申请] 国合现在查不到了吗? +10 chengyan1220 2026-08-24 20/1000 2026-08-26 08:57 by peasantsprig
[基金申请] 明天应该可查了!? +6 chengyan1220 2026-08-23 6/300 2026-08-25 19:45 by zfd97
[基金申请] 没有任何消息-是不是就凉了 +9 图啦图啦 2026-08-24 10/500 2026-08-25 11:59 by 南海小哥
[基金申请] 应该是下周三26日公布了吧? +4 哈哈蛤? 2026-08-21 4/200 2026-08-21 10:58 by Vivilian
信息提示
请填处理意见