Compose-3020:OMLでのCAEデータの読み取り

Tutorial Level: Advanced

このチュートリアルでは、以下の操作方法について説明します:
  • readvectorbuilderを使用してCAEファイルの階層を確認する。
  • readvectorを使用してCAEデータを読み取る。
  • readmultvectorsを使用してCAEデータを読み取る。

readvectorbuilderを使用した階層の確認

readvectorbuilderは、ComposeでサポートされているCAEの結果やデータファイルを読み取るユーティリティツールです。適切なreadvector()コマンドとreadmultvectors()コマンドを作成するうえで効果的です。このツールを実行するとreadvectorユーティリティダイアログが開きます。このダイアログを使用して、結果ファイルを選択し、そこに収められているサブケース、タイムステップ、タイプ、要求、コンポーネントに移動できます。目的の選択を指定して印刷を選択すると、(readvectorコマンドまたはreadmultvectorsコマンドを使用した)該当のOMLコマンドが表示されます。

  1. すべてのタイムステップにわたる値の読取り
    1. Compose EditorまたはOMLコマンドウィンドウで、readvectorbuilderコマンドを実行します。
      次のダイアログが表示されます。
    2. ファイルパスフィールドで、<installation_dir>/tutorials/にあるANGACCファイルを選択します。
      選択したファイルにはサブケースがないので、サブケースフィールドは非アクティブです。
    3. タイムステップですべてを選択します。これにより、すべてのタイムステップにわたり、Composeによって値が読み取られます。
    4. ファイルの構造のタイプ、要求、およびコンポーネントを表示するには、次のように該当するボックスのドロップダウンリストをクリックします。
    5. Insert data as stringsGenerate readvector command if possibleをアクティブにします。
    6. タイプ、要求、コンポーネントオプションを以下のように選択し、GUI右下隅の印刷をクリックすると、該当のコマンドが生成されます。
  2. 選択したタイムステップでの複数の要求とコンポーネントの読み取ります。
    1. 前の例で使用したANGACCファイルを引き続き使用します。
    2. タイムステップドロップダウンメニューで、この例でのタイムステップとして0(秒)を選択します。
    3. 終了リクエスト列と終了コンポーネント列が非アクティブからアクティブに変化します。要求を“50th% Hybrid3 - UPPER TORSO”、コンポーネントを“Y-comp. ang. acc.”に設定します。
    4. Insert data as stringsGenerate readvector command if possibleを非アクティブにします。
    5. 印刷をクリックすると、次のOMLコマンドが生成されます。
      readmultvectors('<installation_dir/tutorials/ANGACC',2,1,3,2,3,1)
    6. このコマンドをOMLコマンド ウィンドウで実行すると次の結果が得られます。

readvectorを使用したCAEデータの読み取り

この2番目の演習では、移動平均フィルターを設計し、CAEファイルから読み取ったデータをフィルター処理します。

  1. 元のデータをプロットします。
    1. ANGACCreadvectorbuilderで開き、
    2. 以下を選択:
      • タイプに"Angular Acceleration"
      • 開始リクエストを"50th% Hybrid3 - LOWER TORSO"に設定
      • 開始コンポーネントを"Res. ang. acc.」に設定
      • Insert data as stringsを非アクティブにし、Generate readvector command if possibleをアクティブにする
    3. readvectorbuilderダイアログ右下隅の印刷をクリックすると、次のOMLコマンドが生成されます。
      readvector('<installation_dir\tutorials\ANGACC',2,1,1)
      注: インデックス(整数)または文字列(名前)を使用してコマンドを生成することもできますが、“文字列としてデータを挿入”を使用してコマンドを生成することを強くお勧めします。

      次の2つのコマンドは同等です:

      readvector('<installation_dir>\tutorials ANGACC',2,1,1)
      readvector('<installation_dir>\tutorials ANGACC','Angular
      Acceleration','50th% Hybrid3   - LOWER TORSO','Res. ang. acc.')
    4. これらのコマンドをComposeで実行すると、次のグラフが得られます。
      y = readvector(<installation_dir\tutorials \ANGACC',2,1,1);
      plot(y);
  2. 簡単な移動平均フィルターを設計します。
    次のようにComposefilterコマンドを使用して簡単な移動平均フィルターを実装できます。
    % moving average filter
    b = 0.2*ones(1,5);
    a = 1;
    output = filter(b,a,input);
  3. 元のデータとフィルター処理したデータを比較します。
    次のスクリプトを使用して、ANGACCファイルから抽出した元のデータとフィルター処理したデータをプロットし、両者の差異を確認します。
    y = readvector('ANGACC',2,1,1);
    plot(y,'g--');
    % moving average filter
    b = 0.2*ones(1,5);
    a = 1;
    y2 = filter(b,a,y);
    hold on;
    plot(y2,'r:');
    legend('Original data','Filtered data');
    title('readvector Demo');
    xlabel('Time(ms)');
    ylabel('Angular Acceleration(rad/s2)');
    このプロットは次のようになります。

readmultvectorsを使用したCAEデータの読み取り

連続する複数の要求とコンポーネントにわたり、特定タイプのデータのベクトルを特定のタイムステップで読み取ることが必要になる場合があります。この処理はreadmultvectors関数で実現できます。この例では、CAEファイル全体を読み取り、そのデータを抽出します。readmultvectorsにファイルを渡すと、ファイルにあるすべての情報を収めたセルが次の書式で返されます:
  • 1番目の列にはタイプが記述されます。
  • 2番目の列には要求が記述されます。
  • 3番目の列にはコンポーネントが記述されます。
  • 4番目の列には、上記の3つの列に対応する情報で指定されたデータベクトルが記述されます。
  • 各行には、さまざまなデータセットが記述されます。以降は抽出関数を使用して、目的のデータを抽出できます。
以下に例を示します。
function y = SMA(x)
       b = 0.2*ones(1,5);
       a = 1;
       y = filter(b,a,x);
end
filePath = '<installation_dir>\tutorials\ANGACC';
y = readmultvectors(filePath);
% extract interested data then do the moving average filtering
y_LT1 = SMA(extract(y,'Angular Acceleration','50th% Hybrid3   - 
LOWER TORSO','Res. ang. acc.'));
y_LT2 = SMA(extract(y,'Angular Acceleration','50th% Hybrid3   - 
LOWER TORSO','X-comp. ang. acc.'));
y_LT3 = SMA(extract(y,'Angular Acceleration','50th% Hybrid3   - 
LOWER TORSO','Y-comp. ang. acc.'));
y_LT4 = SMA(extract(y,'Angular Acceleration','50th% Hybrid3   - 
LOWER TORSO','Z-comp. ang. acc.'));
x = extract(y,'Time','Time','Time');
% do the plot
plot(x,y_LT1,x,y_LT2,x,y_LT3,x,y_LT4);
xlabel('Time(ms)');
ylabel('Angular Acceleration(rad/s2)');
title('50th% Hybrid3 - LOWER TORSO');
legend('Res. ang. acc.','X-comp. ang. acc.','Y-comp. ang. 
acc.','Z-comp. ang. acc.');
このスクリプトによって次のプロットが得られます。

<installation_dir>/tutorial/readvector_demo.omlにあるOMLスクリプトには、このファイルから複数のデータを抽出する例があります。

そのスクリプトを実行すると、次の各プロットが得られます。