frd
频率响应数据模型
说明
使用 frd
创建实数值或复数值频率响应数据模型,或将动态系统模型转换为频率响应数据模型形式。
频率响应数据模型存储复数频率响应数据及对应的频率点。例如,频率响应数据模型 H(jwi) 存储每个输入频率 wi 下的频率响应,其中 i = 1,…,n。frd
模型对象可以表示连续时间或离散时间的 SISO 或 MIMO 频率响应数据模型。有关详细信息,请参阅Frequency Response Data (FRD) Models。
您还可以使用 frd
来创建广义频率响应数据 (genfrd
) 模型。
创建对象
您可以通过以下方式之一获得 frd
模型。
使用
frd
命令根据频率响应数据创建模型。例如,您可以使用在特定频率下获取的频率响应数据创建frd
模型。有关示例,请参阅SISO 频率响应数据模型。
通过计算模型在指定频率下的频率响应,将线性模型(如
ss
模型)转换为frd
模型。有关示例,请参阅将状态空间模型转换为频率响应数据模型。
使用离线频率响应估计工作流对模型进行估计。这些工作流需要 Simulink®Control Design™ 软件。
有关详细信息,请参阅在命令行中估计频率响应 (Simulink Control Design)和使用模型线性化器估计频率响应 (Simulink Control Design)。
语法
描述
使用以上任何输入参量组合中的一个或多个名称-值参量设置频率响应数据模型的属性。sys
= frd(___,Name,Value
)
输入参量
频率响应数据,指定为向量或复数多维数组。
对于 SISO 系统,指定一个向量,其中包含通过
frequency
指定的频率点下的频率响应值。对于具有
Nu
个输入和Ny
个输出的 MIMO 系统,指定一个Ny
×Nu
×Nf
数组,其中Nf
是频率点的数量。对于具有
Nu
个输入和Ny
个输出的S1
×...×Sn
模型数组,指定一个大小为 [Ny
Nu
Nf
S1
…Sn
] 的多维数组。例如,大小为 [
Ny
,Nu
,Nf
,3
,4
] 的response
表示一个 3×4 模型数组的响应数据。每个模型具有Ny
个输出、Nu
个输入和Nf
个频率点。
此输入设置 ResponseData 属性。
与 response
对应的频率点,指定为包含 Nf
个点的向量。frequency
可以同时包含正频率和负频率。
此输入设置 Frequency 属性。
采样时间,指定为标量。
此输入设置 Ts 属性。
动态系统,指定为 SISO 或 MIMO 动态系统模型或动态系统模型数组。您可以使用的动态系统包括:
广义或不确定的 LTI 模型,如
genss
或uss
(Robust Control Toolbox) 模型。(使用不确定模型需要 Robust Control Toolbox™ 软件。)生成的
frd
模型假设:对于可调控制设计模块,采用可调组件的当前值
对于不确定的控制设计模块,采用标称模型值
辨识的 LTI 模型,如
idtf
(System Identification Toolbox)、idss
(System Identification Toolbox)、idproc
(System Identification Toolbox)、idpoly
(System Identification Toolbox) 和idgrey
(System Identification Toolbox) 模型。(使用辨识模型需要 System Identification Toolbox™ 软件。)
属性
频率响应数据,指定为复数多维数组。
对于 SISO 系统,
ResponseData
是一个1
×1
×Nf
数组,其中包含通过Frequency
属性指定的Nf
个频率点下的频率响应值。对于具有
Nu
个输入和Ny
个输出的 MIMO 系统,ResponseData
是一个Ny
×Nu
×Nf
数组,其中Nf
是频率点的数量。例如,
ResponseData(ky,ku,kf)
表示在频率Frequency(kf)
下从输入ku
到输出ky
的频率响应。对于具有
Nu
个输入和Ny
个输出的S1
×...×Sn
模型数组,ResponseData
是一个大小为 [Ny
Nu
Nf
S1
…Sn
] 的多维数组。例如,大小为 [
Ny
,Nu
,Nf
,3
,4
] 的ResponseData
表示一个 3×4 模型数组的响应数据。每个模型具有Ny
个输出、Nu
个输入和Nf
个频率点。
与 ResponseData
对应的频率点,指定为包含 Nf
个点的向量,其单位由 FrequencyUnit
指定。
Frequency
属性中频率向量的单位,指定为以下值之一:
'rad/TimeUnit'
'cycles/TimeUnit'
'rad/s'
'Hz'
'kHz'
'MHz'
'GHz'
'rpm'
单位 'rad/TimeUnit'
和 'cycles/TimeUnit'
是相对于 TimeUnit
属性中指定的时间单位而言的。
更改此属性不会导致数据重采样或转换。修改此属性只会更改对现有数据的解释。使用 chgFreqUnit
将数据转换为不同的频率单位。
传输延迟,指定为以下项之一:
标量 - 为 SISO 系统指定传输延迟,或为 MIMO 系统的所有输入/输出对组指定相同的传输延迟。
Ny
×Nu
数组 - 为 MIMO 系统的每个输入/输出对组指定单独的传输延迟。此处,Ny
是输出数目,Nu
是输入数目。
对于连续时间系统,以 TimeUnit
属性指定的时间单位指定传输延迟。对于离散时间系统,以采样时间 Ts
的整数倍指定传输延迟。
每个输入通道的输入延迟,指定为以下项之一:
标量 - 为 SISO 系统指定输入延迟,或为多输入系统的所有输入指定相同的延迟。
Nu
×1 向量 - 为多输入系统的输入指定单独的输入延迟,其中Nu
是输入数。
对于连续时间系统,以 TimeUnit
属性指定的时间单位指定输入延迟。对于离散时间系统,以采样时间 Ts
的整数倍指定输入延迟。
有关详细信息,请参阅Time Delays in Linear Systems。
每个输出通道的输出延迟,指定为以下项之一:
标量 - 为 SISO 系统指定输出延迟,或为多输出系统的所有输出指定相同的延迟。
Ny
×1 向量 - 为多输出系统的输出指定单独的输出延迟,其中Ny
是输出数。
对于连续时间系统,以 TimeUnit
属性指定的时间单位指定输出延迟。对于离散时间系统,以采样时间 Ts
的整数倍指定输出延迟。
有关详细信息,请参阅Time Delays in Linear Systems。
采样时间,指定为:
0
(适用于连续时间系统)。表示离散时间系统采样周期的正标量。以
TimeUnit
属性指定的时间单位指定Ts
。-1
(适用于未指定采样时间的离散时间系统)。
注意
更改 Ts
不会对模型进行离散化或重采样。
时间变量单位,指定为以下项之一:
'nanoseconds'
'microseconds'
'milliseconds'
'seconds'
'minutes'
'hours'
'days'
'weeks'
'months'
'years'
更改 TimeUnit
不会影响其他属性,但会更改整体系统行为。可使用 chgTimeUnit
在不修改系统行为的情况下转换时间单位。
输入通道名称,指定为以下项之一:
字符向量(适用于单输入模型)。
字符向量元胞数组(适用于多输入模型)。
''
,不指定名称(适用于任何输入通道)。
您也可以使用自动向量扩展为多输入模型指定输入名称。例如,如果 sys
是双输入模型,请输入以下内容。
sys.InputName = 'controls';
输入名称会自动扩展为 {'controls(1)';'controls(2)'}
。
您可以使用简化形式 u
来引用 InputName
属性。例如,sys.u
等效于 sys.InputName
。
使用 InputName
可以:
识别模型显示和绘图上的通道。
提取 MIMO 系统的子系统。
互连模型时指定连接点。
输入通道单位,指定为以下项之一:
字符向量(适用于单输入模型)。
字符向量元胞数组(适用于多输入模型)。
''
,不指定单位(适用于任何输入通道)。
使用 InputUnit
指定输入信号单位。InputUnit
不会影响系统行为。
输入通道组,指定为结构体。使用 InputGroup
将 MIMO 系统的输入通道分组,并按名称引用每个组。InputGroup
的字段名称是组名称,字段值是每个组的输入通道。例如,输入以下内容以创建名为 controls
和 noise
的输入组,它们分别包括输入通道 1
和 2
以及 3
和 5
。
sys.InputGroup.controls = [1 2]; sys.InputGroup.noise = [3 5];
然后,您可以使用以下命令将子系统从 controls
输入提取到所有输出。
sys(:,'controls')
默认情况下,InputGroup
是不包含字段的结构体。
输出通道名称,指定为以下项之一:
字符向量(适用于单输出模型)。
字符向量元胞数组(适用于多输出模型)。
''
,不指定名称(适用于任何输出通道)。
您也可以使用自动向量扩展来为多输出模型指定输出名称。例如,如果 sys
是双输出模型,请输入以下内容。
sys.OutputName = 'measurements';
输出名称自动扩展为 {'measurements(1)';'measurements(2)'}
。
您还可以使用简化形式 y
来引用 OutputName
属性。例如,sys.y
等效于 sys.OutputName
。
使用 OutputName
可以:
识别模型显示和绘图上的通道。
提取 MIMO 系统的子系统。
互连模型时指定连接点。
输出通道单位,指定为以下项之一:
字符向量(适用于单输出模型)。
字符向量元胞数组(适用于多输出模型)。
''
,不指定单位(适用于任何输出通道)。
使用 OutputUnit
指定输出信号单位。OutputUnit
不会影响系统行为。
输出通道组,指定为结构体。使用 OutputGroup
将 MIMO 系统的输出通道分组,并按名称引用每个组。OutputGroup
的字段名称是组名称,字段值是每个组的输出通道。例如,创建名为 temperature
和 measurement
的输出组,它们分别包括输出通道 1
以及 3
和 5
。
sys.OutputGroup.temperature = [1]; sys.OutputGroup.measurement = [3 5];
然后,您可以使用以下命令将子系统从所有输入提取到 measurement
输出。
sys('measurement',:)
默认情况下,OutputGroup
是不包含字段的结构体。
系统名称,指定为字符向量。例如,'system_1'
。
用户指定的要与系统关联的文本,指定为字符向量或字符向量元胞数组。例如,'System is MIMO'
。
要与系统关联的用户指定数据,指定为任何 MATLAB 数据类型。
模型数组的采样网格,指定为结构体数组。
使用 SamplingGrid
跟踪与模型数组中每个模型相关联的变量值,包括辨识的线性时不变 (IDLTI) 模型数组。
将结构体的字段名称设置为采样变量的名称。将字段值设置为与数组中每个模型相关联的采样变量值。所有采样变量都必须为数值标量,所有由采样值组成的数组都必须与模型数组的维度匹配。
例如,您可以通过拍摄线性时变系统在时间 t = 0:10
处的快照,创建一个 11×1 线性模型数组 sysarr
。以下代码随线性模型存储时间采样。
sysarr.SamplingGrid = struct('time',0:10)
同样,您可以通过对两个变量 zeta
和 w
独立采样,创建一个 6×9 模型数组 M
。以下代码将 (zeta,w)
值映射到 M
。
[zeta,w] = ndgrid(<6 values of zeta>,<9 values of w>) M.SamplingGrid = struct('zeta',zeta,'w',w)
当显示 M
时,数组中的每个条目都包括对应的 zeta
和 w
值。
M
M(:,:,1,1) [zeta=0.3, w=5] = 25 -------------- s^2 + 3 s + 25 M(:,:,2,1) [zeta=0.35, w=5] = 25 ---------------- s^2 + 3.5 s + 25 ...
对于通过在多个参数值或工作点处线性化 Simulink 模型生成的模型数组,软件会自动使用与数组中每个条目对应的变量值填充 SamplingGrid
。例如,Simulink Control Design 命令 linearize
(Simulink Control Design) 和 slLinearizer
(Simulink Control Design) 会自动填充 SamplingGrid
。
默认情况下,SamplingGrid
是不包含字段的结构体。
对象函数
以下列表包含可用于 frd
模型的部分代表性函数。通常,许多适用于动态系统模型的函数也适用于 frd
对象。frd
模型不适用于任何时域分析函数。
chgFreqUnit | Change frequency units of frequency-response data model |
chgTimeUnit | Change time units of dynamic system |
frdfun | Apply a function to the frequency response value at each frequency of an
frd model object |
fselect | Select frequency points or range in FRD model |
interp | 对 FRD 模型进行插值 |
fcat | Concatenate FRD models along frequency dimension |
fnorm | Pointwise peak gain of FRD model |
pidtune | PID tuning algorithm for linear plant model |
示例
根据频率响应数据创建一个 frd
对象。
对于此示例,请加载为水箱模型收集的频率响应数据。
load wtankData.mat
这些数据包含在 rad/s 至 rad/s 频率范围内收集到的频率响应数据。
创建模型。
sys = frd(response,frequency)
sys = Frequency(rad/s) Response ---------------- -------- 0.0010 1.562e+01 - 1.9904i 0.0018 1.560e+01 - 2.0947i 0.0034 1.513e+01 - 3.3670i 0.0062 1.373e+01 - 5.4306i 0.0113 1.047e+01 - 7.5227i 0.0207 5.829e+00 - 7.6529i 0.0379 2.340e+00 - 5.6271i 0.0695 7.765e-01 - 3.4188i 0.1274 2.394e-01 - 1.9295i 0.2336 7.216e-02 - 1.0648i 0.4281 2.157e-02 - 0.5834i 0.7848 6.433e-03 - 0.3188i 1.4384 1.916e-03 - 0.1740i 2.6367 5.705e-04 - 0.0950i 4.8329 1.698e-04 - 0.0518i 8.8587 5.055e-05 - 0.0283i 16.2378 1.505e-05 - 0.0154i 29.7635 4.478e-06 - 0.0084i 54.5559 1.333e-06 - 0.0046i 100.0000 3.967e-07 - 0.0025i Continuous-time frequency response. Model Properties
绘制 sys
的图。
bode(sys)
对于此示例,考虑使用随机生成的响应数据和频率。
生成一个 3×2×7 的复数数组和一个包含 7 个频率点(频率在 0.01 至 100 rad/s 之间)的频率向量。将采样时间 Ts
设置为 5 秒。
rng(0) r = randn(3,2,7)+1i*randn(3,2,7); w = logspace(-2,2,7); Ts = 5;
创建模型。
sys = frd(r,w,Ts)
sys = From input 1 to: Frequency(rad/s) output 1 output 2 output 3 ---------------- -------- -------- -------- 0.0100 0.5377 + 0.3192i 1.8339 + 0.3129i -2.2588 - 0.8649i 0.0464 -0.4336 + 1.0933i 0.3426 + 1.1093i 3.5784 - 0.8637i 0.2154 0.7254 - 0.0068i -0.0631 + 1.5326i 0.7147 - 0.7697i 1.0000 1.4090 - 1.0891i 1.4172 + 0.0326i 0.6715 + 0.5525i 4.6416 0.4889 - 1.4916i 1.0347 - 0.7423i 0.7269 - 1.0616i 21.5443 0.8884 - 0.1924i -1.1471 + 0.8886i -1.0689 - 0.7648i 100.0000 0.3252 - 0.1774i -0.7549 - 0.1961i 1.3703 + 1.4193i From input 2 to: Frequency(rad/s) output 1 output 2 output 3 ---------------- -------- -------- -------- 0.0100 0.8622 - 0.0301i 0.3188 - 0.1649i -1.3077 + 0.6277i 0.0464 2.7694 + 0.0774i -1.3499 - 1.2141i 3.0349 - 1.1135i 0.2154 -0.2050 + 0.3714i -0.1241 - 0.2256i 1.4897 + 1.1174i 1.0000 -1.2075 + 1.1006i 0.7172 + 1.5442i 1.6302 + 0.0859i 4.6416 -0.3034 + 2.3505i 0.2939 - 0.6156i -0.7873 + 0.7481i 21.5443 -0.8095 - 1.4023i -2.9443 - 1.4224i 1.4384 + 0.4882i 100.0000 -1.7115 + 0.2916i -0.1022 + 0.1978i -0.2414 + 1.5877i Sample time: 5 seconds Discrete-time frequency response. Model Properties
指定的数据会生成一个双输入、三输出的 frd
模型。
对于此示例,请创建一个从传递函数模型继承属性的频率响应数据模型。
创建一个传递函数 sys1
,将 TimeUnit
属性设置为 'minutes'
,并且将 InputDelay
属性设置为 3。
numerator1 = [2,0]; denominator1 = [1,8,0]; sys1 = tf(numerator1,denominator1,'TimeUnit','minutes','InputDelay',3)
sys1 = 2 s exp(-3*s) * --------- s^2 + 8 s Continuous-time transfer function. Model Properties
propValues1 = {sys1.TimeUnit,sys1.InputDelay}
propValues1=1×2 cell array
{'minutes'} {[3]}
创建一个从 sys1
继承属性的 frd
模型。
rng(0) response = randn(1,1,7)+1i*randn(1,1,7); w = logspace(-2,2,7); sys2 = frd(response,w,sys1)
sys2 = Frequency(rad/minute) Response --------------------- -------- 0.0100 0.5377 + 0.3426i 0.0464 1.8339 + 3.5784i 0.2154 -2.2588 + 2.7694i 1.0000 0.8622 - 1.3499i 4.6416 0.3188 + 3.0349i 21.5443 -1.3077 + 0.7254i 100.0000 -0.4336 - 0.0631i Input delays (minutes): 3 Continuous-time frequency response. Model Properties
propValues2 = {sys2.TimeUnit,sys2.InputDelay}
propValues2=1×2 cell array
{'minutes'} {[3]}
注意观察,frd
模型 sys2
具有与 sys1
相同的属性。
对于此示例,请加载为水箱模型收集的频率响应数据。
load wtankData.mat
该模型有一个输入(电压)和一个输出(水位)。
创建一个 frd
模型,指定输入名称和输出名称。
sys = frd(response,frequency,'InputName','Voltage','OutputName','Height');
绘制频率响应。
bode(sys)
输入名称和输出名称显示在波特图上。在处理 MIMO 系统的响应图时,命名输入和输出可能很有用。
对于此示例,计算以下状态空间模型的 frd
模型:
使用状态空间矩阵创建状态空间模型。
A = [-2 -1;1 -2]; B = [1 1;2 -1]; C = [1 0]; D = [0 1]; ltiSys = ss(A,B,C,D);
将状态空间模型 ltiSys
转换为频率在 0.01 至 100 rad/s 之间的 frd
模型。
w = logspace(-2,2,50); sys = frd(ltiSys,w);
比较频率响应。
bode(ltiSys,'b',sys,'r--')
响应完全相同。
要创建 frd
模型数组,您可以指定一个频率响应数据的多维数组。
例如,当您将响应数据指定为大小为 [NY
NU
NF
S1
... Sn
] 的数值数组时,该函数会返回一个 S1
×...×Sn
的 frd
模型数组。这些模型中的每个模型具有 NY
个输出、NU
个输入和 NF
个频率点。
生成一个 2×3 的随机响应数据数组,其中每个模型具有一个输出、两个输入,包含频率在 0.1 至 10 rad/s 之间的 10 个频率点。
w = logspace(-1,1,10); r = randn(1,2,10,2,3)+1i*randn(1,2,10,2,3); sys = frd(r,w);
从该模型数组中提取索引 (2,1) 处的模型。
sys21 = sys(:,:,2,1)
sys21 = From input 1 to: Frequency(rad/s) output 1 ---------------- -------- 0.1000 0.6715 + 0.0229i 0.1668 0.7172 - 1.7502i 0.2783 0.4889 - 0.8314i 0.4642 0.7269 - 1.1564i 0.7743 0.2939 - 2.0026i 1.2915 0.8884 + 0.5201i 2.1544 -1.0689 - 0.0348i 3.5938 -2.9443 + 1.0187i 5.9948 0.3252 - 0.7145i 10.0000 1.3703 - 0.2248i From input 2 to: Frequency(rad/s) output 1 ---------------- -------- 0.1000 -1.2075 - 0.2620i 0.1668 1.6302 - 0.2857i 0.2783 1.0347 - 0.9792i 0.4642 -0.3034 - 0.5336i 0.7743 -0.7873 + 0.9642i 1.2915 -1.1471 - 0.0200i 2.1544 -0.8095 - 0.7982i 3.5938 1.4384 - 0.1332i 5.9948 -0.7549 + 1.3514i 10.0000 -1.7115 - 0.5890i Continuous-time frequency response. Model Properties
您可以在 frd 对象中指定负频率值。当您想要捕获具有复系数的模型的频率响应数据时,此功能非常有用。
创建一个包含正值和负值的频率向量。
w0 = sort([-logspace(-2,2,50) 0 logspace(-2,2,50)]);
创建一个具有复系数的状态空间模型。
A = [-3.50,-1.25-0.25i;2,0]; B = [1;0]; C = [-0.75-0.5i,0.625-0.125i]; D = 0.5; Gc = ss(A,B,C,D);
将该模型转换为指定频率下的 frd 模型。
sys = frd(Gc,w0);
绘制这些模型的频率响应。
bode(Gc,'b',sys,'r--')
绘制的响应非常接近。图针对具有复系数的模型显示两个分支,一个分支用于正频率,带向右箭头;另一个分支用于负频率,带向左箭头。在这两个分支中,箭头指示频率增大的方向。
版本历史记录
在 R2006a 之前推出
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)