# nichols


尼科尔斯频率响应图

函数库: TyControlSystems

# 描述

nichols 创建了一个频率响应的尼科尔斯图。尼科尔斯图显示了系统响应的幅度(以 dB 为单位)与相位(以度为单位)的关系。尼科尔斯图有助于分析 SISO 系统的开环和闭环特性,但对于 MIMO 控制回路分析帮助不大。

# 语法

nichols(sys)
nichols(sys1, sys2,..., sysN)
nichols(sys1, fmt1,..., sysN, fmtN)
nichols(___,w,fmt,opts; ishold, kwargs...)

mag, phase, wout = nichols(sys; fig = false)
mag, phase, wout = nichols(sys, w; fig = false) 

# 说明

nichols(sys) 创建了动态系统 sys 的 nichols 图,sys 可以是连续的或离散的、SISO 或 MIMO。频率范围和网格是根据系统极点和零点自动确定的。使用 ngrid 将尼科尔斯图网格线叠加到现有的 SISO 尼科尔斯图上。示例

如果 sys 是一个多输入多输出 (MIMO) 模型,那么 nichols 会生成一个 nichols 控制图数组,每个图显示一个 I / O 对的频率响应。示例

如果 sys 是具有复系数的模型,则尼科尔斯图显示由正频率和负频率组成的轮廓。对于具有实系数的模型,尼科尔斯仅显示正频率。


nichols(sys1, sys2, ..., sysN) 针对多个动态系统在同一窗口绘制尼克尔斯图。示例


nichols(sys1, fmt1, ..., sysN, fmtN)为每个系统绘图指定独特的颜色、线条样式或标记。示例


nichols(sys, w, fmt, opts; ishold, kwargs...) 绘制 w 所指定频率的系统响应。opts 指定用于绘制 Nichols 响应的附加选项。使用 ishold 决定是否保留原绘图,kwargs 指定绘图的属性,如线型和标记类型等。有关 kwargs 参数配置的详细信息,请参阅 plot 函数的名称-值对组参数

  • 如果 w 是(wmin, wmax)形式的二元素元组,则 nichols 频率响应范围限制在 wmin 和 wmax 之间;
  • 如果 w 是频率向量,则 nichols 绘制每个指定频率处的响应图。向量 w 可以包含负频率和正频率。

可以将 w 与前面语法中的任何输入参数组合一起使用。


mag, phase, wout = nichols(sys, fig = false) 返回向量 wout 中每个频率处响应的幅度和相位。该功能根据系统动态自动确定 wout 中的频率。 示例


mag, phase, wout = nichols(sys, w, fig = false) 返回 w 指定频率的响应数据,mag 系统响应的幅值,phase 系统响应的相位,

  • 如果 w 是 二元素元组,则频率范围限制在 (wmin, wmax) 之间;
  • 如果 w 是频率的向量,则 wout = w

可以将 w 与前面语法中的任何输入参数组合一起使用。

# 示例

带有尼科尔斯网格线的尼科尔斯响应

用尼科尔斯网格线绘制以下系统的尼科尔斯响应:

using TyControlSystems
H = tf([-4 48 -18 250 600],[1 30 282 525 60]);
nichols(H)
nicholsgrid(true)
特定频率的尼科尔斯图

在指定的频率范围内创建 Nichols 图。对于特定频率范围内的动态,请使用此方法。

using TyControlSystems
H = tf([-0.1, -2.4, -181, -1950], [1, 3.3, 990, 2600]);
nichols(H, (1,100))

单元阵列 (1100) 指定尼科尔斯图中的最小和最大频率值。以这种方式提供频率边界时,函数会为频率响应数据选择中间点。 或者,指定一个频率点向量用于评估和绘制频率响应。

w = collect(1:0.5:100);
nichols(H, w,".-")

Nichols 仅在指定频率处绘制频率响应图。

多个动态系统的尼科尔斯图

将连续时间系统的频率响应与同一 Nichols 图上的等效离散化系统进行比较。 创建连续时间和离散时间动态系统。

using TyControlSystems
H = tf([1 0.1 7.5],[1 0.12 9 0 0]);
Hd = c2d(H,0.5,:zoh);

创建显示两个系统的 Nichols 图。

nichols(H,Hd)
具有指定线属性的尼科尔斯图

使用 fmt 输入参数为 Nichols 显示中的每个系统指定线样式、颜色或标记。

using TyControlSystems
H = tf([1 0.1 7.5],[1 0.12 9 0 0]);
Hd = c2d(H,0.5,:zoh);
nichols(H,"r",Hd,"b--")

第一个fmt “r”为H的响应指定一条红色实线。第二个fmt的“b--”为Hd的响应指定了一条蓝色虚线。

Nichols 响应幅度和相位数据

计算 SISO 系统频率响应的幅值和相位。如果没有指定频率,nichols 将根据系统动态选择频率,并在第三个输出参数中返回它们。

using TyControlSystems
H = tf([1, 0.1, 7.5],[1, 0.12, 9, 0, 0]);
mag, phase= nichols(H, fig = false);

因为 H 是 SISO 模型,所以 mag 和 phase 的前两个维度都是 1。第三维是 wout 中的频率数。

size(mag)
(1, 1, 110)
size(phase)
(1, 1, 110)

因此,沿 mag 的第三维的每一项都给出了 wout 中相应频率下的响应大小。

MIMO 系统的 Nichols 图

对于本例,创建一个 4 输入 3 输出系统。

using TyControlSystems
using TyBase
using Random
Random.seed!(1234)
H = rss(2, 3, 4)

对于这个系统,nichols 将每个 I/O 通道的频率响应在一个单独的图中绘制出来。

nichols(H)

在 1 到 10 弧度之间的 20 个频率上计算这些响应的幅度和相位。

w = logspace(0, 1, 20);
mag, phase = nichols(H, w, fig = false);

mag 和 phase 为三维数组,其中前两个维度对应 H 的输出和输入维度,第三个维度为频率数。例如,检查 mag 的尺寸。

size(mag)
(3, 4, 20)

因此,例如,mag[1,3,10] 是从第三个输入到第一个输出的响应的幅值,在 w 中的第 10 个频率处计算。类似地,相位 [1,3,10] 包含相同响应的相位。

# 输入参数

sys - 动态系统
传递函数模型 | 零极点增益模型 | 状态空间模型

动态系统,指定为 SISO 或 MIMO 动态系统模型。所支持的动态系统包括:

连续时间或离散时间数值 LTI 模型,如 tfzpkss 模型。

w - 频率
元组 | 向量

用于计算和绘制频率响应的频率,指定为向量或由两个元素构成的元组,以 rad/TimeUnit 为单位进行表示,其中 TimeUnit 是 sys 的时间单位。

  • 如果 w 是(wmin,wmax)形式的二元素元组,则 nichols 频率响应范围限制在 wmin 和 wmax 之间;
  • 如果 w 是频率向量,则该函数计算每个指定频率下的响应。例如,使用 logspace 生成具有对数间隔频率值的行向量。向量 w 可以包含正频率和负频率。

数据类型: Float | Int

fmt - 线型、颜色和标记
字符串

线型、颜色和标记,指定为包含符号的字符串。符号可以按任意顺序显示。您不需要同时指定所有三个特征(线型、颜色和标记)。例如,如果忽略线型,只指定标记,则绘图只显示标记,不显示线条。

示例: "--ro" 是带有圆形标记的红色虚线

线型 说明 表示的线条
"-" 实线
"--" 虚线
":" 点线
"-." 点划线
"none" 无线条 无线条
标记 符号 说明
"." point
"," pixel
"o" circle
"v" triangle_down
"^" triangle_up
"<" triangle_left
">" triangle_right
"1" tri_down
"2" tri_up
"3" tri_left
"4" tri_right
"8" octagon
"s" square
"p" pentagon
"P" plus (filled)
"*" star
"h" hexagon1
"H" hexagon2
"+" plus
"x" x
"X" x (filled)
"D" diamond
"d" thin_diamond
"|" vline
"_" hline
"none" 无标记 none

数据类型: String

opts - Nichols 绘图选项
NicholsOptions 结构体

Nichols 图绘图选项,指定为 NicholsOptions 结构体,其具有以下字段:

  • FreqUnits:频率单位,指定为以下字符串之一:"rad/TimeUnit"、"cycles/TimeUnit"、"Hz"、"kHz"、"MHz"、"GHz"、"rpm" 等;
  • PhaseUnits:相位单位,指定为以下字符串之一:"deg" 或 "rad";

有关 NicholsOptions 结构体的详细信息,请参阅 nicholsoptions

# 名称-值对组参数

ishold - 是否保留原绘图
布尔值

ishold 用于设置函数是否在原绘图基础上绘制,指定为布尔值,默认为 false。

数据类型: Bool

kwargs - 通用绘图选项
名称-值对组参数

通用绘图选项,指定为名称-值对组参数。有关配置此参数的详细信息,请参阅 plot 函数的名称-值对组参数

fig - 绘图或返回数据
布尔值

fig 用于设置函数是否进行绘图,指定为布尔值,默认为 true。

数据类型: Bool

# 输出参数

mag - 系统响应的幅度
三维数组

系统响应的幅值,返回为 Ny × Nu × Nf 三维数组,以绝对单位进行表示,其中 Ny 为系统输出数,Nu 为系统输入数,Nf 为频率点的数量。其元素 mag[i, j, k] 表示在 w[k] 处系统第 j 个输入到第 i 个输出的频率响应幅值。

要将幅值从绝对单位转换为分贝,请使用:

magdb = 20*log10(mag)

数据类型: Float | Int

phase - 系统响应的相位
三维数组

系统响应的相位,返回为 Ny × Nu × Nf 三维数组,以度为单位进行表示,其中 Ny 为系统输出数,Nu 为系统输入数,Nf 为频率点的数量。其元素 phase[i, j, k] 表示在 w[k] 处系统第 j 个输入到第 i 个输出的频率响应相位。

数据类型: Float | Int

wout - 频率
向量

计算系统响应的频率,返回为向量,以 rad/TimeUnit 为单位进行表示,其中 TimeUnit 是 sys 的时间单位。若未指定频率,nichols 根据模型动力学选择频率值;否则,返回原频率。wout 还包含具有复系数的模型的负频率值。

数据类型: Float | Int

# 其他描述

nichols 兼容 nicholsdata 与 nicholsplot 的所有功能,其中 nicholsdata 返回响应数据,而 nicholsplot 返回尼科尔斯图。

# 另请参阅

nyquist | evalfr | bode | freqresp | sigma