FIRデジタルフィルター係数 発生ソフト
dsPICを使い、FIRフィルターを自作しておりますが、長年使ってきた 石川高専の山田先生のホームページがedgeでは閲覧できなくなっており、新たにFIRフィルターを設計するのに困っていましたら、フランスのThomas Drugeon さんがオーディオ向けのフィルター係数を発生させるソフトを公開していました。 さっそくダウンロードしてテストしてみると、これはいとも簡単に係数を発生し、C言語で扱えるファイル状態で出力してくれます。 以下、その使い方を紹介します。
rePhaseと呼ぶソフトを紹介しているページはこちらにあります。
このページから、Latest version (v1.4.3, 2019-01-16, Windows 32/64 bit)というソフトをダウンロードし、ダウンロードされたzipファイルを解凍すると、rePhase.exeというファイルが現れますので、これをダブルクリックすると以下のようなダイアログがオープンします。
このソフトは本来、オーディオのグラフィックイコライザーの特性をデジタルフィルターで構成する時のフィルター係数のジェネレーターですが、dsPICでSSBを発生させる為のFIRフィルターの係数を発生させることもできます。
上の画像の真ん中付近にある「Linear Phase Filter」というタグを開き、左下側にあるlinear-Phase Filterの部分に必要な記述を行います。
使うのは上の2行だけです。 最初の行をhigh-passにして、2行目をLow-passに指定します。
次にshapeの列に2行とも「brikwall」を選びます。 freqの列の1行目に150Hz、2行目に2850Hzと記入します。
次に、右下のInpulse Settingの部分を記入します。
まず、タップ数を奇数で記入します。ここでは251としました。 次のFFT lengthはタップ数に応じて自動入力されますので、手を加えません。 conteringの部分はmiddleを選びましたが、実際に動くようになったら他の選択肢へ変更しても良いでしょう。 その下は、「use closest perfect inpulse」を選びます。 windowing(窓関数)はサイドローブが低い[blackman-harris」を選びましたが、好きな関数を選択できます。 optimizetionはデフォルトのままです。
rateはサンプリング周波数を記入します。 ここでは48KHzとしましたが、実際には、使用するdsPICのADコンバーターのサンプリング周波数を記入する事になります。 formatは発生したフィルター係数をC言語形式で出力されるようにします。 directoryはこのCファイルをどこに出力するかを指定します。
右枠の中は、デフォルトのままです。
これらを設定し終わった、目標特性グラフ付のダイアログ全体を下に示します。
目標のBPFの特性は上のグラフのように四角いフィルター特性ですが、タップの数を例え1001としても、このようなグラフになる事はなく、タップの数が多いほど、この理想曲線に近くなるという事だけです。 実際はハイパスフィルターのカットオフを50Hzくらいにして501タップくらいで、Hi-Fi SSB信号が出来ると言われています。
この設定で作られたFIR係数ファイルの例を以下よりダウンロードできます。 このファイルをBPFxxxx.hとリネームし、ヘッダーファイルとして読み込ませたら、dsPICのソフトが出来上がります。
実際にこのアプリを使い、dsPIC33FJ64GP802用のBPF係数を出力し、AM送信機のFIR BPFフィルターを作った例はこちらの最後の部分で紹介しています。
2024年5月末
石川高専の山田先生のページはWIndows7 Chromeの組み合わせなら、問題無く表示出来るようです。
その後、FIRフイルター係数の計算を英語で検索すると、特性がrePhaseよりよさそうな係数を発生出来るページが見つかりました。 現在、次の自作モデル用として、dsPICによるSSBジェネレーターを試作中ですが、この係数に使って実力を確かめ中です。
新しい、FIR係数発生ページ Digital Filter Design (arc.id.au)
このページで生成されているKaiser-Bessel窓による係数は石川高専のページでも発生させる事ができます。ただし、フィルター外のATT量がデフォルト20dBとなっていますので、60dBに変更してやると、同等のデータがえられます。