「お気に入りSDRトランシーバーの製作Ver2 ノイズブランカの組み込み」


製作中のSDRトランシーバーは、試験的な運用を通して細かなデバック作業を進めていますが、少しづつ機能も増えてきて、写真は 現在のフォーム画面の様子。今回は新たにノイズブランカを組み込んでみます。

2020.11.8
はじめに
 SDRStudy(RFワールド#22)を改造して進めてきた「お気に入りSDRソフトの製作」、今回はノイズブランカ機能を組み込んでみました。。
 PowerSDRなどのソフトにもNB1,NB2などの機能が盛り込まれおり、対象とするノイズはパルス性ノイズと中華ドラゴンノイズの使い分けのようで、 効果も実感できます。
 まずは、パルス性ノイズを対象とした、ノイズブランカについて検討します。
 

ノイズブランカのアルゴリズム
 ノイズブランカ(以下NB)の具体的なアルゴリズムはPowerSDRのソースを解読すれば参考になるかもしれませんが、膨大なソースコードからノイズブランカ部のコードを 探すのは大変です、叉ネット上でも見つけることは出来ませんでしたので、従来からハードウェアで構成されたANLやNBの回路をソフト的に実現する方法でやってみました。
 「他にもこんなアルゴリズムがあるよ。」というのがあればアドバイスいただければ幸いです。
 従来からのANLの構成は、AMのキャリアレベルとAGC時定数の関係を利用して、ダイオードや2極管をON/OFFしています。このANLの動作原理を利用して、AMキャリアレベル に相当する部分は、シグナルレベルの移動平均値を求め、その平均値に対してある係数以上の信号をノイズと判定して、その瞬間にゲインを低下するようにしました。ANLではノイズの振幅を 一定値にクリップするだけですが、ソフトではゲインを低下することでノイズ部分をカットするような動作にできます。

ノイズブランカ目標仕様
 NBの効き具合については、具体的な数値や、各メーカーの共通評価方法がはっきりしないので、とりあえずはPowerSDRのNB1と同等な効果が得られることを目標仕様としました。
 NBのノイズ判定レベルはプログラム上で固定値とし、実際のノイズを受信しながら可変の必要性について検討していきます。

ノイズブランカをプロクラムに組み込む
 NB処理の組み込みは、オリジナルSDRstudyのSignalクラスの中に組み込みました。
 具体的なフローとして、フォーム画面でNBボタンが押されると、
「signal.SignalAve(SignalReal, SignalImag); //移動平均処理とノイズリミット」の関数が呼び出され、信号の絶対値20ヶ分の移動平均と、その時々の信号レベルを比較して、一定以上(今回は 実験的に2倍のレベル差)のレベル差があるとノイズと判定して、その瞬間の信号レベルを-20dbゲイン低下させています。
 移動平均のサンプル数を増やすと、比較的周期の長いドラゴンノイズにも効くようになりますが、必要な信号に対してもブランキングされたようになってきます。
 叉レベル比を小さくすると弱いノイズに対してもブランキングが働くようになりますので、平均回数とレベル比はカット&トライで決めています。  ソースプログラム例(VC#)を以下に示します。コメントに日本語を使用しているので、一部iPad等でみると文字化けしているかもしれません。

プログラムソースリスト参照

使用してみて
 当局の受信環境では比較的人口ノイズは少ないので、擬似的にブラシモーターの接点ノイズを受信機ANTから混入させ、NB ON/OFfした動画をとってみました。動画前半は6.990MHz付近の中華ドラゴンノイズのかぶりに対しての NB ON/OFFの比較、後半では、モーターノイズでの効果確認。いずれも右下NBボタンをON/OFFしています。
SDRStudyにノイズブランカON/OFFデモ動画 (YOUTUBEへ)
 パルス性のノイズについては、PowerSDRのNB1と同等な効果が確認できましたが、ドラゴンノイズについてはPowerSDR NB2よりもやや効果が少なく検討の余地があります。

Top Menu