· 

Pythonでフィルタ(4)

フィルタの構成方法と適用方法について記録を残す。理論はさておき実際にフィルタを適用した波形を見ることを目的とする。Pythonでフィルタ(2)のコードではフィルタ適用にifilterを使っていたので、この部分を自力で実装します。とはいえ大したことない。いや、大したことなさ過ぎてweb上に記事がないので、掲載することにした。

1次のIIRフィルタなので、ブロック線図で書くとこうなる。青い字はこの後掲載しているコード中の変数名。ちなみにフィルタ係数b,aは関数butterから得たものをそのまま使う。b,aの算出方法も後で考えるかもしれない。

#フィルタ適用
#baseband_filtered_t=signal.lfilter(b,a,baseband_t)
#np.savez('o_t_baseband_filtered_t',t,baseband_filtered_t)

#フィルタ適用(自力)
p_nm1=0
baseband_filtered_t=np.zeros_like(baseband_t)
for i in range(t.size):
    x_n=baseband_t[i]
    p_n=x_n-a[1]*p_nm1
    y_n=b[0]*p_n+b[1]*p_nm1
    baseband_filtered_t[i]=y_n
    p_nm1=p_n

lfilter適用部分をコメントアウトして、自力での処理をねじ込む。ちなみに、pythonなのでfor文を使うのは抵抗がありますが、最終的にリアルタイムで逐次処理することを見据えて、あえてfor文にしています(手を抜いたとかではない)。

結果は同じになるので、掲載しません(これは手抜き)。

 

ああーあれもこれもせんといかんー。こんなことやっている場合じゃないー。゚(゚´Д`゚)゚。