K-weighting filter の実装の記事 を書いている時に、Python向けの双2次フィルタのライブラリがあったらいいなーと思ったので、年末年始の自由研究開発として作ってみました。
プロトタイプ版ですが、とりあえず公開します。
githubにあまり慣れていなかったり、もしかしたらデバッグ不足な部分もあると思いますが、よろしくお願いします。
フィルタ係数の算出方法は、RBJ cookbook に基づいています。
Cookbook formulae for audio EQ biquad filter coefficients
インストール方法
f文字列を利用しているため、Pythonのver.3.5以上を対象としています。
外部ライブラリは, numpy, scipy, matplotlib, numba が必要です。
pip install git+https://github.com/kurene/pyquadfilter
アンインストール方法
pip uninstall pyquadfilter
使い方
フィルタ係数算出
from pyquadfilter import PyQuadFilter pyquad = PyQuadFilter(sr) pyquad.set_params(filter_type, fc, q, gain_db) print(pyquad.b) print(pyquad.a)
or
from pyquadfilter import PyQuadFilter pyquad = PyQuadFilter(sr, filter_type=filter_type, fc=fc, q=q, gain_db=gain_db)
filter_typeは以下の8つが選べます。
- "lowpass"
- "highpass"
- "bandpass"
- "allpass"
- "notch"
- "peaking"
- "lowshelf"
- "highshelf"
信号に対するフィルタリング
オフライン用
pyquad = PyQuadFilter(sr)
pyquad.set_params(filter_type, fc, q, gain_db)
# x.shape is (n_channels, n_samples) or (n_samples, )
y = pyquad.filter(x)
オンライン(フレーム単位での処理)
双2次フィルタの自作Pythonライブラリ PyQuadFilter 更新 - フレームベース処理対応 - Wizard Notes
参考:フィルタ応答一覧
ライセンス
MIT
今後の開発予定
- リアルタイム (フレーム単位での処理)に対応
- サンプルスクリプトの追加