Engee 文档
Notebook

SISO系统的频率响应

此示例演示如何绘制频率响应图并获取具有一个输入和一个输出(SISO)的动态系统模型的频率响应数据。

在开始之前,连接包 ControlSystems.jl.

In [ ]:
import Pkg
Pkg.add("ControlSystems")
In [ ]:
using ControlSystems
s = tf('s');

创建传递函数的模型并绘制其频率响应。

In [ ]:
H = tf([10,21],[1,1,4,26]); 
bode(H)
Out[0]:
([0.8088233541914841;;; 0.8089046843736906;;; 0.8089918641454111;;; … ;;; 0.0011497047425680343;;; 0.0010725473088794312;;; 0.0010005709166500281], [1.8467719298508563;;; 1.9119942598198527;;; 1.9795194061467587;;; … ;;; 179.3230779917472;;; 179.3462604412354;;; 179.36864326745186], [0.1, 0.10353218432956621, 0.10718913192051278, 0.11097524964120718, 0.11489510001873092, 0.11895340673703195, 0.12315506032928256, 0.12750512407130132, 0.1320088400831418, 0.13667163564620066  …  73.16807143427197, 75.75250258771912, 78.42822061337682, 81.19844993184013, 84.06652885618325, 87.03591361485161, 90.11018251665018, 93.29304026284686, 96.58832241158703, 100.0])

如果不指定要显示的频率范围,则函数 bode 根据系统的动态自动选择频率范围。

计算从1到13rad/s范围内的频率响应。

In [ ]:
ω = collect(1:0.001:13);
mag, phase, w = bode(H, ω);

display([mag, phase])
2-element Vector{Array{Float64, 3}}:
 [0.9237490475443623;;; 0.9239884115824651;;; 0.924228047260294;;; … ;;; 0.06127526367424186;;; 0.06126550216321019;;; 0.061255743011682656]
 [18.620571649240677;;; 18.640012816814973;;; 18.65945837391501;;; … ;;; 174.636884266112;;; 174.63737792766062;;; 174.63787149391422]

当你打电话 bode,命令返回向量 magphase,包含频率响应的量值和相位。 阵列的输入信号 表示 bode 计算从1到13rad/s的频率范围内的响应。 bode 返回向量w中的频点。

接收到的数据可以使用函数显示在图形上 bodeplot.

In [ ]:
bodeplot(H, ω, label = "H(s)")
Out[0]:

结论

因此,我们学习了如何构建SISO系统的频率特性。