Chapter Twenty Five

第25話



私のPCはPowerMac 7500/100なのだが、Mac OS8でシステムが肥大化して動作が緩慢になった。特に、LabVIEWでサウンド遊びを始めたらデータの重さが身にしみてきた。入門機でも604e 200MHzの時代だから画面がもたついてもしょうがない気もするが、まずはメモリ増強でしのぐ決心をして64MBのメモリを注文した。年末には高速CPUカードも値がこなれてくるかも知れないし、、、

サウンドデータは22kHzで取り込んでも、10秒間で22万個ものデータになってしまう。取込み時間を自制しないとどんどん大きくなっていく。今回は巨大なサウンドデータをグラフ表示するときに便利な小道具を作ってみよう。

1次元配列のグラフ表示は下のVI (Disp1.vi) のように簡単に行うことができる。ここではこの後の展開のためにx軸の初期値と増分を指定しているが、配列を直接グラフに出力するのがふつうだろう。
表示されたグラフについて考えてみると、ディスプレイの表示能力は全幅で1000ドット前後だから125000個のデータをひとつづつ正直に表示しているわけではない。グラフ表示器は表示幅や座標軸のスケールにあわせて圧縮表示し、虫眼鏡ツールで見たいところを拡大すると自動的に対応してくれる高度で便利な表示器だ。しかし、データ数が大きくなると速度が遅くなるし、それだけのメモリも要求する。

どうせデータを間引いて表示されるなら、始めから間引いておいた方が良いだろう。 (Disp2.vi)
データを適当な間隔でブロックに分けて、各ブロックのMaxとMinを取り出して順番に並べるとほとんど同じグラフに見える。素直にダイアグラムを書こうとすると面倒臭そうだが、1次元配列を2次元配列に変形することで簡単に実現することがでる。
ダイアグラムの動作をねんのために書いておこう。
DisplaySizeで指定されるグラフのデータ数の半分をブロック数にする。1次元配列をブロック数の大きさのRowサイズをもつ2次元配列に変更する。Forループに2次元配列を入れてRowごとのMax、Minを見つける。それぞれの1次元配列を交互に入れこめば、ブロックごとのMax、Minが並んだ1次元配列ができる。X軸の増分を2次元配列のColumn数の半分にすると実データとつじつまが合う。
Data配列の大きさとDisplaySizeが同じくらいなら圧縮する必要がないのでCase構造の"False"側でなにもせずにグラフに出力する。

これはふつうのデータ収録用としても利用価値が高そうなので、グラフをクラスターに置き換えてサブVI (CompactGraph.vi) にしておこう。
このサブVIを使ってDisp2.viを書き直したのが、下のダイアグラムだ。 (Disp3.vi)

ここまでの過程をプロフィールウインドウで調べると、グラフ表示に要する時間と若干だがメモリをセーブすることができたようだ。サブVIを使うことでほんの少し動作時間が増えているが、ダイアグラムがシンプルになって機能の使い回しができるメリットの方が大きい。

冒頭でメモリ増設のことを書いたが、書いている途中で96MBになったのでその感想---こんなに気持ちが好くなるなんて信じられないくらいで、CPUボードはまだ先でもいいのかな? メモリ増設は正しい投資だったと確信!

See you!


Nigel Yamaguchi

戻る