ガレスタさんのDIY日記

電子回路、Web、組み込み、自作エフェクターを語るblog

biquadBPFの処理負荷が高い・・・・・・

どうもがれすたさんです。

通常のLPFとHPFができてからいろいろ遊んでいたのですがBPFを作って計測してみると唖然・・・・・
f:id:gsmcustomeffects:20171007044533p:plain

22%も持ってくのお前・・・・・・

まあ理由もある程度分かってます。

alpha = sin(w0)*sinh( ln(2)/2 * BW * w0/sin(w0) ) (case: BW)

バンド幅を利用してalphaを算出するとlogとsinhがでてくる。
というかこの辺の関数がCMSIS DSPにないのでそこでだいぶ食ってる。

普通のsin,cosはこういうふうにDSP_APIに置き換えてるので問題ないしLPFのようにsin,cos多用するのはものすごい早い
f:id:gsmcustomeffects:20171007045518p:plain

負荷は数%だった。

対策法としては

  • そこの部分をQを使った演算に直すか
  • あらかじめ計算した値を持っておいて配列で呼んでくるかどっちか。

こんな感じよね。

実際ARMのBiquadサンプルではピーキング系のフィルタで各dBを表引きして5バンドEQを達成している。
f:id:gsmcustomeffects:20171007045711p:plain
今後こういうEQブロックを書くエフェクトに差し込むことになるのでやって行くか

つか極論差分方程式を自分で書かないでCMSISDSPを使えって話ですよねw
f:id:gsmcustomeffects:20171007050014p:plain

こっちのほうが直接型Ⅱ転置構成なので遅延器を減らせるしバイクアッド関数は共通で係数計算ルーチンだけ別で用意すればいい。
まあいろいろやってみますわ。

余談

最近このソフトを気に入ってつかっている。

f:id:gsmcustomeffects:20171007045233p:plain

Eliさん作成のソフトだ。
Oxyplotで応答描画してくれるかなりわかりやすいソフトだ。

数式はMusicDSPの参考にしているらしい

ちなみにこの方を知ったのはこのソフトじゃないんですよね。
CircuitMakerというCADを使っていた時この方がKinetisマイコンでデジタルエフェクタを作っていたのでそのプロジェクトでだいぶ勉強させていただきました。

freescaleフォーラムで結構有名な方みたいですね。