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 至 13 rad/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 。数组输入$\omega$ 会告诉bode 计算 1 至 13 rad/s 频率范围内的响应。bode 返回向量 w 中的频率点。

结果数据可以使用函数bodeplot 绘制。

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

结论

至此,我们已经学会了如何绘制 SISO 系统的频率响应图。