マイコンで作る 本格的CWデコーダ

2025年4月14日月曜日

t f B! P L

 1. はじめに

安価で高性能なマイコンRP2350を使って、お手軽価格(税込み2,200円)でPC版に並コンで本格的なCW デコーダを製作しましたので、記録を兼ねて紹介します。

2. CW デコーダでできる事 

1)無線機で受信したCW信号(英文・和文)、および自分が送信するサイドトーン(モニター音)をデコードして、表示機(OLED 64x128dot)に表示します。(16文字x4行)

2) 受信中の音のスペクトラム表示、およびオーディオ信号のレベル表示(AGC補正後)ができます。 (スペクトラム表示、レベル表示の例)

3) PCに接続して、受信した内容をターミナルで表示できます。

3. 使い方のイメージ

(使い方のイメージ)


4. 本マイコン版CWデコーダの仕組み (従来のマイコン版CWデコーダとの違い)

CWデコーダは主に、入力音声からターゲット信号を選択・抽出する信号処理部分と、抽出したモールス信号を解析する部分、そして表示部分から構成されます。

  • 従来のCW デコーダの構成

(従来のCWデコーダ)


従来のマイコン版CWデコーダでは、入力音声をそのまま、またはオーディオフィルタ(周波数固定)を通して選択した音声に対して、レベルの大小でモールス信号を抽出していました。

  • 本マイコン版CWデコーダ (FFT方式)

(FFT方式のデコーダの図)


本マイコン版のCWデコーダではPC版のCWデコーダと同じ、FFT計算でCW信号(トーン)を選択してデコードしています。

従って、設定帯域外の信号は完全にカットでき、また帯域内で一番強いターゲット周波数のみを自動的に選択してモールス信号を抽出しますので、ターゲット周波数以外の雑音からの影響を最小限にできます。(自分でフィルタの周波数に合わせる必要がありません)

5. 信号処理部 (サンプリングとFFT計算)

 必要なサンプリング回数

モールス符号の速度はWPM(Words per Minute)で表され、例えば20WPMの場合、ドット(短点)のOnの時間は60msecになります。このモールス符号をデコードするには、On期間に少なくとも3-5サンプルが必要です。  → サンプル間隔は10msec以下(100サンプル/秒以上)が必要

  • 従来のCWデコーダ =  音声信号の強弱でOn/Offを判断

ADCで100回/秒以上のサンプリング(容易)

欠点は、信号以外の雑音が信号に含まれるため、ノイズの大きい条件でのデコードが困難

  • 本マイコン版CWデコーダ  = ノイズへの耐性が高いFFT方式でOn/Off判定

FFT計算を100回/秒以上実行する必要がある。(計算量多い)

今回は、浮動小数点演算機構を内蔵していてFFT計算が速い RP2350を採用。 小型化のためにXIAO RP2350を使用する事にした。

(参考) マイコンの 性能比較表(π計算とFFT計算時間)

π計算プログラムの出典。https://garchiving.com/multi-core-speed-test-with-raspberry-pi-pico


サンプリング周波数の決定

  • オーディオアナライザの場合、高いサンプリング周波数(48kHzなど)で広範囲の解析。
  • CWの場合、すでに無線機のAFフィルタで帯域制限済で、600Hz±250Hzの範囲(*)をカバーすれば良い。(*)IC-705のCW (FIL2)の場合、350Hz-850Hz
    サンプリング周波数は2560Hzとした。(1280Hzまでが解析の対象)

周波数解像度の決定

  • ノイズからターゲット信号を分離するためには、周波数解像度をある程度細かくする必要がある。(ただし解像度を上げるとS/N比は改善するものの計算時間がかかる)
    周波数解像度を20Hzと設定
   まとめると、 2560サンプル/秒÷128サンプル/FFT = 20 FFT/秒= 20Hzの解像度

この結果、通常の方法ではFFT計算周期が1/20秒となり目標の条件を満たさない。
 ⇒ (対策) 10サンプル取得毎にデータをシフトして、1/256秒毎にFFT計算を実行、On/Off判定をする。

この結果、FFT計算とOn/Off判定で1つの計算ユニット(Core1)の計算能力をフルに使い切るため、モールス符号の判定と表示部分は別の計算ユニット(Core0)で実行するように全体を設計した。


6. 信号処理部 (ノイズ処理とOn/Off判定)

オーディオ・スペクトラム(FFT)方式のCWデコーダの構成


ノイズ処理1

オーディオスペクトラムに対し、全体の平均値(オレンジの線)以下を切り捨てる。


ノイズ処理2

両隣の値と平均化して、ピークを残しながらノイズを抑制する

最終的に、最も強い信号の強弱に注目して、AGCをかけた後でOn/Off判定を実施する (冒頭のオーディオスペクトラム表示、およびレベル表示の例を参照)

7. モールス符号解読部




  • 電鍵読み取り部(デジタル入力)は、FFT計算で信号のOn/Off判定の部分に相当
  • モールス符号解読部は、時間測定→符号判定→文字判定の部分
  • 文字判定は、二分探索アルゴリズムで高速探索して文字符号に変換
    • 文字符号は単独文字だけでなく、連結文字(例えば”AR“,”BT”,”CU”,”TNX”など)も登録できます。(ただし、”TU”は’X’と区別ができないので不可)
    • 英文・和文の切換えは手動(プログラムは、「ホレ」を"<<"、「ラタ」を">>"と表示します。これを打たない人もいるので、自動切換えはしていません)

8. 回路図と専用基板

CWデコーダの回路図

入力部のTrは、ヘッドホンレベルのAF信号をマイコンのADCに適切な振幅への増幅と、レベル変換をしています。


専用基板

赤枠で囲ったところを使用して、機能拡張ができるようにしました。


製作例

9. 部品表


10. プログラムの設定方法


マイコンボードの[B]のボタンを押しながらUSBケーブルを(パソコンに)挿入します。
すると、マイコンボードがストレージ(フォルダ)として表示されるので(赤枠の画面)、提供したプログラムをドラッグ&ドロップでコピー。コピーが終わればスタートします。

11.使い方

  1. CW Decoderに無線機からのオーディオケーブルとUSB電源(またはPC)を接続
  2. 無線機の音量レベルを調整 (AF15%-20%)
    (マイコンのLED(橙色)が雑音で点滅しないレベル)
  3. 欧文と和文の切換えは手動 ➡ ボタンをPush
    ([Alpha], [KANA]と表示されます)「ホレ」は”<<“、「ラタ」は”>>”と表示します。
  4. グラフ表示の切換え
    ボタンの長押し(3秒以上)で、スペクトラム表示、オーディオレベル表示へ切換えます
  5. PC表示 (大きく表示するデモ用)
    デコードした文字は、USB経由でPCのターミナル(TeraTermなど)で表示ができます。
     (通信速度115200bps)

12. 性能評価

PC版の著名なCWデコーダソフトと比較したところ、ほぼ同等の性能を実現していることを確認できました。(PC版ではコールサイン推定などを入れているようですが、本CWデコーダでは未実現)
また、本CWデコーダのデコード部分はまだ拡張可能で、連結文字対応の追加などを予定しています。

13. 最後に

このCWデコーダを作ってみたい方、一緒にソフトを改良してくださる方には、資料やソースコードをお送りする予定です。
ご連絡いただけると幸いです。

このブログを検索

ブログ アーカイブ

CW Decoderの製作講習会を開催しました

 先日、「マイコンで作る 本格的CW デコーダ」を掲載しましたが、これを、船橋市アマチュア無線クラブ(FARC: JJ1YNA)で発表したところ、大画面化したものが欲しいとのご要望をいただきました。 そこで、OLEDをタッチパネル付きのTFT液晶に変更して大画面化、操作性を改善し...

QooQ