DOB实现例子

本文介绍了DOB(Delay-Optimized Buffering)算法的设计思路,并提供了具体的仿真结果展示,通过实例解析DOB如何在实际场景中优化性能。

DOB设计:

%% Controller & DoB design
% Setting feedback control (PD) gains
Kp=500; Kd=4;
C=tf([Kd Kp],[1]);
Cz=c2d(C,T,'matched');
Gcz=feedback(Gz*Cz,1);

% Design of a Q filter (Notice that the relative order of Gdnew(z) is 2)
w = 50*2*pi;  Q1 = tf([w],[1 w]);

syms z; z =tf('z',T); alpha = exp(-w*T);  QQ = ((1-alpha)/2*(z+1)/(z-alpha))^2;

Q = Q1*Q1;
Qz = c2d(Q,T,'matched')
Qz = Qz / dcgain(Qz);      % To make the Q(exp(j0T)) = 1
[aQ,bQ] = tfdata(Qz,'v');    % Model parameters of Q filter
% Design of DOB
GDOB = minreal(Qz*Gz^-1);
[aD,bD] = tfdata(GDOB,'v');    % Model parameters of Q*G^-1


%% Disturbance
v = zeros(1,N);
for k=2:N, v(k) = (yd(k)-yd(k-1))/T; end
for k=1:N
    g = 9.81;
    gear_ratio = 1; l = 5;    m = 20;
    d1(k) = -m*g*l*gear_ratio*sin(yd(k)*10*pi/180); % Gravity
        d2(k) = 800*(sin(2*pi*0.3*t(k))) + 500*(sin(2*pi*1.3*t(k))) + 200*(sin(2*pi*2*t(k)));
    d(k) = d1(k) + d2(k);
end

%% Simulation
y(1:3) = 0; iter = 0;
for k=1:4,
    switch(PAA),
        case 1, var(:,k) = [b(2) b(3) a(2) a(3)];   F = eye(4)*10^10; ramda = 0.8;
    end;
end
for k = 4:N,
    % Simulation by G(z), i.e., actual dynamics
    y(k) = -b(2)*y(k-1) -b(3)*y(k-2) +a(1)*ua(k) +a(2)*ua(k-1) +a(3)*ua(k-2);
    e(k) = yd(k) - y(k);
    
    dhat(k) = 1/(an(2)*bQ(1))*(...
        (aQ(2)*bn(1)*y(k) + (aQ(3)*bn(1) + aQ(2)*bn(2))*y(k-1) + (aQ(2)*bn(3)+aQ(3)*bn(2))*y(k-2) + aQ(3)*bn(3)*y(k-3) ) +...
        - ( an(2)*aQ(2)*ud(k-1) +(an(3)*aQ(2) + an(2)*aQ(3))*ud(k-2) + an(3)*aQ(3)*ud(k-3)   ) +...
        - ( an(3)*bQ(1) + an(2)*bQ(2) )*dhat(k-1) - (an(2)*bQ(3)+an(3)*bQ(2))*dhat(k-2) - an(3)*bQ(3)*dhat(k-3) ...
        );
    
    % Control
    uc(k) = Kp*e(k) + Kd*(e(k)-e(k-1))/T;   % PD control
    switch(DOB_Rejection)
        case 0, ud(k) = uc(k);     % Disturbance rejection
        case 1, ud(k) = uc(k) - dhat(k);     % Disturbance rejection
    end
    % Saturation of control input
    if ud(k) > 5000, ud(k) = 5000; end;  if ud(k) < -5000, ud(k) = -5000; end
    
    switch(PAA)
        case 1,
            phi(:,k) = [-y(k-1) -y(k-2) ud(k-1) ud(k-2)]'; % adaptive algorithm
            F = F - (F*phi(:,k)*phi(:,k)'*F)/(1+phi(:,k)'*F*phi(:,k));
            output = y(k);
            theta = theta + F*phi(:,k)*(output - theta'*phi(:,k));
            var(:,k) = theta;
            iter = 1;
    end
    
    % Disturbance (it is unknown in practice)
    ua(k) = ud(k) + d(k);     % Actual input with a disturbance. The control algorithm has no information on d(k)
end

仿真结果:

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值