SciPy でカイザー窓 FIR フィルタ

SciPy での カイザー窓 FIR フィルタについてメモ。
窓関数法による FIR フィルタには、ダイナミックレンジを自由に変えられるカイザー窓がよく使用されます。

kaiserord 関数では、通過帯域から阻止帯域への遷移領域の長さと、許容するリップルを指定することで、カイザー窓の次数とパラメータ \(\beta\) を取得することができます。
ローパスフィルタの例を以下に示します。

# coding: utf-8
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt


# 時系列のサンプルデータ作成
n = 512                         # データ数
dt = 0.01                       # サンプリング間隔
f = 1                           # 周波数
fn = 1/(2*dt)                   # ナイキスト周波数
t = np.linspace(1, n, n)*dt-dt
y = np.sin(2*np.pi*f*t)+0.5*np.random.randn(t.size)

width = 2.0/fn                  # 遷移領域の長さ
ripple_db = 60.0                # 許容するリップル
fc = 2.2                        # カットオフ周波数

N, beta = signal.kaiserord(ripple_db, width)
taps = signal.firwin(N, fc/fn, window=("kaiser", beta))
filtered = signal.lfilter(taps, 1, y)
delay = (N-1)/2*dt

plt.figure(figsize=(12,9))
plt.plot(t, y)
plt.plot(t-delay, filtered, "r", linewidth=2, label="kaiser")
plt.xlim(0, 4)
plt.legend(loc="upper right")
plt.xlabel("Time [s]")
plt.ylabel("Amplitude")
plt.show()

15071901.png

コメント

Comments powered by Disqus
書籍更新情報
2016-10-21
Pythonによる科学技術計算 基礎編
PDF版の販売を開始しました。
販売ページはこちら

2016-09-09
Pythonによる科学技術計算 基礎編
1.2版への更新が可能になりました。
サポートページはこちら
電子書籍
Pythonによる科学技術計算 基礎編
Kindle ストア、Leanpubで販売中です
Pythonによる科学技術計算 基礎編
PDF版の販売はこちら
同人誌
技術書典(2016/6/25)
Emacs/org-modeのPDF作成術
電子版をBOOTHで販売中です
Emacs/org-modeのPDF作成術
Share