如何从bode()到达第一个和第二个图

时间:2014-05-29 04:44:47

标签: matlab

我知道如何使用bode()函数创建Bode图。如果我想重叠两个或更多系统频率响应,我使用

bode(sys1,sys2,...)

hold on

例如,当我想要使用text()放置图例时,很容易到达第二个图。类似图形指针的东西总是返回到第二个图(相位图)。

即,如果尝试这些行:

G = tf([1],[1 6]); figure(1); bode(G); text(10,-20,'text');
G = tf([1],[1 6]); figure(2); bode(G); text(10,-20,'text');

当我回到第一个数字时,用图(1),然后尝试

figure(1); text(10,-20,'text')

图例显示在第二个图(相位图)

我尝试其他这些行:

P = bodeoptions; % Set phase visiblity to off
P.PhaseVisible = 'off';
G = tf([1],[1 6]);
figure(1); bode(G,P); text(10,-20,'text');
figure(1); text(10,-20,'text');

如您所见,即使我关闭相位图可见性,也不会显示图例。

实际上,我的问题是,我如何逐个到达第一和第二个地块?我尝试使用subplot(),但很明显这不是Matlab跟踪这些图的方式。

提前致谢。

3 个答案:

答案 0 :(得分:0)

您可以使用以下方法分别为每个系统获取幅度和相位数据:

[mag,phase] = bode(sys,w) 

现在您可以使用subplotplot绘制所需的图表。

答案 1 :(得分:0)

我能够执行的唯一解决方案是考虑轴位置。它不是很干净,但它的工作原理。 以下是选择mag plot的代码:

StaffNumber  WindowsLogon  Forename Surename  AccessType       
12345        kesi_k        kesi     kesi      AdminRole

答案 2 :(得分:0)

这一切都是为了进入上图,因为在bodeplot命令之后,下一个是活跃的。直观地,人们会想要调用subplot(2,1,1),但这只会在if之上创建新的空白图。因此我们应该这样做:

% First, define arbitrary transfer function G(s), domain ww 
% and function we want to plot on magnitude plot.
s = tf('s');
G = 50 / ( s*(1.6*s+1)*(0.23*s+1) );
ww = logspace(0,3,5000);
y = 10.^(-2*log10(ww)+log10(150));
hand = figure;                   % create a handle to new figure
h = bodeplot(G,ww);
hold on;
children = get(hand, 'Children') % use this handle to obtain list of figure's children

% We see that children has 3 objects:
% 1) Context Menu 2) Axis object to Phase Plot 3) Axis object to Magnitude Plot

magChild = children(3);          % Pick a handle to axes of magnitude in bode diagram.
% magChild = childern(2)         % This way you can add data to Phase Plot.
axes(magChild)                   % Make those axes current
loglog(ww,y,'r');
legend('transfer function','added curve')