如何以编程方式找到波特图中给定相位的幅度和频率?

Ray*_*anh 2 matlab

如果我有一个工厂让我们说

Gp(s)= 1 /(s + 1)

我可以找到阶段保证金

使用MATLAB命令

Gp = tf([1],[1 1]);
[G P] = margin(Gp);
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果我想知道特定增益过频率的频率相位.如何在不预测情节的情况下找到它?

通常我会通过命令bode(Gp)找到它并将鼠标移动到我想要知道相位裕度的特定增益上.

对于我之前的示例,在-20°相位频率下,增益频率为0.363.

如何将其编写为不查看波德图的命令?

提前致谢

the*_*alk 6

你似乎误解了增益频率相位裕度实际意味着什么,而且它不是解释它的地方.我认为你真正想要的是一种评估波特图而不点击它的方法.例如,您想知道-20 阶段的幅度频率.

我们来看看这三种情况:


案例1:您知道频率,并且您正在搜索幅度和相位

最简单的情况:

w = 0.363;                 % specify given frequency
[mag,phase] = bode(Gp,w)   % output of according magnitude and phase
Run Code Online (Sandbox Code Playgroud)

收益:

mag =

    0.9400


phase =

  -19.9509
Run Code Online (Sandbox Code Playgroud)

案例2:您想知道某个阶段的幅度和频率

p = -20;
[mag,phase,wout] = bode(Gp);

mag_p = interp1( squeeze(phase), squeeze(mag), p)
w_p   = interp1( squeeze(phase), wout, p)
Run Code Online (Sandbox Code Playgroud)

收益:

mag_p =

    0.9394

w_p =

    0.3642
Run Code Online (Sandbox Code Playgroud)

案例3:您想知道一定幅度的相位和频率

m = 0.9394;
[mag,phase,wout] = bode(Gp);

phase_m = interp1( squeeze(mag), squeeze(phase), m)
w_m     = interp1( squeeze(mag), wout, m)
Run Code Online (Sandbox Code Playgroud)

收益:

phase_m =

  -19.9998


w_m =

    0.3642
Run Code Online (Sandbox Code Playgroud)

squeeze命令是必要的,因为bode输出1x1x...相位和幅度的矩阵.您也可以使用不同的插值方法interp1.