裏目小僧の部屋

JavaScriptでラプラス変換の伝達関数を求める

この内容は
z変換とラプラス変換で周波数特性を得るjavascriptに統一されました:

処理したい式

f0.Qを設定値として 演算子s の以下の式から周波数fへの応答POW/RADを得る

s2はs^2の意味
HPF1 w0=2PI*f0;s/(s+w0)
LPF1 w0=2PI*f0;w0/(s+w0)
APF1 w0=2PI*f0;(s-w0)/(s+w0)
HPF2 w0=2PI*f0;w2=w0*w0;s2/((w2+w0/Q*s+s2)
LPF2 w0=2PI*f0;w2=w0*w0;w2/(w2+w0/Q*s+s2)
BPF2 w0=2PI*f0;w2=w0*w0;w0/Q*s/(w2+w0/Q*s+s2)
BEF2 w0=2PI*f0;w2=w0*w0;(s2+w2)/(w2+w0/Q*s+s2)
APF2 w0=2PI*f0;w2=w0*w0;(w2-w0/Q*s+s2)/(w2+w0/Q*s+s2)
以上の表示が出来れば十分

方針

  • Zは複素数だが sは虚数なので数式を手作業で変換するのは難しくはないが、せっかくだから数式を伝達関数の数式に変換するツールを作ってみる。
  • z変換で周波数特性を得るjavascript作成奮戦記のようにPascalで作らず その作成関数を変更する事でjavaScriptで作ってみる
  • 前回は数式から定数を全部数値にしその計算も内部でしていた。変数は変数のまま数式に置換してゆく。
  • 前回はZのべき乗を配列にしていたが今回はsをjw s2を-w*wと置換してゆく

機能

  • 入力数式:
   s1 s2 s3 s4 はs s^2 s^3 s^4と解釈され s5はs*5になるかな、まあ使わないだろうから
   PIと2PIは定数に置換する
   変数名は英字1文字+数字 (snとcnとfは使えないけど)
   未定義の変数名を使った場合は引数として変数名を渡す方針
    *は省略可能な場合がある
  • 使い方
 var sfunc={f0:500,Q:0.7,
  pg:Function("fi","f0","Q",sfResponseMk("w0=2PI*f0;w2=w0*w0;s2/((w2+w0/Q*s+s2)")),
  frqResponse:function(f){this.pg(f , this.f0 , this.Q); }  
 };
 のように呼びだすと sfuncをPaintLogLevのgetpow配列の要素として渡せる

プライバシーポリシー本文は日本語以外に翻訳禁止