« LCD ZJM161A PICで表示 | メイン

2024年5月 6日 (月)

FIRデジタルフィルター係数 発生ソフト

dsPICを使い、FIRフィルターを自作しておりますが、長年使ってきた 石川高専の山田先生のホームページがedgeでは閲覧できなくなっており、新たにFIRフィルターを設計するのに困っていましたら、フランスのThomas Drugeon さんがオーディオ向けのフィルター係数を発生させるソフトを公開していました。 さっそくダウンロードしてテストしてみると、これはいとも簡単に係数を発生し、C言語で扱えるファイル状態で出力してくれます。 以下、その使い方を紹介します。 

rePhaseと呼ぶソフトを紹介しているページはこちらにあります。

このページから、Latest version   (v1.4.3, 2019-01-16, Windows 32/64 bit)というソフトをダウンロードし、ダウンロードされたzipファイルを解凍すると、rePhase.exeというファイルが現れますので、これをダブルクリックすると以下のようなダイアログがオープンします。

Repaseorijinal

このソフトは本来、オーディオのグラフィックイコライザーの特性をデジタルフィルターで構成する時のフィルター係数のジェネレーターですが、dsPICでSSBを発生させる為のFIRフィルターの係数を発生させることもできます。

上の画像の真ん中付近にある「Linear Phase Filter」というタグを開き、左下側にあるlinear-Phase Filterの部分に必要な記述を行います。

Rephase_linearphase_filter_2

使うのは上の2行だけです。 最初の行をhigh-passにして、2行目をLow-passに指定します。

次にshapeの列に2行とも「brikwall」を選びます。 freqの列の1行目に150Hz、2行目に2850Hzと記入します。

次に、右下のInpulse Settingの部分を記入します。

Rephase_impuls_setting_2

まず、タップ数を奇数で記入します。ここでは251としました。 次のFFT lengthはタップ数に応じて自動入力されますので、手を加えません。 conteringの部分はmiddleを選びましたが、実際に動くようになったら他の選択肢へ変更しても良いでしょう。 その下は、「use closest perfect inpulse」を選びます。 windowing(窓関数)はサイドローブが低い[blackman-harris」を選びましたが、好きな関数を選択できます。 optimizetionはデフォルトのままです。

rateはサンプリング周波数を記入します。 ここでは48KHzとしましたが、実際には、使用するdsPICのADコンバーターのサンプリング周波数を記入する事になります。 formatは発生したフィルター係数をC言語形式で出力されるようにします。 directoryはこのCファイルをどこに出力するかを指定します。

右枠の中は、デフォルトのままです。

これらを設定し終わった、目標特性グラフ付のダイアログ全体を下に示します。

Rephase_allwindow

目標のBPFの特性は上のグラフのように四角いフィルター特性ですが、タップの数を例え1001としても、このようなグラフになる事はなく、タップの数が多いほど、この理想曲線に近くなるという事だけです。 実際はハイパスフィルターのカットオフを50Hzくらいにして501タップくらいで、Hi-Fi SSB信号が出来ると言われています。

この設定で作られたFIR係数ファイルの例を以下よりダウンロードできます。 このファイルをBPFxxxx.hとリネームし、ヘッダーファイルとして読み込ませたら、dsPICのソフトが出来上がります。

BPF150-2850.cをダウンロード

実際にこのアプリを使い、dsPIC33FJ64GP802用のBPF係数を出力し、AM送信機のFIR BPFフィルターを作った例はこちらの最後の部分で紹介しています。

 

NDEXに戻る