高次のバターワースフィルタ(ハイパス)の不安定性について scipy.signal.butterworth
マルチバンド処理用のフィルタバンク実装でバターワースフィルタによるハイパスフィルタを使おうとすると,7次くらいから周波数応答が不安定になりました. ハイパスフィルタ 周波数応答をプロット してみると,scipy.signal.butterworthのハイパスフィルタは7次くらいから低域の位相が不安定になっています. おそらくフィルタ係数の量子化誤差などが関係していると考えられます。 カットオフ周波数を低くしても,それでも9次くらいから位相が歪んでいます. ローパスフィルタ 一方、ローパスフィルタのほうが比較的高次でも振幅・位相に歪みは目視では確認できません. 補完フィルタ(7次,8バンド) 高…
Pythonで数値計算や信号処理をしていると,NumPy配列かどうか判別したいことがあります. import numpy as np np_array = np.array([0, 1, 2]) type(np_array) #=> <class 'numpy.ndarray'> type(python_list) #=> <class 'list'> 以上の例から NumPy配列とPythonのリストオブジェクトは異なるため,if type(np_array) is listでは判別できません. NumPy配列の判別の方法としては、例えば以下の3つの方法が使えます. type(np_arra…
Python:マルチバンド処理用フィルタバンクのクラス設計・実装・動作検証
以前の記事では,木構造のような信号処理フローのマルチバンド処理を紹介しました. この記事では、実装・利用しやすさに着目して信号処理フローを再設計・実装します。 設計 以前の記事では木構造の処理フローでしたが,今回は低域のカットオフ周波数から徐々に算出するような構造とします。 オールパスフィルタの伝達関数をまとめると以下のようになり,各帯域の信号はそれぞれの最後のオールパスフィルタで位相が同期されることで、回路全体が元信号の振幅成分を変化させないオールパスフィルタ回路となります。 なお、各オールパスフィルタのフィルタ係数はこちらの記事にあるようにローパス・ハイパスフィルタのフィルタ係数から簡単に…
オーディオクロスオーバー向け補完フィルタ(バターワース)でのオールパスフィルタのフィルタ係数算出と検証
以前の記事で,低域・高域を別々に処理するようなマルチバンド処理(オーディオクロスオーバー)の実装方法を紹介しました. www.wizard-notes.com www.wizard-notes.com 上記の記事では,補完フィルタのローパス・ハイパスフィルタの並列接続したことで生成できるオールパスフィルタの伝達関数の振幅特性がフラットになることを確認しました。 実用では,フィルタリングの際にこのオールパスフィルタのフィルタ係数を求める必要があります. 2つのIIRフィルタの伝達関数の積を取るのは手間ですが,補完フィルタの場合は多少計算が楽になることが検証できたため,メモとして残します バターワ…
「ブログリーダー」を活用して、Kureneさんをフォローしませんか?