デジタルフィルター設計手順
デジタルフィルターには、FIRフィルターやIIRフィルター、タップ数など、今までなじみの無い用語が多く出てきたり、フーリエ変換や複素数等すっかり忘れてしまった数学など、
それらについては参考書やWebを見ていただくとして、ここでは実際にSDRに組み込んで使用するFIR BPFとNotchフィルターについて紹介します。
尚左右非対称のフィルター設計については、教科書などに掲載されておらず、自分なりの理解で作成したものでおかしな点もあるかもしれません。
1.自分なりの理解として、FIRフィルターは、移動平均処理に類似しており、いくつのデーター(タップ数)にそれぞれ重みづけ(フィルター係数)して平均化してフィルター特性を得る。
2.フィルター係数に窓関数をかけて補正したものが最終的なフィルター係数となる。
3.信号をフィルターに通すには、信号の虚数部と実部にフィルター係数を積算する。
したがってフィルターを設計するということは、1項の係数を求めることであり、その手順として
4.希望するフィルター特性を図に書いてみる。
5.図の特性を逆フーリエ変換する。
6.タップ毎に窓関数をかける
オリジナルのSDRStudyに組み込まれているフィルターは、ソースコードのFilter classに記述されており、コメントも付いているので判り易くなっています。
具体的な設計例
SDRStudyのBPFフィルター設計例を左図に示します。 |
実際の特性、SDRStydyオリジナル
左はLowCutを0に、HighCutを1500Hzとし、BFOで-1500Hzシフトしているので-3000〜0HzのBPF特性と等価な特性が得られています。
|
左右非対称なフィルター設計例
0Hzをセンターとして左右非対称のフィルター設計をLSBモードフィルター例で左図に示します。 |
特性確認
左はLowCutを-100Hzに、HighCutを-2800HzにしたLSBフィルター特性、右はUSBフィルターでいずれもTAP数は255に固定ですが十分な特性が得られます。
|
ノッチフィルターの組み込み
非対称のフィルター特性の設計手順がわかったので、次にBPFとノッチフィルターの組み合わせについても設計してみました。
PoweSDRなどにはAutoNotchReduction(ANR)機能がありますが、そのアルゴリズムは不明なので単純なノッチフィルターとしました。ノッチ周波数が
可変出来るので、ピートの箇所にノッチをあわせるとほぼ完全にリジェクトでき、従来のアナログフィルターでは実現出来なかった特性が得られます。
係数を求める式を以下に示します。
BPF+BEFの係数(虚数部) = (1/(2PI* x))* (Math.Cos(2 * PI * highcut * x) +Math.Cos(2 * PI * notchhigh * x)
BPF+BEFの係数(実部) =-1 * notchlow * Sinc(2 * notchlow * x) - lowcut * Sinc(2 * lowcut * x) |
今後の予定
この後ノイズブランカやノイズリダクションも盛り込みたいのですが、残念ながらアルゴリズムは勉強不足です。次は送信機能の盛り込み検討を進めていきます。