主要内容

frd

频率响应数据模型

说明

使用 frd 创建实数值或复数值频率响应数据模型,或将动态系统模型转换为频率响应数据模型形式。

频率响应数据模型存储复数频率响应数据及对应的频率点。例如,频率响应数据模型 H(jwi) 存储每个输入频率 wi 下的频率响应,其中 i = 1,…,nfrd 模型对象可以表示连续时间或离散时间的 SISO 或 MIMO 频率响应数据模型。有关详细信息,请参阅Frequency Response Data (FRD) Models

您还可以使用 frd 来创建广义频率响应数据 (genfrd) 模型。

创建对象

您可以通过以下方式之一获得 frd 模型。

描述

sys = frd(response,frequency) 创建连续时间频率响应数据 (frd) 模型,并设置 ResponseDataFrequency 属性。frequency 可以同时包含负频率和正频率。

示例

sys = frd(response,frequency,ts) 创建采样时间为 ts 的离散时间 frd 模型。要保留采样时间为未指定状态,请将 ts 设置为 –1。

示例

sys = frd(response,frequency,ltiSys) 创建从动态系统模型 ltiSys 继承属性(包括采样时间)的频率响应数据模型。

示例

sys = frd(___,Name,Value) 使用以上任何输入参量组合中的一个或多个名称-值参量设置频率响应数据模型的属性。

示例

sys = frd(ltiSys,frequency) 将动态系统模型 ltiSys 转换为频率响应数据模型。frd 计算 frequency 指定的频率下的频率响应。sysltiSys.TimeUnit 继承其频率单位 rad/TimeUnit

示例

sys = frd(ltiSys,frequency,FrequencyUnits)FrequencyUnit 指定的单位解释频率。

输入参量

全部展开

频率响应数据,指定为向量或复数多维数组。

  • 对于 SISO 系统,指定一个向量,其中包含通过 frequency 指定的频率点下的频率响应值。

  • 对于具有 Nu 个输入和 Ny 个输出的 MIMO 系统,指定一个 Ny×Nu×Nf 数组,其中 Nf 是频率点的数量。

  • 对于具有 Nu 个输入和 Ny 个输出的 S1×...×Sn 模型数组,指定一个大小为 [Ny Nu Nf S1Sn] 的多维数组。

    例如,大小为 [Ny,Nu,Nf,3,4] 的 response 表示一个 3×4 模型数组的响应数据。每个模型具有 Ny 个输出、Nu 个输入和 Nf 个频率点。

此输入设置 ResponseData 属性。

response 对应的频率点,指定为包含 Nf 个点的向量。frequency 可以同时包含正频率和负频率。

此输入设置 Frequency 属性。

采样时间,指定为标量。

此输入设置 Ts 属性。

动态系统,指定为 SISO 或 MIMO 动态系统模型或动态系统模型数组。您可以使用的动态系统包括:

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

  • 广义或不确定的 LTI 模型,如 genssuss (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 S1Sn] 的多维数组。

    例如,大小为 [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 的字段名称是组名称,字段值是每个组的输入通道。例如,输入以下内容以创建名为 controlsnoise 的输入组,它们分别包括输入通道 12 以及 35

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 的字段名称是组名称,字段值是每个组的输出通道。例如,创建名为 temperaturemeasurement 的输出组,它们分别包括输出通道 1 以及 35

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)

同样,您可以通过对两个变量 zetaw 独立采样,创建一个 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 时,数组中的每个条目都包括对应的 zetaw 值。

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 模型不适用于任何时域分析函数。

全部展开

bode动态系统的波特频率响应
sigma动态系统的频率响应的奇异值
nyquist动态系统的奈奎斯特响应
nichols动态系统的尼柯尔斯响应
bandwidth频率响应带宽
freqrespEvaluate system response over a grid of frequencies
margin增益裕度、相位裕度和穿越频率
chgFreqUnitChange frequency units of frequency-response data model
chgTimeUnitChange time units of dynamic system
frdfunApply a function to the frequency response value at each frequency of an frd model object
fselectSelect frequency points or range in FRD model
interp对 FRD 模型进行插值
fcatConcatenate FRD models along frequency dimension
fnormPointwise peak gain of FRD model
feedback多个模型的反馈连接
connectBlock diagram interconnections of dynamic systems
series两个模型的串行连接
parallel两个模型的并行连接
pidtunePID tuning algorithm for linear plant model

示例

全部折叠

根据频率响应数据创建一个 frd 对象。

对于此示例,请加载为水箱模型收集的频率响应数据。

load wtankData.mat

这些数据包含在 10-3 rad/s 至 102 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)

MATLAB figure

对于此示例,考虑使用随机生成的响应数据和频率。

生成一个 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)

MATLAB figure

输入名称和输出名称显示在波特图上。在处理 MIMO 系统的响应图时,命名输入和输出可能很有用。

对于此示例,计算以下状态空间模型的 frd 模型:

A=[-2-11-2],B=[112-1],C=[10],D=[01]

使用状态空间矩阵创建状态空间模型。

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--')

MATLAB figure

响应完全相同。

要创建 frd 模型数组,您可以指定一个频率响应数据的多维数组。

例如,当您将响应数据指定为大小为 [NY NU NF S1 ... Sn] 的数值数组时,该函数会返回一个 S1×...×Snfrd 模型数组。这些模型中的每个模型具有 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--')

MATLAB figure

绘制的响应非常接近。图针对具有复系数的模型显示两个分支,一个分支用于正频率,带向右箭头;另一个分支用于负频率,带向左箭头。在这两个分支中,箭头指示频率增大的方向。

版本历史记录

在 R2006a 之前推出