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模型数组,指定一个大小为 [NyNuNfS1…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是一个大小为 [NyNuNfS1…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)