# 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 与前面语法中的任何输入参数组合一起使用。
# 示例
带有尼科尔斯网格线的尼科尔斯响应
用尼科尔斯网格线绘制以下系统的尼科尔斯响应:
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 - 动态系统传递函数模型 | 零极点增益模型 | 状态空间模型
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 返回尼科尔斯图。

















.png)





.png)



