「お気に入りのSDR製作 デジタルフィルターを設計してみる。」

 


 SDRハード部検討用として、以前CQ誌の付録に付いてきた基板に、部品を実装してみました。最も基本的な回路構成なので、部品定数や使用OPアンプ特性など が受信特性にどのように影響するのか調べていく予定です。


2019.3.28

はじめに
 SDRStudy(RFW#22に紹介)をペースにした「お気に入りのSDR製作」、今回はSDRに欠かせないデジタルフィルターの設計法についてまとめてみます。
 デジタルフィルターについては参考書やWeb上にも数多く紹介されていますが、その多くは比較的簡単なフィルター例であり、実際にSDRに組み込んで特性を 変えようとしても、応用ができず結局設計手法を理解しないと先に進めません。

デジタルフィルター設計手順
 デジタルフィルターには、FIRフィルターやIIRフィルター、タップ数など、今までなじみの無い用語が多く出てきたり、フーリエ変換や複素数等すっかり忘れてしまった数学など、 それらについては参考書やWebを見ていただくとして、ここでは実際にSDRに組み込んで使用するFIR BPFとNotchフィルターについて紹介します。
 尚左右非対称のフィルター設計については、教科書などに掲載されておらず、自分なりの理解で作成したものでおかしな点もあるかもしれません。

 1.自分なりの理解として、FIRフィルターは、移動平均処理に類似しており、いくつのデーター(タップ数)にそれぞれ重みづけ(フィルター係数)して平均化してフィルター特性を得る。
 2.フィルター係数に窓関数をかけて補正したものが最終的なフィルター係数となる。
 3.信号をフィルターに通すには、信号の虚数部と実部にフィルター係数を積算する。
したがってフィルターを設計するということは、1項の係数を求めることであり、その手順として
 4.希望するフィルター特性を図に書いてみる。
 5.図の特性を逆フーリエ変換する。
 6.タップ毎に窓関数をかける
 オリジナルのSDRStudyに組み込まれているフィルターは、ソースコードのFilter classに記述されており、コメントも付いているので判り易くなっています。
   

具体的な設計例

   SDRStudyのBPFフィルター設計例を左図に示します。
 1.左の例ではωL〜ωHまでのバンドパス特性を示していますが、左側にもフィルター特性が出るので、周波数"0"を中心に左右対称な理想フィルターの特性図を-π〜+πまでの一周期分書いてみる。
 2.1の特性図を逆フーリエ変換で表現すると式1のようになります。パス領域は1とする。
 3.2を計算していくとオリジナルの係数を求める式4になります。
 ここでLowCutを0にするとLPF特性になり、左右対称の形になるので見かけはBPFと等価になります。
   

 

実際の特性、SDRStydyオリジナル

 左はLowCutを0に、HighCutを1500Hzとし、BFOで-1500Hzシフトしているので-3000〜0HzのBPF特性と等価な特性が得られています。
 右特性はLowCutを200Hzに設定した場合で、希望特性は-200Hz〜-3000Hzにしたいのですが、実際には-1500Hz+/-200Hzが阻止されたBEF特性になってしまいます。
 叉、HighCutの1500Hzを1400Hzにすると、実際の特性は-100Hz〜-2900Hzとなり、左右対称に変化してしまうので、ちょっと使いづらいフィルター特性です。
より実践的なフィルターとするには、LowCutとHighCutが独立して可変したいので、フィルター係数を見直す必要がありそうです。

 

左右非対称なフィルター設計例

 0Hzをセンターとして左右非対称のフィルター設計をLSBモードフィルター例で左図に示します。
 1.周波数"0"を中心に左右非対称な理想フィルターの特性図を-π〜+πまでの一周期分書いてみる。バンド幅-2800Hz〜-100Hzの場合、BFOで-1500Hzシフトするのでフィルター特性 は、シフト分を考慮して-1300Hz〜+1400Hzとします。
 2.1の特性図を逆フーリエ変換で表現すると式1のようになります。
 3.2を計算していくと左右対称フィルターと異なり、虚数部が残るので、虚数部と実数部にわけてそれぞれに窓関数、周波数シフトをかけます。
 叉、USB/LSBでLowcut/Highcutが反転するので各モード毎に係数を求める式を作りました。
   

 

特性確認

 左はLowCutを-100Hzに、HighCutを-2800HzにしたLSBフィルター特性、右はUSBフィルターでいずれもTAP数は255に固定ですが十分な特性が得られます。
 叉、Lowcut、Highcutを変えることでそれぞれLow側、High側が独立して可変することができます。

 

   ノッチフィルターの組み込み
 非対称のフィルター特性の設計手順がわかったので、次にBPFとノッチフィルターの組み合わせについても設計してみました。
 PoweSDRなどにはAutoNotchReduction(ANR)機能がありますが、そのアルゴリズムは不明なので単純なノッチフィルターとしました。ノッチ周波数が 可変出来るので、ピートの箇所にノッチをあわせるとほぼ完全にリジェクトでき、従来のアナログフィルターでは実現出来なかった特性が得られます。  係数を求める式を以下に示します。

      BPF+BEFの係数(虚数部) = (1/(2PI* x))* (Math.Cos(2 * PI * highcut * x) +Math.Cos(2 * PI * notchhigh * x)
- Math.Cos(2 * PI * notchlow * x) - Math.Cos(2 * PI * lowcut * x));

BPF+BEFの係数(実部) =-1 * notchlow * Sinc(2 * notchlow * x) - lowcut * Sinc(2 * lowcut * x)
+ notchhigh * Sinc(2 * notchhigh * x) + highcut * Sinc(2 * highcut * x);
 左の波形は、ビートを想定してLSBモードのフィルターを通った波形、右はノッチをONとした波形でビート分は完全に聴こえなくなります。
 ノッチの幅を変えることでノッチの深さがかわります。今回ノッチの幅は500Hzとしました、タップ255の場合、ビート削除には十分な特性が得られますが、必要な信号成分も無くなります。  もう少し幅を狭くすると信号への影響は少なくなりますが、ノッチのチューニングが取りず楽なってきます。

 

   今後の予定
 この後ノイズブランカやノイズリダクションも盛り込みたいのですが、残念ながらアルゴリズムは勉強不足です。次は送信機能の盛り込み検討を進めていきます。

送信機能盛り込みへ
Top Menu