digitalfilter

ディジタルフィルタ

LPFとかを計算処理によって組みたい時に使う,マイコンのソフトウェアで実装するときもこのディジタルフィルタを使う.
関連ワード

  • FFT
  • DFT

伝達関数の知識とかフーリエ級数の知識とかめっちゃ必要.
サンプリング定理 取得した信号の半分以下の周波数成分までの信号しか再現することはできない.

遅延ブロックの数-1がタップ数ということらしい.
$n$サンプル目の入力$x[n]$に対してタップ数$m$のFIRフィルタを通過した出力$y[n]$は $$ y[n] = \sum_{i=0}^{i=m} a_{i}x[n-i] $$ 遅延時間はタップ数/2×1サンプル時間

$n$サンプル目の入力,出力をそれぞれ$x[n],y[n]$,重み係数$a$として $$ y[n] = ay[n-1] + (1-a)x[n] $$ アナログ回路のRCフィルタのような一次遅れの減衰特性を有する。
マイコンの中でよく実装されている。
今回の入力値と全体の出力値に重みをつけて足し合わせるというもの。
$a[n]$実装は比率を0~1とするパラメータであるが、このパラメータはこの信号のサンプリング周波数と減数のカットオフ周波数によって決まる。
0 : フィルタかからずそのまま通過
1 : すべて遮断,前回の計測値のまま
フィルタの時定数を$\tau$,サンプリング周期$T$として, $$ a = \frac{\tau}{\tau + T} $$ なのでこのフィルタを使うときはパラメータの横にサンプリング周波数とカットオフ周波数をコメントして置かないと後々わからなくなる。
これは指数平滑の処理とも言える。RCフィルタ(指数平滑フィルタ)

導出

連続時間の伝達関数における$s$は後退差分による離散化をすると $$ s = \frac{1-z^{-1}}{T} $$

ここで、$T$はサンプリング周期
$$ Y(s)=G(s)X(s) = \frac{1}{1+{\tau}s}X(s) $$ これを離散化する。
$$ (T+{\tau}(1-z^{-1}))y[n] = Tx[n] $$ $$ y[n] = \frac{{\tau}}{T+{\tau}}y[n-1] + \frac{T}{T+{\tau}}x[n] = ay[n-1] + (1-a)x[n] $$

最も簡単な「一次のローパスフィルタ」を作る方法

Think DSP: Digital Signal Processing in Python http://greenteapress.com/wp/think-dsp/
著者Allen B. Downey氏の好意により、(CC BY-NC 3.0)ライセンスによってPDFが無料公開されている。
GitHubリポジトリにサンプルコードが配布されている。

参考文献

  • digitalfilter.txt
  • 最終更新: 2023/04/27
  • by yuqlid