主要内容

sigma

动态系统的频率响应的奇异值

    说明

    [sv,wout] = sigma(sys) 返回动态系统模型 sys 在向量 wout 中每个频率下的频率响应的奇异值 sv。该函数根据系统动态特性自动确定要绘制的频率。

    示例

    [sv,wout] = sigma(sys,w) 返回在 w 指定的频率下的奇异值。您可以指定频率范围或频率向量。

    示例

    sv = sigma(sys,w,type) 返回指定类型的修正奇异值。此语法仅适用于输入和输出数目相同的系统。

    sigma(___) 使用所有先前输入参量组合的默认绘图选项绘制 sys 的频率响应的奇异值。如果 sys 是单输入单输出 (SISO) 模型,则奇异值图类似于其波特图幅值响应。如需更多绘图自定义选项,请使用 sigmaplot

    • 要在同一图上绘制多个动态系统的奇异值,您可以将 sys 指定为以逗号分隔的模型列表。例如,sigma(sys1,sys2,sys3) 在同一图上绘制三个模型的奇异值。

    • 要为图中的每个系统分别指定一种颜色、线型和标记,请为每个系统指定 LineSpec 值。例如,sigma(sys1,LineSpec1,sys2,LineSpec2) 绘制两个模型并指定它们的绘图样式。有关指定 LineSpec 值的详细信息,请参阅 sigmaplot

    示例

    全部折叠

    创建以下连续时间 SISO 动态系统的奇异值图。

    H(s)=s2+0.1s+7.5s4+0.12s3+9s2

    H = tf([1 0.1 7.5],[1 0.12 9 0 0]);
    sigma(H)

    MATLAB figure

    sigma 根据系统动态特性自动选择绘图范围。

    基于指定的频率范围创建奇异值图。当您要关注特定频率范围内的动态特性时,请使用这种方法。

    H = tf([-0.1,-2.4,-181,-1950],[1,3.3,990,2600]);
    sigma(H,{1,100})
    grid on

    MATLAB figure

    元胞数组 {1,100} 指定奇异值图中的最小和最大频率值。当您以这种方式提供频率界限时,该函数会选择频率响应数据的中间点。

    或者,指定用于计算和绘制频率响应的频率点向量。

    w = [1 5 10 15 20 23 31 40 44 50 85 100];
    sigma(H,w,'.-')
    grid on

    MATLAB figure

    sigma 仅绘制在指定频率下的频率响应。

    在同一奇异值图上比较连续时间系统和等效的离散系统的频率响应。

    创建连续时间和离散时间动态系统。

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

    创建一个显示这两个系统的图。

    sigma(H,Hd)
    legend("Continuous","Discrete")

    MATLAB figure

    离散时间系统的 sigma 图包括一条标记系统的奈奎斯特频率的垂直线。

    使用 LineSpec 输入参量为 sigma 图中的每个系统指定线型、颜色或标记。

    H = tf([1 0.1 7.5],[1 0.12 9 0 0]);
    Hd = c2d(H,0.5,'zoh');
    sigma(H,'r',Hd,'b--')

    MATLAB figure

    第一个 LineSpec,即 'r',为 H 的响应指定红色实线。第二个 LineSpec,即 'b--',为 Hd 的响应指定蓝色虚线。

    计算一个 SISO 系统的频率响应的奇异值。

    如果不指定频率,sigma 会根据系统动态特性选择频率,并在第二个输出参量中返回这些频率。

    H = tf([1 0.1 7.5],[1 0.12 9 0 0]);
    [sv,wout] = sigma(H);

    由于 H 是 SISO 模型,因此 sv 的第一个维度为 1。第二个维度是 wout 中频率的数目。

    size(sv)
    ans = 1×2
    
         1    40
    
    
    length(wout)
    ans = 
    40
    

    因此,沿 sv 的第二个维度的每个条目给出在 wout 中的对应频率下的响应的奇异值。

    对于此示例,创建一个 2 输出 3 输入的系统。

    rng(0,'twister'); % For reproducibility
    H = rss(4,2,3);

    对于此系统,sigma 在同一图中绘制频率响应矩阵的奇异值。

    sigma(H)

    MATLAB figure

    计算在 1 弧度和 10 弧度之间的 20 个频率下的奇异值。

    w = logspace(0,1,20);
    sv = sigma(H,w);

    sv 是一个矩阵,其中行对应于频率响应矩阵的奇异值,列是频率值。检查维度。

    size(sv)
    ans = 1×2
    
         2    20
    
    

    因此,例如,sv(:,10) 是在 w 中第 10 个频率下计算得到的响应奇异值。

    假设有以下双输入、双输出动态系统。

    H(s)=[03ss2+s+10s+1s+52s+6].

    计算 H(s) 和 I + H(s) 的奇异值响应。

    H = [0, tf([3 0],[1 1 10]) ; tf([1 1],[1 5]), tf(2,[1 6])];
    [svH,wH] = sigma(H);
    [svIH,wIH] = sigma(H,[],2);

    在最后一个命令中,输入 2 意味着选择第二种响应类型 I + H(s)。向量 svHsvIH 分别包含在 wHwIH 中的频率下的奇异值响应数据。

    绘制这两个系统的奇异值响应。

    subplot(211)
    sigma(H)
    subplot(212)
    sigma(H,[],2)

    MATLAB figure

    在同一图上创建一个具有复系数的模型和一个具有实系数的模型的奇异值图。

    rng(0)
    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);
    Gr = rss(4);
    sigma(Gc,Gr)
    legend('Complex-coefficient model','Real-coefficient model');

    MATLAB figure

    在对数频率刻度中,图针对具有复系数的模型显示两个分支,一个分支用于正频率,带向右箭头;另一个分支用于负频率,带向左箭头。在这两个分支中,箭头指示频率增大的方向。具有实系数的模型的图始终只有单个分支,且不带箭头。

    右键点击图并选择属性可更改图的频率刻度。在属性编辑器对话框中的单位选项卡上,将频率刻度设置为 linear scale。您也可以使用 sigmaplot 函数并修改图对象属性。

    使用自定义选项创建绘图。

    sp = sigmaplot(Gc,Gr);
    sp.FrequencyScale = 'linear'
    sp = 
      SigmaPlot (Singular Values) with properties:
    
              Responses: [2×1 controllib.chart.response.SigmaResponse]
        Characteristics: [1×1 controllib.chart.options.CharacteristicsManager]
    
          FrequencyUnit: "rad/s"
         FrequencyScale: "linear"
          MagnitudeUnit: "dB"
         MagnitudeScale: "linear"
    
                Visible: on
    
      Show all properties
    
    
    legend('Complex-coefficient model','Real-coefficient model');

    MATLAB figure

    在线性频率刻度中,图显示单个分支,其对称频率范围以频率值零为中心。同时绘制具有复系数的模型和具有实系数的模型的响应时,图还会显示具有实系数的模型的负频率响应。

    输入参数

    全部折叠

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

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

    • 稀疏状态空间模型,如 sparssmechss 模型。必须为稀疏模型指定频率网格 w

    • 广义或不确定的 LTI 模型,如 genssuss (Robust Control Toolbox) 模型。使用不确定模型需要 Robust Control Toolbox™ 软件。

      • 对于可调控制设计模块,该函数根据其当前值计算模型以绘制响应。

      • 对于不确定的控制设计模块,该函数绘制模型的标称值和随机样本。

    • 频率响应数据模型,如 frd 模型。对于此类模型,该函数绘制在模型中定义的频率下的响应。

    • 辨识的 LTI 模型,如 idtf (System Identification Toolbox)idss (System Identification Toolbox)idproc (System Identification Toolbox) 模型。使用辨识模型需要 System Identification Toolbox™ 软件。

    如果 sys 是模型数组,则图会在同一坐标区中显示该数组中所有模型的响应。

    要计算响应的频率,指定为以下值之一:

    • {wmin,wmax} 形式的元胞数组 - 计算 wminwmax 范围内的频率下的响应。如果 wmax 大于 sys 的奈奎斯特频率,则仅计算不高于奈奎斯特频率时的响应。

    • 频率向量 - 计算在每个指定频率下的响应。例如,使用 logspace 生成一个具有对数间距频率值的行向量。向量 w 可以同时包含正频率和负频率。

    • [] - 根据系统动态特性自动选择频率。

    对于具有复系数的模型,如果您为绘图指定的频率范围为 [wmin,wmax],则有如下情形:

    • 在对数频率刻度中,图频率范围设置为 [wmin,wmax],图显示两个分支,一个分支用于正频率 [wmin,wmax],另一个分支用于负频率 [–wmax,–wmin]。

    • 在线性频率刻度中,图频率范围设置为 [–wmax,wmax],图显示单个分支,该分支的对称频率范围以频率值零为中心。

    以 rad/TimeUnit 为单位指定频率,其中 TimeUnit 是模型的 TimeUnit 属性。

    要绘制的修正奇异值的类型,指定为以下值之一。

    • 1 - 绘制频率响应 H-1 的奇异值,其中 Hsys 的频率响应。

    • 2 - 绘制频率响应 I+H 的奇异值。

    • 3 - 绘制频率响应 I+H-1 的奇异值。

    依赖关系

    仅当 sys 的输入和输出数目相同时才可以指定 type

    输出参量

    全部折叠

    频率响应的奇异值(以绝对单位表示),以矩阵形式返回。sv 包含在频率 w 下计算得到的奇异值(在提供这些频率的情况下),或包含在 wout 下计算得到的奇异值(在未提供频率的情况下)。对于具有 Nu 个输入和 Ny 个输出的系统 syssv 具有 min(Nu,Ny) 行,并且具有的列数与 wwout 中的值数相同。值 sv(:,k) 给出在频率 wout(k) 下的奇异值(按降序排列)。

    函数返回系统响应时所处的频率,以列向量形式返回。该函数根据模型动态特性选择频率值,除非您使用输入参量 w 指定频率。

    wout 还包含具有复系数的模型的负频率值。

    频率值以弧度/TimeUnit 为单位,其中 TimeUnitsysTimeUnit 属性的值。

    提示

    • 当您需要额外的绘图自定义选项时,请改用 sigmaplot

    • 使用 sigma 创建的绘图不支持以字符串数组或字符向量元胞数组形式指定的多行标题或标签。要指定多行标题和标签,请使用包含 newline 字符的单个字符串。

      sigma(sys)
      title("first line" + newline + "second line");

    算法

    sigma 使用 MATLAB® 函数 svd 来计算复频率响应的奇异值。

    • 对于 frd 模型,sigma 计算频率 sys.Frequency 下的 sys.ResponseData 的奇异值。

    • 对于具有传递函数 H(s) 的连续时间 tfsszpk 模型,sigma 计算随频率 ω 变化的 H(jω) 的奇异值。

    • 对于具有传递函数 H(z) 和采样时间 Ts 的离散时间 tfsszpk 模型,sigma 计算下式的奇异值:

      H(ejωTs)

      其中频率 ω 在 0 到奈奎斯特频率 ωN = π/Ts 之间。

    版本历史记录

    在 R2006a 之前推出

    全部展开