Scilabのプログラムが実戦に使えるようになるまで

y_takeuchi2009-04-12

数行でFFTやFIRフィルタが出来てしまうScilabではあるが、実際に使うとなれば色々と手を加えないといけない。
FIRフィルタの方はfor文を組んで多チャンネルデータを一括して変換するだけで良いのだが、FFTの方はオーバーラップ率に伴うデータのシフトしながらの加算平均やピークホールドの処理が必要なので結構、めんどくさい。オーバーラップ率を99.999・・%にすればデータ末尾の窓分に足らないデータを捨て無くて良いのだが、えらく時間がかかってしまう。足らない分は0を足して補う事も出来るが、仮に余りが1個のデータだけで、窓長-1の0を足してFFTしてその結果を加算平均に使うのは不味かろう。

C#のプログラムには実装していない、Scilabの方にだけの機能として、スイープ平均を作ってみた。加振機のFFT結果から最も卓越している帯域だけ、他のチャンネルのFFTもその帯域だけ加算平均を行う。ただ、どうもオーバーラップ率を75%とかだと歯抜けになってしまうので、99.999・・%にしないと・・そこまで高い必要は無いのかも知れないが・・・精度を求めるなら高いに越したことは無い、だが時間がかかる。特にスイープ加振なんて数十分かけて行うから、いくら建物の振動測定だからサンプリングはそう高くは無いといっても時間がかかる。

次なる目標は、FFTの方をベースにして伝達関数コヒーレンス関数を出すのと、FIRフィルタの方をベースにして1/3オクターブバンド解析するのを作る。