努力学习的小马 2023-02-13 15:26 采纳率: 85.7%
浏览 173
已结题

python设计状态观测器的问题

num=[3.08];
den=[1080,1620,72,1];

[A,B,C,D]=tf2ss(num,den);

A=[-1/30 1/30 0;0 -1/30 1/30;0 0 -1/12];
B=[0 0 1.1*2.8/12]';
C=[1 0 0];
D=0;

N=[-3 -3 -8];
L=acker(A',C',N)';
est=estim(G,L)
step(est)
tf(est)

img

img

在matlab中给定了传递函数,可以通过上述的代码生成状态观测器,并画出阶跃响应图像,输出了观测状态的传递函数

sys = ctrl.tf([3.08], [10800, 1620, 72,1])
sys_ss = control.ss(sys) 
N=np.array([-3,-3,-8]);

上面已经给出了传递函数sys和要配置的状态观测器的极点N,我想通过python(不能用其他语言),实现给定一个传递函数,生成系统状态估计器并画出阶跃响应图像,输出观测状态的传递函数,应该怎么做?求详细可行的过程

  • 写回答

5条回答 默认 最新

  • 关注

    可以使用python的控制系统库Control来实现状态观测器的设计。首先,需要将给定的传递函数转换为状态空间形式,可以通过Control的tf2ss函数来实现。然后,通过LQR算法,你可以用acker函数来配置状态观测器的极点,然后再用estim函数生成状态观测器。最后,你可以通过step函数画出阶跃响应图像,通过tf函数计算观测状态的传递函数。

    下面是一份参考代码:

    import control
    import numpy as np
    
    # 将给定的传递函数转换为状态空间形式
    num = [3.08]
    den = [1080, 1620, 72, 1]
    sys = control.tf(num, den)
    sys_ss = control.ss(sys)
    
    # 设置状态观测器的极点
    N = np.array([-3, -3, -8])
    L = control.acker(sys_ss.A.T, sys_ss.C.T, N).T
    
    # 生成状态观测器并画出阶跃响应图像
    est = control.estim(sys, L)
    control.step(est)
    
    # 计算观测状态的传递函数
    control.tf(est)
    
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月15日
  • 修改了问题 2月13日
  • 修改了问题 2月13日
  • 创建了问题 2月13日