表示时频域数据使用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
是原始时域数据的连续数据采样之间的时间间隔,以秒为单位。w
,y
,u
行数相同。
请注意
必须为频域数据指定频率向量。
有关iddata
时间和频率特性,见修改时间和频率向量。
若要指定连续时间系统,请设置Ts
来0
。
对象时可以指定其他属性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.3
在iddata
对象数据
并将它们分配给data_sub
,使用以下语法:
data_sub =数据(data.sa > 1.27 &data.sa < 9.3)
请注意
您不需要输入整个属性名。在这个例子中,sa
在data.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
)和四个输入通道(命名为u1
,u2
,u3
,的愉快
).中的所有数据样本y3
,u1
,的愉快
,在提示符处输入以下命令:
%使用单元格数组引用%输入通道'u1'和'u4' data_sub = data(:,'y3',{'u1','u4'})
或者同样的
使用通道索引1和4%引用输入通道data_sub = data(:,3,[1 4])
提示
使用冒号(:
)指定所有样本或所有通道,空矩阵([]
)以指定没有样本或没有通道。
方法中提取输出数据来创建时间序列对象iddata
对象,输入以下命令:
data_ts =数据(:,:,[])
可以为子引用变量赋新值。例如,下面的命令为输出通道分配前10个值1
的数据
到样本中的值101
通过110
在输出通道中2
的data1
。它还指定了样本中的值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
对象数据
包含五个使用默认名称的实验,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)
增加iddata对象的通道或数据点数量
iddata属性存储输入和输出数据
的InputData
iddata
属性存储按列的输入数据,而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
中已经存在的通道名称dataJ
与J < 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
必须有相同数量的输入通道,输出通道和实验。