SciPy で Parks-McClellan 最適 FIR フィルタ

SciPy での Parks-McClellan 最適 FIR フィルタについてメモ。

remez では Parks-McClellan アルゴリズムによる FIR フィルタの設計が行なえます。
Parks-McClellan アルゴリズムは Remez 交換アルゴリズムと Chebyshev 近似理論により、希望の周波数応答と実際の周波数応答との最適近似をもつフィルタを設計します。
remez によるローパスフィルタの例を以下に示します。

# 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)

freq = [0, 2, 3, fn]
N = 200

taps = signal.remez(N, freq, [1, 0], Hz=2*fn)
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="remez")
plt.xlim(0, 4)
plt.legend(loc="upper right")
plt.xlabel("Time [s]")
plt.ylabel("Amplitude")
plt.show()

15072001.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