Wizard Notes

Pythonを使った音楽信号分析の技術録、作曲活動に関する雑記

双2次フィルタのPythonライブラリ"PyQuadFilter"を作ってみました

f:id:Kurene:20210104122525p:plain

K-weighting filter の実装の記事 を書いている時に、Python向けの双2次フィルタのライブラリがあったらいいなーと思ったので、年末年始の自由研究開発として作ってみました。

プロトタイプ版ですが、とりあえず公開します。

githubにあまり慣れていなかったり、もしかしたらデバッグ不足な部分もあると思いますが、よろしくお願いします。

github.com

フィルタ係数の算出方法は、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

参考:フィルタ応答一覧

www.wizard-notes.com

ライセンス

MIT

今後の開発予定

  • リアルタイム (フレーム単位での処理)に対応
  • サンプルスクリプトの追加