TwitterのTLに「FIRフィルタの係数を求める数学的な背景を知りたい」という話があったので、メモ的なことを書いておきます。教科書を読むうえで参考になるでしょう。
FIRフィルタの伝達関数を求める方法はいくつかありますが、単純なLPFであれば窓関数法が分かりやすいです。これは「矩形スペクトルの伝達関数はsinc()関数になる」という性質を利用したものです。
ちょっと端折りすぎているのでもう少し詳しく書きましょう。理想的なLPFの特性はブロック特性になります。つまり、0Hzからカットオフ周波数までの増幅率が1、カットオフ周波数から∞までの増幅率が0です。ディジタル信号ではカットオフ周波数からナイキスト周波数までの増幅率が0ですね。また、負の周波数域については正の周波数域と0を挟んで線対称になります。
このとき、カットオフ周波数の位置をパラメータとしてこのような特性を持つフィルタの伝達関数を求めることができ、それはsinc()関数になります。この点についてさらに知りたければフーリエ変換の教科書をあたってみてください(個人的にはステップ応答のラプラス変換から求めるのがイメージしやすいが、邪道と怒られる)。
ところで、sinc()関数の応答はtが∞まで続くのでFIRフィルタに実装できません。FIRフィルタに乗るようにsinc()関数に適当な窓関数をかけてインパルス応答とするのが窓関数法による係数の求め方です。
窓関数によってインパルス応答を変形させるため、この方法で作ったフィルタは理想特性からずれます。具体的なずれ方は窓関数によります。代表的な窓関数をフーリエ変換すると、sinc()関数の従妹っぽいウェーブ・パケットになります。時間領域での要素ごとの積は周波数領域での畳込になりますので、結局矩形特性をウェーブパケットと畳み込むことになり、カットオフ前後にリップルが出ることになります。
この辺の話を掘り下げるなら、やはりよい本をあたることをお勧めします。
三上先生の「はじめて学ぶ ディジタル・フィルタと高速フーリエ変換」は入門者用にイメージしやすい解説ながら広い範囲を抑えており、お勧めできます。
ところで、小型の信号処理エンジンですが、LPC4330のような低速信号処理に使えるマイコンのほか、DSPも入手が容易になっています。当ブログで紹介しているACB-BF592など、ブレッドボードで実験できるものもあります。