我通过labview程序将数据收集到excel表中,数据以固定间隔连续收集,事件在文件中的其中一列中标记,TaskA_0代表事件的开始,TaskA_1代表结束。这是数据的片段:
Time Data 1 Data 2 Data 3 Data 4 Event Name
13:38:41.888 0.719460527 0.701654664 0.221332969 0.012234448 Task A_0
13:38:41.947 0.437707516 0.588673334 0.524042112 0.309975646 Task A_1
13:38:42.021 0.186847503 0.589175696 0.393891242 0.917737946 Task B_0
13:38:42.115 0.44490411 0.073132298 0.897701096 0.633815257 Task B_1
13:38:42.214 0.833793601 0.004524633 0.40950937 0.808966844 Task C_0
13:38:42.314 0.953997375 0.055717025 0.914080619 0.166492915 Task C_1
13:38:42.414 0.245698313 0.066643778 0.515709814 0.606289696 Task D_0
13:38:42.514 0.248038367 0.862138045 0.025489223 0.352926629 Task D_1
目前,我使用 将其加载到 matlab 中xlsread
,然后运行 astrfind
以定位事件标记的行索引,以便将我的数据分解为任务,其中每个任务都是 TaskA_0 和 TaskA_1 之间相邻列中的数据(这里没有数据之间但通常存在,事件名称之间通常也有空白单元格)。这是最好的方法吗?一旦我将它放在单独的变量中,我就会对每个变量执行相同的操作,通常是基本统计数据和一些数据绘图。如果我想批量处理我的数据,我必须一遍又一遍地重写这些行以使数据按任务分解。即使我知道这是错误的并且效率极低,但我不知道如何更好地做到这一点。
[Data,Text]= xlsread('C:\TestData.xlsx',2); %time column and event name column end up in text, as does the data headers, hence the +1 for the row indices
IndexTaskAStart = find(~cellfun(@isempty,strfind(Text(:,2),'TaskA_0')))+1;
IndexTaskAEnd = find(~cellfun(@isempty, strfind(Text(:,2),'TaskA_1')))+1;
TaskAData = Data([IndexTaskAStart:IndexTaskAEnd,:];
现在我可以对 TaskAData 中的列进行分析,并对剩余的任务重复该过程。