有限インパルス応答(FIR)フィルタの場合、バンドパスフィルタは、周波数と共鳴幅を決めるとほぼ決ります。伝達函数は以下のような感じです。
特定の周波数に関して、この伝達函数での周波数応答をプロットしてみましょう。
/* 8.3.13m */ sinc(x) := ( local(prim), prim(y) := sin(y)/y, if float(x) = 0.0 then limit(prim(y), y, x) else prim(x))$ b : makelist(cos(m*%pi/6.0)*sinc(0.1*m), m, -40, 40)$ q : length(b)$ b0 : 0$ A(w) := b0 + sum(b[k]*%e^(-%i*w*k), k, 1, q)$ plot2d(cabs(A(w)), [w, 0, %pi], [y, 0, 20])$
このバンドパスフィルタの周波数の信号にノイズが乗った場合に、フィルタの効果を確かめましょう。
/* 8.3.15m */ b : makelist(cos(m*%pi/6.0)*sinc(0.1*m), m, -40, 40)$ q : length(b)$ x : makelist(sin(2*%pi*j/12.0) + random(5.0), j, 1, 256)$ n : length(x)$ y : makelist(0.0, j, 1, n)$ for j : q + 1 thru n do for k : 1 thru q do y[j] : y[j] + b[k]*x[j-k]$ plot2d([discrete, makelist(i, i, 1, n), x])$ plot2d([discrete, makelist(i, i, 1, n), y])$
参考文献
- Crandall, Mathematica―理工系ツールとしての (アジソン ウェスレイ・トッパン情報科学シリーズ) p.255-p.261