センサ信号など暴れる信号を一定周期で読み取って何かする際, 信号の暴れを抑えるためにローパスフィルタ (LPF) 処理を行うことがあります. 大抵は以下の IIR フィルタと呼ばれる, 入力変数を in とすると in の代わりに
out = r * in + (1-r) * out |
ここで r は非常に小さい数の定数です. フィルタの特性を決める大事なパラメータですが, (割り算の代わりにシフトを使うなど, 状況によって若干の制約はありますが) 大体は in と out を見ながら適当に決めるもんです.
しかしごくたまに, 値の物理的意味を知らなくてはいかないことがあります. 昔習ったはずですが、全然使わないと忘れてしまい、必要な際毎回あわてます. 毎回調べるのも何なので, そろそろ Tips として記しておきたいと考えます. 結論を先に書くとカットオフ周波数 f は, サンプリング周期を T として, 以下の式で求められます.
さて、上述の式で本 Tips は終わってもいいのですが, 今後何か微小な変更時に応用が利くよう, 若干過程を記しておくことにしました. 少し教科書みたいになってしまうことはご容赦ください.
そもそも最初の式
上記系を式で表すと次のような形になります (面倒なので r のハットは取ってしまいました).
実はこういった系は世の中ごまんとあります. 例えば
一時遅れ系は u =一定 (ステップ応答) ならば, 微分方程式を解くことで挙動を知ることができます.
一方, 周波数応答を調べるためには, 入力 u に例えば AsinωT を入れ, 出力 y の形を Bsin(ωT+R) といった形にあてはめます. ω = 2 π f が大きくなれば大きくなるほど B は A に対して 小さくなっていきます. この B/A をゲインと呼びます. さらにこのゲインが 1/√2 になるときの f をカットオフ周波数と呼んでます.
計算方法ですが, ラプラス変換を使います. 最初の式
これが俗に言う伝達関数というもので, なぜか s に jωを代入し (j は虚数単位), 絶対値を取るとゲインになります.
これが 1/√2 になったときのωカットオフ周波数ですから
例えば RC パッシブフィルタの場合, 抵抗に流れる電流 I は両端電圧 (u-y) を抵抗値 R で割ったものですから I=(u-y)/R と表されます. またコンデンサに蓄えられる電荷を Q とすると I=dQ/dt とも表されます. コンデンサの容量を C とすると両端電圧は y なので Q=Cy ⇒ I=C dy/dt となり, 結果 dy/dt=(u-y)/RC という関係が得られます. r=1/RC ですからカットオフ周波数は 1/2πRC と計算されます.
一方デジタルの場合だと最初の式
整理して伝達関数の形にします.
ラプラス変換の時は s に jωを代入しましたが, Z 変換の場合はなぜか exp(jωT) を代入します. 理由は知りません ;-p