将数据数组转换为时间序列对象

时间:2013-06-14 21:41:37

标签: matlab simulink test-data

我有一个10000x43阵列,代表从数据采集硬件中获取的测试数据。第一列是时间向量,其余列是每个通道。我还有一个1x43的单元阵列,用于定义每个通道的名称。

我想从这个数组数据创建一个timeseries对象。我想这样做的原因是我可以在总线选择器块中使用通道名称 - 这样可以很容易地将测试数据提供给simulink模型。

我已经在网上查看了文档但是我没有太多运气如何重现在simulink中使用“ToWorkspace”块时获得的相同类型的时间序列对象。

1 个答案:

答案 0 :(得分:1)

假设您有一个包含通道名称和mXn数据数组的单元格数组,其中第一列是时间向量,其他列以与单元格数组中的值相同的顺序表示数据。

这主要是创建与数据名称相同的simulink总线对象,并创建具有相同名称的各个时间序列对象的结构。这是我从文档中找到的部分。

这样做的好处是:

  • 可以轻松选择Simulink中“FromWorkspace”块中的特定频道
  • 如果您有其他信息,例如单位,您可以将其编码到时间序列对象(以及simulink总线对象)中。

这是您可以复制到Matlab并运行的示例代码:

load count.dat
timedata = [1:24]';
count = [timedata count];
clear timedata;
chan_title = {'chan1', 'chan2','chan3'}; % make sure no spaces between words

%% create simulink bus and timeseries structure
rundata_bus = Simulink.Bus;
rundata_ts = struct; 
for i = 1:length(chan_title)
    %% create bus elements
    saveVarsTmp{1}(i, 1) = Simulink.BusElement;
    saveVarsTmp{1}(i, 1).Name = chan_title{i};

    %% create individual timeseries
    rundata_ts.(chan_title{i}) = timeseries(count(:,i),count(:,1),'name',chan_title{i});
end
rundata_bus.Elements = saveVarsTmp{1};
clear saveVarsTmp;