はじめに
もともと開発系の人間なので、オシロやロジアナなどの計測機器での測定データをエクセルでグラフ化して分析することが多いんです。特にそんな人たちに伺います
エクセルのグラフ機能を使っていてイライラしたことありませんか?
・データ点数が多いとエクエルの反応が遅い
・グラフの座標が読み取れない
・拡大縮小を繰り返すのに最大最小を入れるのが面倒
・データ点間の測定ができない
・グラフ同士の四則演算するにしても、サンプリング時間が同じでないと計算できない
・グラフ近似が結構思ったところを通らない
まだまだありますが、こういった点を改善したアプリを作りました。求めるものは、
・最終的に残すデータの保存などはエクセルとし、エクセルとの連携が簡単にできる
・ちょっと分析してみたいときに手軽に扱えるアプリを目指す
・グラフ系列同士の四則演算(電流x電圧=電力etc)など欲しい機能はどんどん搭載する
取組みの最初から詳細仕様はなく、パイロットプロジェクト的に進め「これ欲しいな」って思った機能を追加していったので、動画とグラフの同期表示だとか、フィルター機能だとか様々な機能が入ってます。矛盾なく作り上げようとしたことと勉強も兼ねて取組んだので丸々3回くらい作り直ししてます
検証は、企業で行う検証(バグ取り)と比べると一旦というレベルで十分ではないですが、実作業で問題なく使えてます
アプリの動作環境
・OS     :Windows 10
・フレームワーク:.NET Framework 4.8
アプリのダウンロード
実行ファイルと説明で使用するテストデータは、ここからダウンロードできます
・実行ファイルのダウンロード・テストデータのダウンロード
これらのファイルは何も保証するものではありません。あくまでインストールを含め自己責任でご利用ください。ダウンロードで警告がでたら、「トラブル対処」を見て対処してください
実行ファイルのアプリはインストール不要ですが、マイクロソフトのライブラリである .Net Framework のインストールは必要です。既にインストール済でインストールを実行すると「インストール済のメッセージ」が出まが、その場合はキャンセルして抜けてください
以下の手順で実行できます。アプリ実行で警告がでたら、「トラブル対処」を見て対処してください
・zip ファイルを解凍します
・.Net Framework4.8 上で動作するので ndp48-web.exe を実行して、.Net Framework4.8 をインストールします
・SmallSolution_Graph.exe を実行します

アプリ実行例
起動した画面が以下のようになりますので、いったん「①詳細」→詳細パネルが開いたら「②全て規定値に戻す」→「③更新」をクリックして、設定を初期化してください
「×」か「更新」で閉じます

テストデータの「Can.csv」を「ファイル」→「開く」から開くか、ファイルをドラッグ&ドロップで開きます。グラフ上でマウス左クリックして左右に移動、ホイールを回して拡大縮小ができます

表示間引き
テストデータの「Sound_bike.wav」を「ファイル」→「開く」から開くか、ファイルをドラッグ&ドロップで開きます
「①詳細」→詳細パネルが開いたら基本タブの「②表示間引き」をチェックオフ→「③更新」をクリックしてください

グラフ上でマウス左クリックして左右に移動してみると、移動が極端に遅くなるはずです。「表示間引き」なしだと、すべてのデータ点を移動処理するので時間がかかってしまいますが、「表示間引き」ありだと重なっているデータ点を間引いて処理するので非常に短時間の移動処理ができます
データそのものを加工しているのではなく表示する時の処理で間引いています。データそのものの加工も機能をもっています(後述)
「表示間引き」はチェックオンに戻しておいてください
同期再生・・・サウンド再生(軽く紹介)
折角サウンドファイルを開いたので、音再生と動画再生の同期まで軽く紹介させてもらいます
ここでは音を出して再生させてみます。パソコンのスピーカをオンにしてからメニューの「同期」→「同期再生」をクリックしてください

Can.csv は缶のを鳴らす音で「ピン」と発し、Sound_bike.wav はバイクのエンジン音で「ブンブン・・・」と発するはずです

グラフ上でマウス左クリックして左右に移動すると、再生位置を変えられます
▼位置が再生(同期)位置で再生しているポイントです
同期再生・・・動画再生(軽く紹介)
グラフが多いと見ずらいので、マウスをタイトルパネル上にもっていくと「×」が浮かび上がるので、「Can.csv」を削除します

テストデータの「Video.mp4」を「ファイル」→「開く」から開くか、ファイルをドラッグ&ドロップで開きます。メニューの「同期」→「同期再生」をクリックすると、バイクの音と動画が同期して再生されます
マウスを動画にかざすとシークバーが出ます。この■のシークバー位置の時刻とバイク音の▼位置の時刻が同じになっています

動画再生が何故必要?
素材が一致していなので想像しずらいんですが、波形と機械的な動きを見ながら不具合の原因を探ったりすることは、メカトロ系の開発者にはよくあります。例えば動画が「エンジンの吸気弁」だとすると吸気弁の動きとエンジン音の発生タイミングを観察して、吸気弁の制御をずらして音が下がるポジションを探るとか・・・・(あくまで想像です)
何ができるかリスト・・・メニュー
| メニュー | 項目 | 内容 | 備考 | 
|---|---|---|---|
| ファイル | 開く | ファイル読込み csv、tsv wmv、avi、mov、mp4 wav、mp3、m4a bmp、jpg、png ssg、sb  | テキストファイル 動画ファイル サウンドファイル 静止画ファイル(読めるだけ) 独自バイナリファイル  | 
| 選択保存 | 選択したグラフのファイル書込み csv、tsv wav ssg、sb  | テキストファイル サウンドファイル 独自バイナリファイル  | |
| 終了 | アプリの終了 | ||
| 選択 | 全選択 | 全てのグラフを選択する | 選択グラフを一括変換するなどの 機能があるため、動画などは選択 されません  | 
| 最小化 | 選択されたグラフを最小化する | 個別にはタイトルパネルの右上に 表示される「-」で最小化可  | |
| 削除 | 選択されたグラフを削除する | 個別にはタイトルパネルの右上に 表示される「×」で削除可  | |
| 合成 | 選択されたグラフを一つのグラフ に合成する  | 複数の系列を持つグラフを生成 | |
| 合成解除 | 選択されたグラフを一つずつの系 列を持つグラフに分解する  | ||
| 自動配色 | 選択されたグラフの系列に色付け する  | 個別に色付けするには、グラフ上 で系列選択した後に「右クリック 」→「系列色」で変更可  | |
| 同期セット | 選択されたグラフの同期をセット する  | マウスでグラフを移動させると同 期グラフは同じ動きをするように なる  | |
| 同期解除 | 選択されたグラフの同期を解除す る  | ||
| 編集 | 削除 | 選択されたグラフを編集する 編集バー5と6の組み合わせで指 定したエリアを削除する  | 左と右の削除でグラフ位置の移動 はないが、間の削除はグラフをつ なげる  | 
| 上書き | 選択されたグラフを編集する 編集バー5と6の組み合わせで指 定したエリアを上書きする  | 上書きする値は、「詳細」→基本 タブの「「エリア上書き数値」で 変更可  | |
| ファイル保存 | 選択されたグラフを編集する 編集バー5と6の組み合わせで指 定したエリアをファイル保存する  | ||
| コピー | 選択されたグラフを編集する 編集バー5と6の組み合わせで指 定したエリアのデータをTSV形式 でクリップボードに保存する  | 「詳細」→基本タブの「クリップ ボード書込み」で形式変更可  | |
| 原点移動 | 選択されたグラフを編集する バー5の位置を原点に移動する  | 個別に移動するには、グラフプロ ット位置にマウスをのせてマーカ 「■」が表示された位置で「右ク リック」→「マーカ位置の原点移 動」で移動できます  | |
| 表示 | マーカー | グラフのプロット点にマーカ表示 する  | プロット点=データ点 | 
| 垂直カーソル | マウス位置の垂直方向に全てのグ ラフにカーソルを表示する  | ||
| 水平カーソル | マウス位置の水平方向にマウスが のったグラフだけカーソルを表示 する  | ||
| ヒント | グラフプロット位置にマウスをの せてマーカ「■」が表示されたデ ータの値を表示する  | ||
| グリッド | グラフ縦方向のグリッドを表示す る  | ||
| 再表示 | グラフ全体が表示されるようなス ケールで再表示する  | ||
| スクロール | 水平 | 水平方向の移動と拡大縮小を有効 にします  | |
| 垂直 | 垂直方向の移動と拡大縮小を有効 にします。マウスがのったグラフ で有効になります  | 動画は水平と垂直ともに有効 | |
| 計測 | 垂直バー1 | グラフに垂直バー1を表示し、そ の位置を値で表示する  | グラフを移動してバーが見えなく なったら、再度設定をオフオンし てください  | 
| 垂直バー2 | グラフに垂直バー2を表示し、そ の位置を値で表示する  | 同上 | |
| 水平バー1 | 選択中のグラフに水平バー3を表 示し、その位置を値で表示する  | 同上 | |
| 水平バー2 | 選択中のグラフに水平バー4を表 示し、その位置を値で表示する  | 同上 | |
| 近傍点移動 | 垂直水平バー移動で、グラフのプ ロット点が近傍にあれば、その近 傍点に強制移動する  | 「詳細」→基本タブの「表示間引 き」がチェックされている間引き されている場合で有効  | |
| コピー ペースト  | 選択コピー | 選択されたグラフのデータをTSV 形式でクリップボードに保存する  | 「詳細」→基本タブの「クリップ ボード書込み」で形式変更可  | 
| 選択ハード コピー  | 選択されたグラフをビットマップ 形式でクリップボードに保存する  | レポート作成などは便利です | |
| ペースト | CSV・TSV形式のデータがクリッ プボードに保存されていれば、 グラフとして読込みする  | ||
| 作図 | 直線フィッテ ィング  | マウスで直線を引く。その直線を 近似直線として傾きと切片を表示 する  | 直線の端点をマウスでピックアッ プして移動させると近似も変化し ます  | 
| 指数フィッテ ィング  | マウスで矩形を引く。その矩形内 に指数曲線が表示され時定数を表 示する  | 矩形のピックアップ点を移動させ ると形状やXY反転できます 時定数をアバウトでもすぐに知り たいときに結構使えます  | |
| 矩形メモ | エクセルなどのテキストボックス と同じような図形  | 選択ハードコピーと併用して使う とレポート作成などは便利です  | |
| 直線 | エクセルなどの直線と同じような 図形  | 同上 | |
| 円 | エクセルなどの円と同じような図 形  | 同上 | |
| エリア指定で 選択  | 作図した図形をマウスでエリア指 定して選択する  | 「Delete」キーで削除、マウスで 移動、「Cntl-C」と「Cntl-V」で アプリ内でコピペ可  | |
| エリア指定で 削除  | 作図した図形をマウスでエリア指 定して削除する  | ||
| 詳細 | ーーーー | アプリの詳細設定をする | |
| Language | Japanese | 日本語表記にする | |
| English | 英語表記にする | 
何ができるかリスト・・・右クリックコンテキストメニュー
| メニュー | 項目 | 内容 | 
|---|---|---|
| 座標コピー | ーーーー | ヒントで表示された値をクリップボードに保存する | 
| マーカ位置の原点移動 | X移動 | グラフプロット位置にマウスをのせてマーカ「■」 が表示された位置を原点に移動(X原点移動)  | 
| Y移動 | 同上(Y原点移動) | |
| XY移動 | 同上(XY原点移動) | |
| 系列削除 | ーーーー | グラフプロット位置にマウスをのせてマーカ「■」 が表示された位置で左クリックすると系列が選択で きる。この選択された系列を削除する 「Delete」キーでも削除可  | 
| 系列幅 | 各選択 | 系列線の幅を選択する | 
| 系列色 | 各選択 | 系列線の色を選択する | 
| マーカータイプ | 各選択 | 系列線のマーカタイプを選択する | 
| グリッド色 | 各選択 | グラフのグリッド色を選択する | 
| 背景色 | 各選択 | グラフの背景色を選択する | 
| 系列オーディオ再生 | ーーーー | 同期再生でサウンドを有効にする | 
| 拡大表示 | ーーーー | 複数のグラフは基本的にカスケード(縦)表示が基 本だが、一つだけ拡大して右側に表示する  | 
| 2値変換 | 変化点データ2値化 | Saleaeのロジアナのように、デジタルの2値 データのフォーマットで変化点のデータで出力され るものがある。そういった変化点データを補間処理 する  | 
| アナログ2値化 | アナログデータの2値化処理をする。閾値は大津の 判定法を用いている  | |
| 2値グラフノイズ 検出  | 2値データの凸パルス or 凹パルス幅が100us 以下のパルスを検出処理する。パルス幅は「詳細」 →変換タブの「ノイズ幅」で変更可  | |
| 2値グラフノイズ 削除  | 2値データの凸パルス or 凹パルス幅が100us 以下のパルスを除去処理する。パルス幅は「詳細」 →変換タブの「ノイズ幅」で変更可  | |
| Dutyハイ | データの最初が ・Hi→Lo→Hiなら最初のHiは無視 次のLoとHiを1パルスとしてHiのDuty を求めてグラフ化する ・Lo→Hi→Loなら最初のLoは無視 次のHiとLoを1パルスとしてHiのDuty を求めてグラフ化する  | |
| Dutyロー | データの最初が ・Hi→Lo→Hiなら最初のHiは無視 次のLoとHiを1パルスとしてLoのDuty を求めてグラフ化する ・Lo→Hi→Loなら最初のLoは無視 次のHiとLoを1パルスとしてLoのDuty を求めてグラフ化する  | |
| 周波数ハイエッジ | データの最初が ・Hi→Lo→Hi→Loなら最初のHi→Loは 無視。次のHiとLoの合計時間を周波数に直し てグラフ化する ・Lo→Hi→Lo→Hiなら最初のLoは無視 次のHiとLoの合計時間を周波数に直してグラ フ化する  | |
| 周波数ローエッジ | データの最初が ・Hi→Lo→Hi→Loなら最初のHiは無視 次のLoとHiの時間を周波数に直してグラフ化する ・Lo→Hi→Lo→Hiなら最初のLo→Hiは 無視。次のLoとHiの合計時間を周波数に直し てグラフ化する  | |
| 周波数両エッジ | データの最初が ・Hi→Lo→Hi→Loなら最初のHiは無視 次のLoの時間を周波数に直してグラフ化する ・Lo→Hi→Lo→Hiなら最初のLoは無視 次のHiの時間を周波数に直してグラフ化する  | |
| 中心位相 | Hiパルス中心点とLoパルス中心位置を結ぶ三角 波のデータをグラフ化する  | |
| 反転 | HiとLoを反転しグラフ化する | |
| パルス積算 ハイエッジ  | Hiエッジ検出でプラス1の積算しグラフ化する | |
| パルス積算 ローエッジ  | Loエッジ検出でプラス1の積算しグラフ化する | |
| パルス積算 両エッジ  | エッジ検出でプラス1の積算しグラフ化する | |
| Log10変換 | 各選択 | X軸、Y軸を Log 変換する | 
| FFT変換 | 各選択 | A、C、Z特性で FFT変換する | 
| 音圧変換 | 各選択 | A、C、Z特性で 音圧変換する | 
| ウエーブレット変換 | 各選択 | A、C、Z特性で ウエーブレット変換する | 
| デジタルフィルタ | 各選択 | ローパス、ハイパス、バンドパス、ノッチ、ローシ ェルフ、ハイシェルフ、ピーキング、オールパスの フィルタ変換をする  | 
| 拡張フィルタ | 各選択 | FIRローパス、FIRハイパス、FIRバンドパ ス、FIRノッチのフィルタ変換をする  | 
| 算術演算 | 各選択 | 時間積分、時間微分、Y値積算、Y値差分、四則演算 の変換をする  | 
| 間引き | 各選択 | 1/10~1/10000のデータ点間引き変換を する  | 
モータ制御をやってたことが多く、モータ制御に関する機能が多いかもしれません。以降でもう少し詳しく説明していきます