iddata
对象构建一个iddata
对象,您必须已经将数据导入MATLAB®工作区,如中所述在MATLAB工作区中表示数据.
使用下面的语法创建一个时间域iddata
对象数据
:
数据= iddata(y,u,Ts)
您还可以指定其他属性,如下所示:
data = iddata(y,u,Ts,'Property1',Value1,…,'PropertyN',ValueN)
有关访问对象属性的详细信息,请参见属性.
在这个例子中,Ts
是连续数据样本之间的样本时间或时间间隔。对于均匀采样的数据,Ts
是等于实验的采样时间的标量值。方法将默认时间单位设置为秒,但可以使用TimeUnit
财产。欲了解更多有关iddata
时间属性,请参见修改时间向量和频率向量.
对于不均匀采样的数据,指定Ts
作为[]
的值SamplingInstants
属性作为包含单个时间值的列向量。例如:
data = iddata(y,u,[],'SamplingInstants',TimeVector)
在哪里TimeVector
表示时间值的向量。
请注意
您可以修改该属性SamplingInstants
通过将其设置为一个新的向量,其长度等于数据样本的数量。
要表示时间序列数据,使用以下语法:
ts_data = iddata(y,[],Ts)
在哪里y
是输出数据,[]
表示空输入数据,和Ts
是采样时间。
下面的示例显示如何创建iddata
对象使用单输入/单输出(SISO)数据dryer2.mat
.输入输出各包含1000个样本,样本时间为0.08
第二。
加载输入u2和输出y2。负载dryer2创建iddata对象。数据= iddata(y2,u2,0.08)
data = 1000个样本的时域数据集。采样时间:0.08秒输出单位(如指定)y1输入单位(如指定)u1
默认通道名“日元”
分配给第一个也是唯一一个输出通道。当y2
包含多个通道,通道被分配默认名称y1, y2’,‘y2’,……,“yn”
.类似地,默认通道名‘u1’
分配给第一个也是唯一一个输入通道。有关命名通道的详细信息,请参见命名、添加和删除数据通道.
频域数据是输入和输出信号在特定频率值下的傅里叶变换。要表示频域数据,请使用以下语法创建iddata
对象:
data = iddata(y,u,Ts,'Frequency',w)
“频率”
是一个iddata
属性,该属性指定频率值w
,在那里w
的频率列向量,它定义了傅里叶变换值的频率y
而且u
计算。Ts
是原始时域数据的连续数据样本之间的时间间隔,以秒为单位。w
,y
,u
行数相同。
请注意
必须为频域数据指定频率向量。
欲了解更多有关iddata
时间和频率特性,见修改时间向量和频率向量.
若要指定连续时间系统,请设置Ts
来0
.
属性时可以指定其他属性iddata
对象,如下所示:
data = iddata(y,u,Ts,'Property1',Value1,…,'PropertyN',ValueN)
有关访问对象属性的详细信息,请参见属性.
控件的属性iddata
对象时,使用得到
命令。例如,在提示符下输入以下命令:
加载输入u2和输出y2。负载dryer2创建iddata对象。Data = iddata(y2,u2,0.08);获取数据的属性值。(数据)
ans =带字段的结构:域:“时间”名称:" OutputData: [1000x1 double] y: '同OutputData' OutputName: {'y1'} OutputUnit: {"} InputData: [1000x1 double] u: '同InputData' InputName: {'u1'} InputUnit:{"}周期:Inf InterSample: 'zoh' Ts: 0.0800 Tstart: [] SamplingInstants: [1000x0 double] TimeUnit: 'seconds' ExperimentName: 'Exp1'注释:{}UserData: []
有关所有属性的完整描述,请参见iddata
参考页面。
属性时可以指定属性iddata
对象使用构造函数语法:
data = iddata(y,u,Ts,'Property1',Value1,…,'PropertyN',ValueN)
更改现有对象的属性值iddata
对象时,使用集
命令或点表示法。例如,将采样时间更改为0.05
,在提示符下输入以下内容:
(数据集,Ts, 0.05)
或者说:
数据。Ts = 0.05
属性名不区分大小写。如果前几个字母唯一地标识了属性,则不需要输入整个属性名。
提示
你可以使用data.y
作为替代方案数据。OutputData
访问输出值,或使用data.u
作为替代方案数据。InputData
访问输入值。
一个iddata
包含频域数据的对象包含特定于频率的属性,例如频率
对于频率向量和单位
对于频率单位(而不是Tstart
而且SamplingInstants
).
要查看属性列表,在提示符处输入以下命令序列:
加载输入u2和输出y2。负载dryer2;创建iddata对象。Data = iddata(y2,u2,0.08);对数据进行傅里叶变换%变换到频域。数据= fft(数据)
data = 501个频率响应的频域数据集。频率范围:0 ~ 39.27 rad/秒采样时间:0.08秒输出单位(如有指定)y1输入单位(如有指定)u1
获取数据的属性值。(数据)
ans =带字段的结构:域:'Frequency'名称:" OutputData: [501x1 double] y: 'Same as OutputData' OutputName: {'y1'} OutputUnit: {"} InputData: [501x1 double] u: 'Same as InputData' InputName: {'u1'} InputUnit: {"} Period: Inf InterSample: 'zoh' Ts: 0.0800 FrequencyUnit: 'rad/TimeUnit' Frequency: [501x1 double] TimeUnit: 'seconds' ExperimentName: 'Exp1' Notes: {} UserData: []
子引用数据及其属性允许您选择数据值并分配新的数据和属性值。
中子引用特定数据值时使用以下通用语法iddata
对象:
数据(样本、outputchannels inputchannels experimentname)
在这种语法中,样品
指定一个或多个样本索引,outputchannels
而且inputchannels
指定通道索引或通道名称,和experimentname
指定实验索引或名称。
例如,检索样本5
通过30.
在iddata
对象数据
并将它们存储在一个新的iddata
对象data_sub
,使用以下语法:
Data_sub = data(5:30)
还可以使用逻辑表达式来子引用数据。例如,从单个实验数据集中检索位于样本瞬间之间的所有数据值1.27
而且9.3
在iddata
对象数据
并将他们分配给data_sub
,使用以下语法:
Data_sub = data(data.sa>1.27&data.sa<9.3)
请注意
您不需要输入整个属性名。在这个例子中,sa
在data.sa
唯一标识SamplingInstants
财产。
您可以检索输入信号从iddata
对象,使用以下命令:
u = get(data,'InputData')
或
数据。InputData
或
data.u% u is the abbreviation for InputData
类似地,您可以使用
数据。OutputData
或
data.y% y is the abbreviation for OutputData
中使用以下通用语法子引用特定的数据通道iddata
对象:
实验数据(样本、outputchannels inputchannels)
在这种语法中,样品
指定一个或多个样本索引,outputchannels
而且inputchannels
指定通道索引或通道名称,和experimentname
指定实验索引或名称。
若要指定多个通道名称,必须使用名称字符向量的单元格数组。
例如,假设iddata
对象数据
包含三个输出通道(命名为日元
,y2
,y3
)和四个输入通道(命名为u1
,u2
,u3
,的愉快
).中选择所有数据样本y3
,u1
,的愉快
,在提示符下输入以下命令:
使用单元格数组引用输入通道'u1'和'u4' data_sub = data(:,'y3',{'u1','u4'})
或者同样的
使用通道索引1和4%引用输入通道data_sub = data(:,3,[1 4])
提示
使用冒号(:
)指定所有样本或所有通道,而空矩阵([]
),以指定没有样本或没有通道。
类的输出数据来创建时间序列对象iddata
对象,输入以下命令:
Data_ts = data(:,:,[])
可以为子引用变量赋新值。例如,下面的命令分配输出通道的前10个值1
的数据
到样本中的值101
通过110
在输出通道中2
的data1
.它还指定了样本中的值101
通过110
在输入通道中3.
的data1
到输入通道的前10个值1
的数据
.
数据(1:10,1,1)= data1(101:110,2,3)
使用下面的通用语法来子引用特定的实验iddata
对象:
数据(样本、outputchannels inputchannels experimentname)
在这种语法中,样品
指定一个或多个样本索引,outputchannels
而且inputchannels
指定通道索引或通道名称,和experimentname
指定实验索引或名称。
当指定多个实验名称时,必须使用名称字符向量的单元格数组。的iddata
对象中存储实验名称ExperimentName
财产。
例如,假设iddata
对象数据
包含五个默认名称的实验,Exp1
,Exp2
,Exp3
,Exp4
,Exp5
.使用下面的语法子引用第一个和第五个实验数据
:
data_sub = data(:,:,:,{'Exp1','Exp5'}) %使用实验名
或
data_sub = data(:,:,:,[1 5]) %使用实验索引
提示
使用冒号(:
)表示所有样本和所有通道,空矩阵([]
),以指定没有样本和通道。
或者,您可以使用getexp
命令。下面的例子展示了如何子引用第一个和第五个实验数据
:
data_sub = getexp(data,{'Exp1','Exp5'}) %使用实验名
或
data_sub = getexp(data,[1 5]) %使用实验索引
下面的例子显示了如何检索实验3的输出通道2和3以及输入通道4到8的前100个样本:
dat(1:10 0[2、3],[4:8],3)
的InputData
iddata
属性按列存储输入数据,而OutputData
属性按列存储输出数据。有关访问的更多信息iddata
属性,看到iddata属性.
横向连接的iddata
对象创建一个新的iddata
对象,该对象附加所有InputData
信息和一切OutputData
.这种类型的连接产生一个具有更多输入和输出通道的单个对象。属性上执行水平连接iddata
对象data1、data2,…,dataN
:
data = [data1,data2,…,dataN]
此语法等价于以下较长的语法:
数据。InputData = [data1.InputData,data2.InputData,…,dataN.]InputData)数据。OutputData= [data1.OutputData,data2.OutputData,...,dataN.OutputData]
对于水平连接,data1、data2,…,dataN
必须有相同数量的样本和实验Ts
而且Tstart
值。
这些通道在连接iddata
对象的命名规则如下:
组合默认通道名-如果你连接iddata
具有默认通道名称的对象,例如u1
而且日元
,渠道在新iddata
对象自动重命名,以避免名称重复。
组合重复输入通道——如果data1、data2,…,dataN
输入通道具有重复的用户定义名称,这样吗dataK
中已经存在的通道名称dataJ
与J < k
,dataK
通道被忽略。
组合重复输出通道——如果data1、data2,…,dataN
如果输入通道具有重复的用户定义名称,则在连接过程中只添加具有唯一名称的输出通道。
垂直连接的iddata
对象创建一个新的iddata
对象,该对象将输入和输出数据值垂直堆叠在相应的数据通道中。结果对象具有相同数量的通道,但是每个通道包含更多的数据点。例如,下面的语法创建一个数据
对象,使其样本总数为其中样本的和data1、data2,…,dataN
.
数据= [data1;data2;…]; dataN]
此语法等价于以下较长的语法:
数据。InputData = [data1.InputData;data2.InputData;…InputData)数据。OutputData= [data1.OutputData;data2.OutputData;...;dataN.OutputData]
对于垂直级联,data1、data2,…,dataN
必须有相同数量的输入通道,输出通道,和实验。