24小时热门版块排行榜    

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

书寻玉

铁杆木虫 (正式写手)

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

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

您好,我想问一下,如何将闭环子空间辨识算法应用到串级控制系统啊,此时我们如果要辨识内环的模型,如何辨识呢,望您指导,感激不尽!
8楼2014-03-17 14:54:55
已阅   回复此楼   关注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的回帖

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的回帖

书寻玉

铁杆木虫 (正式写手)

引用回帖:
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的回帖
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 投票:  有多少人是今天查系统知道结果的? +15 爱看书的可乐 2026-08-26 17/850 2026-08-27 19:18 by xxniao123
[基金申请] 基金未中,这种答复是模板吗? +5 zhaosm1982 2026-08-27 6/300 2026-08-27 16:00 by lfy8008
[基金申请] 看板上这么多中的,有点像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
[文学芳草园] 梦想 +3 myrtle 2026-08-26 3/150 2026-08-27 10:01 by angelyueyi
[基金申请] 面上合作单位盖章 +3 ssyjh 2026-08-27 3/150 2026-08-27 09:59 by 阿拉贡aragon
[教师之家] 售SCI一区文章,我:8.O.551.O.5.4,科目全,可伽急 +3 LIbGuocjEEYw 2026-08-26 4/200 2026-08-27 04:33 by Ie9AyIAvGbvs
[基金申请] 2026国自然函评费到账 +22 羊腰板 2026-08-21 25/1250 2026-08-26 15:00 by zuocuiping
[基金申请] 能否退出参与的面上项目解除限项 +23 koalala 2026-08-24 26/1300 2026-08-26 14:29 by 宝贝虫子
[基金申请] 哪位高人中了,把查询到的截图贴出来让我看看,让我长长见识 +4 yuleib84 2026-08-26 5/250 2026-08-26 13:40 by yuleib84
[基金申请] 为什么国自然不能直接公布 +4 bjdxyxy 2026-08-26 4/200 2026-08-26 13:12 by qingmu1201
[基金申请] 项目信息和经费信息在系统里都可以看到了 +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
[基金申请] 牛来!米来!面来! +8 beefly 2026-08-26 8/400 2026-08-26 08:37 by xuzhipiao
[基金申请] 在坚冰还盖着北海的时候,我看到了怒放的梅花。 (金币+10) +6 ziyangfang 2026-08-25 9/450 2026-08-25 20:26 by huagongfeihu
[基金申请] 人气不行了 +11 fansofjerry 2026-08-21 11/550 2026-08-25 11:04 by 孤独的英雄6
[基金申请] 时间戳今天,20号变了 +5 archvillain 2026-08-20 5/250 2026-08-22 06:12 by hui_daxiao
[基金申请] 看来今天不会放榜了? +8 chengyan1220 2026-08-21 11/550 2026-08-21 17:52 by dcqxinyang
[基金申请] 应该是下周三26日公布了吧? +4 哈哈蛤? 2026-08-21 4/200 2026-08-21 10:58 by Vivilian
[基金申请] 基金啊基金 +4 longfie172 2026-08-20 4/200 2026-08-21 08:58 by mark mao
信息提示
请填处理意见