如何从图中确定时间常数

时间:2018-03-04 04:05:20

标签: matlab plot

在以下最小工作示例中,

M=2;
num=1/M;
den=[1 6/M];
G=tf(num,den);
step(G)

显示系统的输出响应

enter image description here

系统的特性缺少时间常数,在这种情况下Tc = M / 6(秒)。是否可以选择激活这一重要特征?时间常数是阶跃响应达到其最终值的63%的时间。在此示例中,通过稳态选项绘图,最终输出为0.167。为了计算时间常数,基本上我们计算输出幅度的时间为0.167 * 0.63 = 0.10521。从情节来看,我们可以看到

enter image description here

匹配Tc = M / 6,其中M = 2。这是一个繁琐的解决方法。希望有关此问题的选项。

1 个答案:

答案 0 :(得分:1)

您真的不需要绘制step函数的输出来查找Tc

M=2;
num=1/M;
den=[1 6/M];
G=tf(num,den);

tvect = 0:0.0001:3;    % provide any time limits you want; 
                       % the smaller time increment the higher "accuracy"
[val, t] = step(G, tvect);
idx_Tc = find(val>=0.63*max(val), 1, 'first');

Tc = t(idx_Tc);        % Tc which you are looking for
val_Tc = val(idx_Tc);  % value at Tc

如果你需要一个漂亮的情节,你可以在之后轻松创建它,因为你已经拥有了所有必需的值(tvalTcval_Tc)。

修改

您可以按照以下示例扩展上下文菜单:

M=2;
num=1/M;
den=[1 6/M];
G=tf(num,den);
step(G);

f = gcf;
c = f.CurrentAxes.UIContextMenu;
uimenu(c,'Label','Find Tc','Callback',@findTc);
f.CurrentAxes.UIContextMenu = c;

其中函数findTc定义为:

function findTc(~,callbackdata)
    t = callbackdata.Source.Parent.Parent.CurrentAxes.Children(1).Children(2).XData;
    val = callbackdata.Source.Parent.Parent.CurrentAxes.Children(1).Children(2).YData;
    idx_Tc = find(val>=0.63*max(val),1, 'first');

    Tc = t(idx_Tc);
    val_Tc = val(idx_Tc);

    disp(['Tc: ' num2str(Tc) ' val_Tc: ' num2str(val_Tc)])
end

enter image description here

不是在命令窗口中打印值,而是可以对图表进行注释,但我会说这是相当美观的变化。上面的代码显示了如何在上下文菜单中将此功能作为选项。