Simulink.sdi.Signal
访问信号数据和元数据
说明
Simulink.sdi.Signal
对象包含仿真数据检查器中信号的数据和元数据。您可以使用 Signal
对象属性检查信号元数据,在时间图上可视化信号,并使用 Simulink.sdi.compareSignals
函数比较信号。
创建对象
Simulink.sdi.Signal
对象是为您在模型仿真中记录或导入仿真数据检查器中的每个信号创建的。您可以通过几种方式访问仿真数据检查器中的 Signal
对象。通常,要访问 Signal
对象,您首先需要获取包含信号的 Simulink.sdi.Run
对象。
Simulink.sdi.getSignal
函数返回与您提供的信号 ID 对应的Signal
对象。getSignal
函数返回指定的Run
对象内具有指定信号 ID 的Signal
对象。getSignalByIndex
函数返回指定的Run
对象内的指定索引处的Signal
对象。
属性
信号属性
ID
— 信号标识符
整数
此 属性 为只读。
标识信号的唯一编号,以整数形式返回。仿真数据检查器为每个运行和信号分配唯一的数值 ID。
RunID
— 运行标识符
整数
此 属性 为只读。
包含信号的运行的运行标识符,以整数形式返回。仿真数据检查器为每个运行和信号分配唯一的数值 ID。
Name
— 信号名称
字符向量 | 字符串
信号的名称,指定为字符向量或字符串。当 Signal
对象包含从仿真记录的数据时,该名称与为模型中信号指定的名称相匹配。如果模型未指定名称,则信号名称是产生该信号的模块的模块路径。
示例: 'fuel'
Domain
— 信号类型
'Signals'
| 'Outports'
| 'States'
| 'Data Store Memory'
| 'Parameters'
| ...
信号类型,指定为以下选项之一:
'Signals'
- 信号记录数据。'Outports'
- 输出记录数据。'States'
- 状态记录数据。'Data Store Memory'
- 数据存储内存记录数据。'Parametrs'
- 记录的参数数据。'Stateflow'
- Stateflow® 数据。'Simscape'
- Simscape™ 数据。'Assessments'
- Simulink® Test™ 评估数据。'Profiling'
- 执行探查数据。
对于不是通过记录仿真数据创建的数据,Domain
属性为空。
Description
— 信号说明
''
(默认) | 字符向量 | 字符串
信号的说明,指定为字符向量或字符串。您可以使用 Description
属性来注释信号或标识 Name
以外的信号内容。当您将 Simscape 数据记录到仿真数据检查器时,系统会自动为每个节点填充 Description
属性。
Stored Units
— 存储在磁盘上的信号数据的单位
字符向量 | 字符串
此 属性 为只读。
存储在磁盘上的信号数据的单位,指定为字符向量或字符串。对于通过仿真模型生成的信号,Signal
对象的存储单位使用在模型中指定的单位。为没有单位的信号指定显示单位时,存储单位也会设置为相同单位。要并排分析使用不同单位的信号,请修改信号的显示单位。仿真数据检查器执行转换以使用显示单位绘制数据。
您可以使用 convertUnits
函数转换信号的存储单位。存储单位转换不支持撤消,且可能会导致精度损失。
示例: 'g/s'
Display Units
— 用于在仿真数据检查器中显示信号数据的单位
字符向量 | 字符串
用于在仿真数据检查器中显示信号数据的单位,指定为字符向量或字符串。信号的显示单位可能不同于反映存储在磁盘上的数据的存储单位。修改信号显示单位以在仿真数据检查器中分析数据。仿真数据检查器中的单位预设项可以更改所记录和导入的信号数据的显示单位。有关详细信息,请参阅 Signal Display Units。
示例: 'm/s'
Data Type
— 信号数据的数据类型
字符向量 | 字符串
此 属性 为只读。
信号数据的数据类型,以字符向量或字符串形式返回。
示例: 'double'
Complexity
— 信号数据的复/实性
"real"
| "complex"
此 属性 为只读。
信号数据的复/实性,以 "real"
或 "complex"
形式返回。
示例: "real"
SampleTime
— 信号采样时间
字符向量
此 属性 为只读。
信号采样时间,以字符向量或标量形式返回。'Continuous'
的值表示变步长仿真。
示例: 'Continuous'
示例: '0.1'
Model
— 产生信号的模型的名称
字符向量
此 属性 为只读。
产生信号的模型的名称,以字符向量形式返回。对于包含并非通过仿真模型生成的数据的 Signal
对象,Model
属性为空。
示例: 'sldemo_fuelsys'
BlockPath
— 产生信号的模块的模块路径
字符向量
此 属性 为只读。
产生信号的模块的模块路径,以字符数组形式返回。BlockPath
属性是不包括模型层次结构的相对路径。对于包含并非通过仿真模型生成的数据的 Signal
对象,BlockPath
属性为空。
示例: 'sldemo_fuelsys/Engine Gas Dynamics'
FullBlockPath
— 产生信号的模块的完整模块路径
字符向量 | 元胞数组
此 属性 为只读。
产生信号的模块的完整模块路径(包括完整模型层次结构),以字符向量形式返回。对于引用模型中的信号,FullBlockPath
是包含完整路径的元胞数组。对于其他信号,FullBlockPath
与 BlockPath
相同。对于包含并非通过仿真模型生成的数据的 Signal
对象,FullBlockPath
属性为空。
BlockName
— 产生信号的模块的名称
字符向量
此 属性 为只读。
产生信号的模块的名称,以字符向量形式返回。对于包含并非通过仿真模型生成的数据的 Signal
对象,BlockName
属性为空。
示例: 'Engine Gas Dynamics'
PortIndex
— 模块端口索引
整数
此 属性 为只读。
与产生信号的模块上的信号相连的输出端口的索引。对于包含并非通过仿真模型生成的数据的 Signal
对象,PortIndex
属性为空。
示例: 1
Dimensions
— 信号维度
整数 | 整数数组
此 属性 为只读。
信号维数,以整数或整数数组形式返回。
示例: [1 2]
Channel
— 矩阵内信号的索引
整数数组
此 属性 为只读。
矩阵中信号的索引,以整数数组形式返回。
NumPoints
— 信号中的采样数
整数
此 属性 为只读。
信号中的采样数,以整数形式返回。
Values
— 信号值
timeseries
| 结构体
信号的时间和数据值,对于非总线信号,以 timeseries
对象形式返回;对于总线信号,以与总线层次结构匹配的结构体形式返回。
RootSource
— 包含导入的信号的高级结构体
字符向量
此 属性 为只读。
包含信号的高级结构体的名称,以字符向量形式返回。仅当信号是导入的信号时,RootSource
属性才有值
示例: 当您导入包含结构体 xout
的 Simulink.SimulationOutput
对象 simOut
时,RootSource
是 'simOut.get('xout')'
TimeSource
— 导入的信号时间数据的来源
字符向量
此 属性 为只读。
信号时间数据的路径,以字符向量形式返回。仅当信号是导入的信号时,TimeSource
属性才有值
示例: 当您导入包含结构体 xout
的 Simulink.SimulationOutput
对象 simOut
时,TimeSource
是 'simOut.get('xout').time'
DataSource
— 导入的信号数据的来源
字符向量
此 属性 为只读。
信号采样值的路径,以字符数组形式返回。仅当信号是导入的信号时,DataSource
属性才有值
示例: 当您导入包含结构体 xout
的 Simulink.SimulationOutput
对象 simOut
时,DataSource
是 'simOut.get('xout').signals(1).values'
Children
— 合成信号包含的信号
Simulink.sdi.Signal
向量
此 属性 为只读。
合成信号包含的信号,以 Simulink.sdi.Signal
对象形式返回。对于标量信号,Children
属性为空。
Display Scaling
— 用于在仿真数据检查器中显示信号数据的缩放
1
(默认值) | 标量
用于在仿真数据检查器中显示信号数据的缩放,指定为非零实数标量。显示缩放充当乘法器,允许您在仿真数据检查器中缩放单个信号的显示。缩放显示不会更改信号的数据值。根据可视化类型的不同,信号缩放也不同。
可视化 | 定标 |
---|---|
时间图 | 在 y 方向缩放单个信号显示。 |
迷你图 | 在 y 方向缩放单个信号显示。 |
XY | 在 y 方向和 x 方向独立地缩放信号显示。 |
数组 | 在 y 方向上以相同的方式缩放多维信号显示的每个元素。 |
映射 | 在经度和纬度方向独立地缩放信号显示。请注意,这允许您将其他单位转换为经度和纬度。 |
Display Offset
— 用于在仿真数据检查器中显示信号数据的偏移量
1
(默认值) | 标量
用于在仿真数据检查器中显示信号数据的偏移量,指定为实数标量。显示偏移量允许您在仿真数据检查器中更改单个信号的显示。偏移显示不会更改信号的数据值。根据可视化类型的不同,信号偏移量也不同。
可视化 | 定标 |
---|---|
时间图 | 在 y 方向平移单个信号显示。 |
迷你图 | 在 y 方向平移单个信号显示。 |
XY | 在 y 方向和 x 方向独立地平移信号显示。 |
数组 | 在 y 方向上以相同的方式平移多维信号显示的每个元素。 |
映射 | 在经度和纬度方向上独立地平移信号显示。 |
可视化属性
ComplexFormat
— 显示复信号的格式
"real-imaginary"
| "magnitude"
| "magnitude-phase"
| "phase"
用于在仿真数据检查器中显示复信号数据的复信号格式,指定为下列值之一。您可以修改 Signal
对象的 ComplexFormat
属性,以更改当对象包含复信号的数据时仿真数据检查器显示信号数据的方式。
"real-imaginary"
- 绘制信号时,信号的实部和虚部会一起显示。信号的虚部用另一种线条颜色颜色绘制。"magnitude"
- 绘制信号时显示信号的幅值。"magnitude-phase"
- 绘制信号时,信号的幅值和相位一起显示。"phase"
- 绘制信号时显示信号的相位。相位用另一种线条颜色颜色绘制。
数据类型: char
| string
Checked
— 是否绘制信号
0
或 false
(默认) | 1
或 true
是否绘制信号,指定为逻辑值。将 Checked
设置为 false
可将信号从所有子图中清除。将 Checked
设置为 true
可在活动子图上绘制信号。
数据类型: logical
LineColor
— 信号线颜色
1
×3
向量
图中信号的颜色,指定为 1
×3
RGB 向量,其值在 0
和 1
之间。
示例: [0 0.5 0.5]
数据类型: double
LineDashed
— 信号线的线型
'-'
| '--'
| ':'
| '-.'
在仿真数据检查器中绘制信号时使用的信号线线型,指定为以下选项之一:
'-'
- 实线'--'
- 虚线':'
- 点线'-.'
- 点划线
LineWidth
— 信号线宽度
1
(默认) | 在 1
和 20
之间的整数
在仿真数据检查器中绘制信号时使用的信号线宽度,指定为介于 1
和 20
之间(包括二者)的整数。
InterpMethod
— 插值方法
'linear'
(默认) | 'zoh'
| 'none'
在数据可视化中和在比较中同步信号时使用的插值方法,指定为下列值之一:
'zoh'
- 零阶保持插值'linear'
- 线性插值'none'
- 无插值
有关插值选项的详细信息,请参阅仿真数据检查器如何比较数据。
比较属性
AbsTol
— 绝对容差
0
(默认) | 标量
信号比较中使用的绝对容差,指定为正值标量。
当 OverrideGlobalTol
属性设置为 1
或 true
时,仿真数据检查器使用在基线信号的信号属性中指定的容差。有关仿真数据检查器中容差的详细信息,请参阅仿真数据检查器如何比较数据。
示例: 0.1
数据类型: double
RelTol
— 相对容差
0
(默认) | 标量
信号比较中使用的相对容差,指定为正值标量。相对容差表示为小数乘数。例如,0.1
指定 10% 的容差。
当 OverrideGlobalTol
属性设置为 1
或 true
时,仿真数据检查器使用在基线信号的信号属性中指定的容差。有关仿真数据检查器中容差的详细信息,请参阅仿真数据检查器如何比较数据。
示例: 0.05
数据类型: double
TimeTol
— 时间容差
0
(默认) | 标量
信号比较中使用的信号的时间容差,指定为正值标量。指定时间容差,以秒为单位。
当 OverrideGlobalTol
属性设置为 1
或 true
时,仿真数据检查器使用在基线信号的信号属性中指定的容差。有关仿真数据检查器中容差的详细信息,请参阅仿真数据检查器如何比较数据。
示例: 0.1
数据类型: double
OverrideGlobalTol
— 比较是否使用信号容差
0
或 false
(默认) | 1
或 true
比较是否使用信号容差值代替全局容差值,指定为逻辑值。将 OverrideGlobalTol
属性设置为 1
或 true
,以使用 Signal
对象属性中定义的容差值。将属性设置为 0
或 false
,以使用全局容差值。
有关仿真数据检查器中容差的详细信息,请参阅仿真数据检查器如何比较数据。
数据类型: logical
SyncMethod
— 同步方法
'union'
(默认) | 'intersection'
用于在比较中同步信号的方法,指定为 'union'
或 'intersection'
。有关同步选项的详细信息,请参阅仿真数据检查器如何比较数据。
对象函数
convertUnits | Convert units of Simulink.sdi.Signal object |
export | Export data for signal in Simulation Data Inspector to workspace or file |
getAsTall | Create tall timetable from Simulink.sdi.Signal
object |
plotOnSubPlot | Plot Simulink.sdi.Signal object on Simulation Data Inspector
subplot |
示例
使用信号容差分析仿真数据
您可以通过编程方式指定信号容差值,以便在使用仿真数据检查器进行比较时使用。在此示例中,您将比较通过仿真飞机纵向飞行控制系统模型收集的数据。每次仿真使用不同的输入滤波器时间常量值,并记录输入和输出信号。通过使用仿真数据检查器和信号容差比较结果,可以分析时间常量变化的影响。
首先,加载包含仿真数据的会话文件。
Simulink.sdi.load('AircraftExample.mldatx');
该会话文件包含四次运行。在此示例中,您将比较文件中前两次运行的数据。访问从文件加载的前两次运行的 Simulink.sdi.Run
对象。
runIDs = Simulink.sdi.getAllRunIDs; runIDTs1 = runIDs(end-3); runIDTs2 = runIDs(end-2);
现在,在不指定任何容差的情况下比较这两次运行。
noTolDiffResult = Simulink.sdi.compareRuns(runIDTs1,runIDTs2);
使用 getResultByIndex
函数访问 q
和 alpha
信号的比较结果。
qResult = getResultByIndex(noTolDiffResult,1); alphaResult = getResultByIndex(noTolDiffResult,2);
检查每个信号结果的 Status
,查看比较结果是否在我们的容差范围内。
qResult.Status
ans = ComparisonSignalStatus enumeration OutOfTolerance
alphaResult.Status
ans = ComparisonSignalStatus enumeration OutOfTolerance
该比较对所有容差使用值 0
,因此 OutOfTolerance
结果意味着信号不同。
通过为信号指定容差值,可以进一步分析时间常量的影响。通过设置与所比较信号对应的 Simulink.sdi.Signal
对象的属性来指定容差。这些比较使用为基线信号指定的容差。此示例指定时间容差和绝对容差。
要指定容差,首先请访问来自基线运行的 Signal
对象。
runTs1 = Simulink.sdi.getRun(runIDTs1); qSig = getSignalsByName(runTs1,'q, rad/sec'); alphaSig = getSignalsByName(runTs1,'alpha, rad');
使用 AbsTol
和 TimeTol
属性,为 q
信号指定绝对容差 0.1
和时间容差 0.6
。
qSig.AbsTol = 0.1; qSig.TimeTol = 0.6;
为 alpha
信号指定绝对容差 0.2
和时间容差 0.8
。
alphaSig.AbsTol = 0.2; alphaSig.TimeTol = 0.8;
再次比较结果。访问比较结果,并检查每个信号的 Status
属性。
tolDiffResult = Simulink.sdi.compareRuns(runIDTs1,runIDTs2); qResult2 = getResultByIndex(tolDiffResult,1); alphaResult2 = getResultByIndex(tolDiffResult,2); qResult2.Status
ans = ComparisonSignalStatus enumeration WithinTolerance
alphaResult2.Status
ans = ComparisonSignalStatus enumeration WithinTolerance
定义信号的比较和可视化属性
此示例说明如何使用仿真数据检查器编程接口获取 Simulink.sdi.Signal
对象并修改其属性。
在仿真数据检查器中创建数据
当您对记录数据的模型进行仿真时,在仿真数据检查器中会创建一次运行来包含记录的数据。您还可以通过导入数据在仿真数据检查器中创建一次运行。此示例对 slexAircraftExample
模型进行仿真,并以 Dataset
格式记录数据。
simOut = sim('slexAircraftExample','SaveFormat','Dataset');
获取 Simulink.sdi.Signal
对象
程序化仿真在工作区变量 simOut
中返回所记录的数据。您可以在该变量中访问所记录的数据。但是,要使用仿真数据检查器编程接口,您需要在 Simulink.sdi.Run
和 Simulink.sdi.Signal
对象中访问所记录的数据。
首先,使用 Simulink.sdi.getCurrentSimulationRun
获取 Run
对象,该对象是在您对 slexAircraftExample
模型进行仿真时创建的。
aircraftRun = Simulink.sdi.getCurrentSimulationRun('slexAircraftExample');
您可以使用 getAllSignals
函数访问运行中所有信号的 Signal
对象。从返回的 Signal
对象数组中,选择第一个信号。
signals = getAllSignals(aircraftRun); sig = signals(1);
修改信号属性
Simulink.sdi.Signal
对象具有指定用于比较和可视化信号的选项的属性。为信号指定线型和颜色。然后,使用 Simulink.sdi.setSubPlotLayout
配置仿真数据检查器显示单个子图,并使用 plotOnSubPlot
函数绘制信号。
sig.LineColor = [1 0.4 0.6];
sig.LineDashed = '-';
Simulink.sdi.setSubPlotLayout(1,1)
plotOnSubPlot(sig,1,1,true)
使用 Simulink.sdi.view
函数打开仿真数据检查器并查看绘制的信号。
比较同一运行中的两个信号
您可以使用仿真数据检查器编程接口比较一次运行中的信号。此示例比较飞机纵向控制器的输入和输出信号。
首先,加载包含数据的会话。
Simulink.sdi.load('AircraftExample.mldatx');
使用 Simulink.sdi.Run.getLatest
函数访问最后一次运行的数据。
aircraftRun = Simulink.sdi.Run.getLatest;
然后,您可以使用 Simulink.sdi.getSignalsByName
函数访问表示控制器输入的 Stick
信号和表示输出的 alpha, rad
信号。
stick = getSignalsByName(aircraftRun,'Stick'); alpha = getSignalsByName(aircraftRun,'alpha, rad');
在比较信号之前,您可以指定用于比较的容差值。比较使用在比较中为基线信号指定的容差值,因此请在 Stick
信号上设置绝对容差值 0.1
。
stick.AbsTol = 0.1;
现在,使用 Simulink.sdi.compareSignals
函数比较信号。Stick
信号是基线,alpha, rad
信号是要与基线进行比较的信号。
comparisonResults = Simulink.sdi.compareSignals(stick.ID,alpha.ID); match = comparisonResults.Status
match = ComparisonSignalStatus enumeration OutOfTolerance
比较结果超出容差范围。您可以使用 Simulink.sdi.view
函数打开仿真数据检查器来查看和分析比较结果。
绘制仿真运行输出的信号
此示例演示如何访问通过记录信号而创建的仿真数据检查器运行的 Simulink.sdi.Run
对象。从 Simulink.sdi.Run
对象中,您可以获得包含所记录的信号数据和元数据的 Simulink.sdi.Signal
对象。您可以使用 Signal
对象和 plotOnSubPlot
函数在仿真数据检查器中绘制数据。
创建仿真运行并访问 Run
对象
ex_vdp
模型记录两个信号。要创建包含所记录数据的仿真运行,请对模型进行仿真。
sim('ex_vdp');
仿真数据检查器为通过仿真,导入数据或打开会话而创建的每个运行分配唯一数值 ID,从而跟踪这些运行。要访问您刚刚执行的仿真的运行对象,请使用 Simulink.sdi.getAllRunIDs
函数,并获取返回的向量中的最后一个运行 ID。
runIDs = Simulink.sdi.getAllRunIDs; runID = runIDs(end);
一旦您获得了该运行的运行 ID,您就可以使用 Simulink.sdi.getRun
函数来获得与该运行对应的 Simulink.sdi.Run
对象。您可以使用 Run
对象来检查与运行相关联的元数据,包括运行中的信号数量。
vdpRun = Simulink.sdi.getRun(runID); vdpRun.SignalCount
ans = int32
2
使用 Signal
对象绘制数据
使用 getSignalByIndex
函数从 Run
对象 vdpRun
访问信号。
signal1 = getSignalByIndex(vdpRun,1); signal2 = getSignalByIndex(vdpRun,2);
使用 Simulink.sdi.setSubPlotLayout
函数指定 2×1 布局。
Simulink.sdi.setSubPlotLayout(2,1)
在绘制数据之前,使用 Simulink.sdi.clearAllSubPlots
函数清除任何已绘制的数据。
Simulink.sdi.clearAllSubPlots
在每个子图上绘制一个信号。要在第一个子图上绘制信号,您可以设置信号的 checked
属性。要在第一个子图以外的子图上绘制信号,请使用 plotOnSubPlot
函数。
signal1.Checked = true; plotOnSubPlot(signal2,2,1,true);
查看绘制的数据
要查看您刚刚创建的绘图,请使用 Simulink.sdi.view
函数打开仿真数据检查器。
版本历史记录
在 R2012b 中推出
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)