labview プログラムを使用してデータを Excel シートに収集します。データは一定の間隔で継続的に収集され、ファイル内の列の 1 つでイベントがマークされ、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
、 a を実行しstrfind
てイベント マーカーの行インデックスを見つけ、データをタスクに分割します。各タスクは、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 の列に対して分析を実行し、残りのタスクに対してプロセスを繰り返すことができます。