計算信号
計算信号とは、データロガーが実際に記録したものではなく、1つ以上の既存チャンネルから数式に
よって導出される新しいチャンネルのことです - ETAS MDAのようなツールにおける数式/バーチャル
チャンネルと同じ考え方です。数式はmathjsの構文で記述し、エディタ内のクイック挿入ボタン
(abs、sqrt、min、max、round、
sin、cos、log、ビット演算子、比較/論理演算子)はあくまで
ショートカットであり、選べる関数を制限するものではありません - 専用ボタンがなくても、mathjs
の関数はすべて利用できます。
信号の参照
信号を参照するには、式の中にその信号の正確な名前をそのまま識別子として入力するか、信号リスト から名前をドラッグして挿入します。数式は実チャンネルだけでなく、別の計算信号を参照することも できるため、数式を階層的に組み立てられます: 単位変換、その変換値の上に構築する物理量の計算、 さらにその物理量の計算の上に構築するしきい値判定や分類信号 - それぞれが独立して名前を持ち、 再利用可能な信号として存在するため、1つのどんどん読みにくくなる式にすべてを詰め込む必要は ありません。
数式が実際にいつ、どのように評価されるか
これは、スプレッドシート的な感覚で捉えていると驚く部分です: 計算信号は、作成または編集した その瞬間に一度だけ評価されます - 1つのベクトル化された配列演算としてではなく、現在読み込まれて いる測定データの全サンプルに対して1点ずつ計算されます。これはライブで反応的に再計算される ものではなく、スナップショットです。後から、ある信号が依存している以前の信号を編集しても、 その後続の信号は古い、すでに計算済みの値を保持したままです - 参照先が変わったからといって 自動的に再実行されることはありません。新しい値を反映させるには、依存している信号を自分で開き 直し、再度送信する必要があります。
読み込まれた測定データ内のすべてのチャンネルは、すでに1つの共通のリサンプリング済み時間 グリッドを共有しているため(前述のはじめにを参照)、数式 エンジンは評価前に入力を補間したり整列させたりする必要が一切ありません - 構造上、共通のグリッド を前提にできます。
実際に保存されるもの
セッション構成には、各計算信号が生成した計算値ではなく、その数式そのものが保存され ます。その構成を再度開くと - 同じファイルに対してでも、別のファイルに対してでも - すべての 数式が、その時点で読み込まれている測定データに対して、元々保存された順序で(そのため、他の 信号に連鎖する信号も正しく解決されます)ゼロから再評価されます。保存された数式が、新しく読み 込んだファイルに存在しないチャンネルを参照している場合、その信号だけが黙ってスキップされ、 読み込み全体が失敗することはありません。
具体例。 実チャンネルtorque(N·m)とmotor_speed
(rad/s)が与えられているとき、式torque * motor_speed、単位Wで定義した
計算信号powerは、各サンプルにおける機械的パワーを計算します。2つ目の計算信号
power_kwは、式power / 1000、単位kWとして、最初の計算
信号を名前で参照することで、より読みやすい単位で再表現します - 1つの検証しづらい数式に
まとめる代わりに、2つの名前付きで独立して確認できる信号になります。
単位と命名
計算信号の単位フィールドは自由入力のラベルです - 数式の実際の計算結果が入力した単位と一致
しているかどうかをチェックする次元解析は行われないため、torque * motor_speedに
m/sというラベルを付けても、それが誤った単位であっても問題なく計算されてしまい
ます。実チャンネルであれ計算信号であれ、すべての信号名はその測定データ内で一意でなければ
なりません - 実チャンネルや別の計算信号ですでに使われている名前で計算信号を保存しようとする
と、アプリがその瞬間にこれを検出します。
エラー
不正な形式の数式 - 空の式、括弧の不一致、先頭/末尾の演算子、あるいはmathjs自体が受け付けない 構文 - は、入力中に継続的にではなく、信号を送信した時点で検出され、何が問題なのかを説明する インラインエラーとして表示されます。