主要内容

表示时间域和频域数据使用iddata对象

iddata构造函数

构造iddata对象的要求

构建一个iddata对象,您必须已经将数据导入MATLAB®工作区,如中所述在MATLAB工作区中表示数据

为时域数据构造iddata对象

使用下面的语法创建一个时间域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对象

频域数据是输入和输出信号在特定频率值下的傅里叶变换。要表示频域数据,请使用以下语法创建iddata对象:

data = iddata(y,u,Ts,'Frequency',w)

“频率”是一个iddata属性,该属性指定频率值w,在那里w的频率列向量,它定义了傅里叶变换值的频率y而且u计算。Ts是原始时域数据的连续数据样本之间的时间间隔,以秒为单位。wy,u行数相同。

请注意

必须为频域数据指定频率向量。

欲了解更多有关iddata时间和频率特性,见修改时间向量和频率向量

若要指定连续时间系统,请设置Ts0

属性时可以指定其他属性iddata对象,如下所示:

data = iddata(y,u,Ts,'Property1',Value1,…,'PropertyN',ValueN)

有关访问对象属性的详细信息,请参见属性

iddata属性

控件的属性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对象中选择数据通道、I/O数据和实验

子引用输入和输出数据

子引用数据及其属性允许您选择数据值并分配新的数据和属性值。

中子引用特定数据值时使用以下通用语法iddata对象:

数据(样本、outputchannels inputchannels experimentname)

在这种语法中,样品指定一个或多个样本索引,outputchannels而且inputchannels指定通道索引或通道名称,和experimentname指定实验索引或名称。

例如,检索样本5通过30.iddata对象数据并将它们存储在一个新的iddata对象data_sub,使用以下语法:

Data_sub = data(5:30)

还可以使用逻辑表达式来子引用数据。例如,从单个实验数据集中检索位于样本瞬间之间的所有数据值1.27而且9.3iddata对象数据并将他们分配给data_sub,使用以下语法:

Data_sub = data(data.sa>1.27&data.sa<9.3)

请注意

您不需要输入整个属性名。在这个例子中,sadata.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)和四个输入通道(命名为u1u2u3,的愉快).中选择所有数据样本y3u1,的愉快,在提示符下输入以下命令:

使用单元格数组引用输入通道'u1'和'u4' data_sub = data(:,'y3',{'u1','u4'})

或者同样的

使用通道索引1和4%引用输入通道data_sub = data(:,3,[1 4])

提示

使用冒号()指定所有样本或所有通道,而空矩阵([]),以指定没有样本或没有通道。

类的输出数据来创建时间序列对象iddata对象,输入以下命令:

Data_ts = data(:,:,[])

可以为子引用变量赋新值。例如,下面的命令分配输出通道的前10个值1数据到样本中的值101通过110在输出通道中2data1.它还指定了样本中的值101通过110在输入通道中3.data1到输入通道的前10个值1数据

数据(1:10,1,1)= data1(101:110,2,3)

Subreferencing实验

使用下面的通用语法来子引用特定的实验iddata对象:

数据(样本、outputchannels inputchannels experimentname)

在这种语法中,样品指定一个或多个样本索引,outputchannels而且inputchannels指定通道索引或通道名称,和experimentname指定实验索引或名称。

当指定多个实验名称时,必须使用名称字符向量的单元格数组。的iddata对象中存储实验名称ExperimentName财产。

例如,假设iddata对象数据包含五个默认名称的实验,Exp1Exp2Exp3Exp4,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)

增加iddata对象的通道数或数据点

iddata属性存储输入和输出数据

InputDataiddata属性按列存储输入数据,而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中已经存在的通道名称dataJJ < 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必须有相同数量的输入通道,输出通道,和实验。

另请参阅

相关的话题