Scilabでオクターブ分析

y_takeuchi2009-04-19

オクターブ分析が完成。もっとも、for文を組んで遮断周波数をどんどん変えて行ってひたすらバンドパスフィルタをかけるだけだが。
Scilabのフィルタ係数からFFTを使用して畳み込みでFIRフィルタをかける手法は、C#で遅延回路を組んだ普通のFIRフィルタより数倍も速く、かつ処理速度がタップ数に関係無いのは便利なのだが、なぜかタップ数が低いと出力された波形の振幅が小さくなってしまう。処理速度が変わらないのだからタップ数を大きくしておけば問題は無いのだろうが、ちょっと不気味だ。そういうものらしい(グーグル先生で調べた情報によると)。
Scilabではバターワースによるフィルタも作ってある。バターワースでも4次位にすると十分にJISの規格を満足する。会社の人がLabviweで組んだプログラムも、周波数特性からみると4次バターワースだ。小野測器では1/1オクターブ分析の場合は12次のバターワースで、1/3オクターブ分析の場合は6次のバターワースで行っている。
4次のバターワースと999タップのFIR-FFTフィルタでは、バターワースの方が倍ぐらい速いので、12次のバターワースでも十分速いのだろうが、なんか遮断周波数によってはエラーが出る場合がある。もっともエラーが出る方が結果がはっきりしているから、タップ数で結果の振幅が変わってしまうFIR-FFTフィルタよりは良いだろう。