主要内容

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

iddata构造函数

构造iddata对象的要求

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

为时域数据构造一个iddata对象

使用以下语法创建时域iddata对象数据

data = iddata (y、u, Ts)

您还可以指定其他属性,如下所示:

data = iddata (y, u, Ts Property1, Value1,…,“PropertyN”,家)

有关访问对象属性的更多信息,请参见属性

在这个例子中,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对象。data = iddata (y2, u2, 0.08)
data =具有1000个样本的时域数据集。采样时间:0.08秒输出单位(如指定)y1输入单位(如指定)u1

默认通道名“日元”分配给第一个也是唯一的输出通道。当y2包含多个通道,这些通道被分配默认名称y1, y2’,‘y2’,……,“yn”。类似地,默认通道名‘u1’分配给第一个也是唯一的输入通道。有关命名通道的更多信息,请参见命名、添加和删除数据通道

为频域数据构造一个iddata对象

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

data = iddata (y, u, Ts,“频率”,w)

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

请注意

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

有关iddata时间和频率特性,见修改时间和频率向量

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

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

data = iddata (y, u, Ts Property1, Value1,…,“PropertyN”,家)

有关访问对象属性的更多信息,请参见属性

iddata属性

的属性iddata对象,使用得到命令。例如,在提示符处输入以下命令:

加载输入u2和输出y2。负载dryer2创建iddata对象。data = iddata (y2, u2, 0.08);获取数据的属性值。(数据)
ans =结构体字段:域:'Time'名称:" OutputData: [1000x1 double] y: 'Same as OutputData' OutputName: {'y1'} OutputUnit: {"} InputData: [1000x1 double] u: 'Same as InputData' InputName: {'u1'} InputUnit:{"}周期:Inf InterSample: 'zoh' Ts: 0.0800 Tstart: 0.0800 SamplingInstants: [1000x1 double] TimeUnit: 'seconds' ExperimentName: 'Exp1'注释:{}UserData: []

有关所有属性的完整描述,请参见iddata参考页面。

对象时可以指定属性iddata对象,使用构造函数语法:

data = iddata (y, u, Ts Property1, Value1,…,“PropertyN”,家)

对象的属性值iddata对象,使用命令或点符号。例如,将采样时间更改为0.05,在提示符处输入以下内容:

(数据集,Ts, 0.05)

或者说:

数据。t = 0.05

属性名不区分大小写。如果前几个字母唯一标识属性,则不需要输入整个属性名。

提示

您可以使用data.y作为替代方案数据。OutputData访问输出值,或使用data.u作为替代方案数据。InputData来访问输入值。

一个iddata包含频域数据的对象包含特定于频率的属性,例如频率对于频率向量和单位对于频率单位(而不是Tstart而且SamplingInstants).

要查看属性列表,在提示符处输入以下命令序列:

加载输入u2和输出y2。负载dryer2创建iddata对象。data = iddata (y2, u2, 0.08);对数据进行傅里叶变换。%将它转换到频域。data = fft(数据)
data = 501频率响应的频域数据集。频率范围:0 ~ 39.27 rad/seconds采样时间: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:{"}周期:Inf InterSample: 'zoh' Ts: 0.0800 FrequencyUnit: 'rad/TimeUnit'频率:[501x1 double] TimeUnit: 'seconds' ExperimentName: 'Exp1'注释:{}UserData: []

在iddata对象中选择数据通道、I/O数据和实验

子引用输入和输出数据

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

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

数据(样本、outputchannels inputchannels experimentname)

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

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

data_sub =数据(5)

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

data_sub =数据(data.sa > 1.27 &data.sa < 9.3)

请注意

您不需要输入整个属性名。在这个例子中,sadata.sa惟一地标识SamplingInstants财产。

你可以检索输入信号从iddata对象,使用以下命令:

u =得到(数据、“InputData”)

数据。InputData

data.u% u is the abbreviation for InputData

类似地,您可以使用

数据。OutputData

data.y% y is the abbreviation for OutputData

Subreferencing数据通道

中使用以下通用语法对特定的数据通道进行子引用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 =数据(:,:,[])

可以为子引用变量赋新值。例如,下面的命令为输出通道分配前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对象,它追加allInputData信息和所有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

data = [data1; data2;…; dataN]

此语法等价于以下较长的语法:

数据。InputData = [data1.InputData; data2.InputData;……;dataN。InputData)数据。OutputData= [data1.OutputData;data2.OutputData;...;dataN.OutputData]

对于垂直连接,data1、data2,…,dataN必须有相同数量的输入通道,输出通道和实验。

另请参阅

相关的话题

Baidu
map