FIRデジタルフィルタの勉強し直し

また新たに参考書を購入した。購入したのは「はじめて学ぶディジタルフィルタと高速フーリエ変換」という本。

以前購入した参考書に載っていたVBAC#に書き換えて、同じ結果が得られたから完成したつもりに成っていたFIRデジタルフィルタだが、まだ駄目らしい。
ある計測波形に1Hzのハイパスを掛けたが、まだまだ直流成分が残ってしまっている。タップ数をとんでもなく増やすとかなり良くなるが、それでもまだ直流成分は残っているし、それでは時間がかかってしまう。
そこでFFTを応用してもっと高速に行える手法があるらしい。FFTした結果から必要な帯域だけを逆FFTするFFTフィルタにやり口は近そうだ
(1)元波形をFFTする
(2)フィルタ係数をFFTする
(3)両者を掛け合わせる(クロススペクトル)
(4)クロススペクトルを逆FFTする
個人的には、単に遅延回路を通すだけのFIRフィルタと違い、FFTとか使うと分解能の誤差とか色々ありそうな気がするんだけどどうなんだろう。

フィルタの減衰特性の確認は、今までホワイトノイズの平均やSIN波のstep入力で行っていたが、インパルスレスポンスのFFT結果でも出来ると言うことを知った。だが、なかなか理解するまでには至らなかった。FIRフィルタの場合、フィルタ係数とインパルスレスポンスは同じと言うことがなかなか理解できなかった。
例えば
(1)2048とか4096とか、FFTデータ長と同じポイント数でサンプルされた時系列データを作る。仮に10step目の値を1にして、その他を0のデータにする。これがインパルス入力となる。
(2)この波形をFFTすると、DCから高域まで平坦なスペクトルである。
(3)この波形をFIRフィルタに通す。得られた波形は10step辺りからタップ数分のstepまで、何か波形みたいなものになっている筈である。
(4)この何か波形みたいなものは、設定したフィルタの種類と遮断周波数と窓関数の産物のフィルタ係数と同じである。(振幅は比例関係)
(5)この何か波形みたいなものが存在するFIRフィルタを通された波形は、元のポイント数にタップ数分のデータが増えるが、それだとFFTが使えないので、タップ数分のデータは無視してFFTをかける。(どうせインパルス自体は前のほうだから影響は無い)
(5)そのFFTでフィルタの周波数特性や位相特性が判る。
(6)結局、こんな面倒な事はしなくても、フィルタ係数にFFTのデータ長に合うように0を足してFFTすれば、同じ結果が得られる。