Pythonスクリプトによる FIRフィルタ係数の生成

第2部
第
9章
信号処理関数充実! カチャカチャサッ!
Python スクリプトによる
FIR フィルタ係数の生成
高橋 知宏
0
0
n
n
n
n
1
1
−1
遅延が有限
なので応答
はその範囲
に収まる
1
−1
−1
⋮
⋮
−1
⋮
⋮
−1
N
(a)FIR フィルタ
⋮
⋮
⋮
N
⋮
N
⋮
−1
フィードバック・
ループがあるので
無限に応答が続く
(b)IIR フィルタ
図 1 おさらい…代表的なディジタル・フィルタ
無線信号処理でFIRフィルタを使う理由
ディジタル・フィルタにはいくつかの方式がありま
す.代表的なものが FIR フィルタと IIR フィルタです.
図 1 に構成を示します.
FIR(Finite Impulse Response)はその名前の通り
サンプル値
タップ係数
0
1
2
3
×
×
×
×
0
1
2
3
…
N
×
…
N
フィルタ結果の y =a x +a x +a x +……a x
0
0 0
1 1
2 2
N N
サンプル値
0
一つずらす
1
2
3
0
1
2
…
N
…
N+1
N
…
フィルタ結果の y =a x +a x +a x +……a x
0 1
1 2
2 3
N N+1
次のサンプル値 1
ずらす量を変えると間引き
(デシメーション)が行える
以上をすべてのサンプル値について繰り返す
図 2 参考…FIR フィルタの計算方式
86
入力に対して有限時間遅延の範囲で応答が得られま
す. 一 方 IIR(Infinite Impulse Response)は, な ぜ
Infinite= 無限かというと,内部に出力から入力に戻
すフィードバックの経路があるために,一度応答が生
じるといつまでもゼロになることがないからです.
今回のシステムのように,フィルタは,不要信号の
減衰だけではなく,サンプリング・レート変換が重要
な役割になります.この場合,FIR フィルタを選択す
るのが合理的です.
▶理由:間引きが楽にできる
レート変換の際に間引き(デシメーション)を行い
ますが,FIR であれば計算量が減らせます.
FIR では入力に対する出力への因果が,入力のサン
プル値に係数を掛けた和です.間引きでサンプル値が
不要になるなら,そのサンプル値そのものを計算する
必要がなくなります.参考に図 2 に FIR の計算方法を
示します.
IIR の場合にはフィードバックがあるため,そのよ
うなメリットが得られません.
スクリプト言語 Python で
可能なフィルタ信号処理
● 信号処理関数 scipy.signal
FIR フィルタの設計には,いろいろな設計ツールが
提供されています.今回は scipy という Python によ
2015 年 7 月号