其他分享
首页 > 其他分享> > 最小二乘法以及拓展的最小二乘法辨识电机参数

最小二乘法以及拓展的最小二乘法辨识电机参数

作者:互联网

1.分别用最小二乘法、递推最小二乘法、带遗忘因子的递推最小二乘法三种方法辨识一阶电机模型的参数值a,b

电机的一阶模型传函表达式

                                                           G(s)=\frac{a}{s+b}

1.最小二乘法辨识:

    \Phi是由输入输出构成的矩阵,\Theta是电机待辨识的a,b值

clear all
close all
randn('seed',1000);   %seed表示采用v4版本的随机数产生器,100表明选定了一个初状态  随便什么数都可以
v=randn(1,100);      %产生一组16个N(0,1)的高斯分布的随机噪声

L=15;   %因为是4阶的   由N=2^n-1所计算出来%M序列长度2^4-1
%产生M序列
y1=1;y2=1;y3=1;y4=0;%四个移位寄存器的输出初始值
for i=1:L
    x1=xor(y3,y4);
    x2=y1;
    x3=y2;
    x4=y3; 
    y(i)=y4;
    if y(i)>0.5
        u(i)=-5; %幅值为5
    else
        u(i)=5;
    end
    y1=x1;y2=x2;y3=x3;y4=x4;
end

z=zeros(1,15); %定义输出观测值的长度

for i=2:15
    z(i)=0.3679*z(i-1)+500*u(i)+1*v(i); %观测值
end

for i=2:15
    H(i,1)=z(i-1);
    H(i,2)=u(i);
end
Y=zeros(15,1);
for i=1:15
    Y(i,1)=z(i);
end
H;
theta=(inv(H'*H))*H'*Y;
theta(1)
theta(2)

2.递推最小二乘法:

clear all
close all
randn('seed',1000);   %seed表示采用v4版本的随机数产生器,100表明选定了一个初状态  随便什么数都可以
v=randn(1,100);      %产生一组16个N(0,1)的高斯分布的随机噪声

L=100;   %因为是4阶的   由N=2^n-1所计算出来%M序列长度2^4-1
%产生M序列
y1=1;y2=1;y3=1;y4=0;%四个移位寄存器的输出初始值
for i=1:L
    x1=xor(y3,y4);
    x2=y1;
    x3=y2;
    x4=y3; 
    y(i)=y4;
    if y(i)>0.5
        u(i)=-5; %幅值为5
    else
        u(i)=5;
    end
    y1=x1;y2=x2;y3=x3;y4=x4;
end

z=zeros(1,100); %定义输出观测值的长度

%计算参数  RLS
theta0=[0.0001,0.0001]';
P0=10^5*eye(2,2);

for i=2:100
    z(i)=0.3679*z(i-1)+500*u(i)+1*v(i); %观测值
    H=[z(i-1),u(i)]';%构造一个输入输出矩阵
    k=P0*H*inv(1+H'*P0*H);
    error=z(i)-H'*theta0;
    theta1=theta0+k*error;
    P1=(eye(2)-k*H')*P0;   %P(N+1)
    P0=P1;
    theta0=theta1;
end
theta1(1)
theta1(2)

 

3.遗忘因子的递推最小二乘法

            

 

clear all
close all
randn('seed',1000);   %seed表示采用v4版本的随机数产生器,100表明选定了一个初状态  随便什么数都可以
v=randn(1,100);      %产生一组16个N(0,1)的高斯分布的随机噪声

L=100;   %因为是4阶的   由N=2^n-1所计算出来%M序列长度2^4-1
%产生M序列
y1=1;y2=1;y3=1;y4=0;%四个移位寄存器的输出初始值
for i=1:L
    x1=xor(y3,y4);
    x2=y1;
    x3=y2;
    x4=y3; 
    y(i)=y4;
    if y(i)>0.5
        u(i)=-5; %幅值为5
    else
        u(i)=5;
    end
    y1=x1;y2=x2;y3=x3;y4=x4;
end

z=zeros(1,100); %定义输出观测值的长度

%计算参数  RLS
theta0=[0.0001,0.0001]';
P0=10^5*eye(2,2);


d=0.95
for i=2:100
    z(i)=0.3679*z(i-1)+500*u(i)+1*v(i); %观测值
    H=[z(i-1),u(i)]';%构造一个输入输出矩阵
    K=P0*H*inv(d+H'*P0*H);
    error=z(i)-H'*theta0;
    theta1=theta0+K*error;
    P1=(1/d)*(eye(2)-K*H')*P0;   %P(N+1)
    P0=P1;
    theta0=theta1;
end
theta1(1)
theta1(2)

标签:y3,end,P0,最小,y1,100,辨识,y4,乘法
来源: https://blog.csdn.net/liujiwen1104/article/details/119772285