新規記事投稿 フォロー記事投稿 記事のキャンセル
From: Akitaka HOSOMI <hosomi@ga2.so-net.ne.jp>
Subject: Re: デジタルフィルタ( IIR 篇 .... パフォーマンス )
Date: 1998/10/03 02:27:38
Reference: junge/00169

本日、現行のバージョンで行ったフィルタのパフォーマンス試験の結果だ。


 FIR フィルタと IIR フィルタで比較してあり、ともに、1 サンプリングデータ
あたりの処理時間を計算で求めている。


フィルタの特性は、どちらも、ほぼ同じ仕様で設定してあるので、処理時間につ
いてのおおよその比較が可能だと判断している。

# FIR フィルタの方は、以前の版から、結構、変更を加えてあるので、その時点
# のパフォーマンス測定結果とは、少し異なっているかも知れない。

 CPU は、手持ちの関係で MMX Pentium 200 MHz と Pentium2 333 MHz を使った。





 1. MMX Pentium 200 MHz( L2 Cache 512 KB ) の場合



   ※ FIR フィルタ     LPF ( 63 次 )  3.3 マイクロ秒

   ※ IIR フィルタ

      バターワース型   LPF (  9 次 )  1.6 マイクロ秒
      チェビシェフ型   LPF (  5 次 )  1.0 マイクロ秒
      逆チェビシェフ型 LPF (  5 次 )  1.0 マイクロ秒



   ※ FIR フィルタ     HPF ( 63 次 )  3.3 マイクロ秒

   ※ IIR フィルタ

      バターワース型   HPF (  6 次 )  1.1 マイクロ秒
      チェビシェフ型   HPF (  4 次 )  0.9 マイクロ秒
      逆チェビシェフ型 HPF (  4 次 )  0.9 マイクロ秒



   ※ FIR フィルタ     BPF ( 71 次 )  3.7 マイクロ秒

   ※ IIR フィルタ

      バターワース型   BPF ( 14 次 )  2.3 マイクロ秒
      チェビシェフ型   BPF (  8 次 )  1.4 マイクロ秒
      逆チェビシェフ型 BPF (  8 次 )  1.4 マイクロ秒



   ※ FIR フィルタ     BRF ( 71 次 )  3.7 マイクロ秒

   ※ IIR フィルタ

      バターワース型   BRF ( 18 次 )  2.8 マイクロ秒
      チェビシェフ型   BRF ( 10 次 )  1.6 マイクロ秒
      逆チェビシェフ型 BRF ( 10 次 )  1.6 マイクロ秒



期待した通り、IIR フィルタは、FIR フィルタに比べて、最高で 3 倍強、高速に
動作している。


 IIR フィルタは、帰還させて計算させる分、1 次数あたりの計算量は多いのだが、
 FIR フィルタと比べると、相対的に次数を低くできるので、結果として処理時間
は短くなる。





 2. Pentium2 333 MHz( L2 Cache 512 KB ) の場合



   ※ FIR フィルタ     LPF ( 63 次 )  1.6 マイクロ秒

   ※ IIR フィルタ

      バターワース型   LPF (  9 次 )  1.3 マイクロ秒
      チェビシェフ型   LPF (  5 次 )  0.6 マイクロ秒
      逆チェビシェフ型 LPF (  5 次 )  0.6 マイクロ秒



   ※ FIR フィルタ     HPF ( 63 次 )  1.6 マイクロ秒

   ※ IIR フィルタ

      バターワース型   HPF (  6 次 )  0.7 マイクロ秒
      チェビシェフ型   HPF (  4 次 )  0.5 マイクロ秒
      逆チェビシェフ型 HPF (  4 次 )  0.5 マイクロ秒



   ※ FIR フィルタ     BPF ( 71 次 )  1.8 マイクロ秒

   ※ IIR フィルタ

      バターワース型   BPF ( 14 次 )  1.8 マイクロ秒
      チェビシェフ型   BPF (  8 次 )  1.1 マイクロ秒
      逆チェビシェフ型 BPF (  8 次 )  1.1 マイクロ秒



   ※ FIR フィルタ     BRF ( 71 次 )  1.8 マイクロ秒

   ※ IIR フィルタ

      バターワース型   BRF ( 18 次 )  2.2 マイクロ秒
      チェビシェフ型   BRF ( 10 次 )  1.3 マイクロ秒
      逆チェビシェフ型 BRF ( 10 次 )  1.3 マイクロ秒



 Pentium2 も、MMX Pentium と、ほぼ同じ傾向だね。




これぐらいのパフォーマンスが出せると、CD 並みの音質と言われる 44.1 KHz の
サンプリング周波数( 約 20 マイクロ秒に 1 回のサンプリング )にも、実時間で
対応するフィルタが書けそうだね。


実は、現行の版は、Delphi 3.1J で書いたプログラムで、MMX 命令は使っていない。
( つまり、安直に CPU の浮動小数演算のみで計算させてるのさ )

 DSP( Digital Signal Processor ) などでは、16 ビット程度の語長で計算させて
いるものも見かけるので、MMX レジスタを使って並列計算を行わせれば、さらに、
 2 〜 3 倍パフォーマンスを上げられる余地を残している。

まだまだ、今のマシンが持ってる本来の能力を使い切っていない、ってことだね。



# まぁ、気が向いたら、MMX 用に組みなおすさ。面白い道具になりそうだし。