CW Decoder 解説編 (2) デコーダの処理の流れ


[2] デコーダの処理の流れ

 

前回、CW Decoderの特徴であるデジタル信号処理の概要について、説明しました。
今回はデコーダ部の具体的な信号処理の流れについて説明します。

デコーダ処理は、「信号入力部」、「信号のシェーピング(整形)部」、「モールス符号の解析処理部」から構成されています。(下図がデータと処理の流れ)




信号入力部 (グラフ1, 2)

リグ内では、AGCや各種フィルタ処理を施しています。従って本機はアナログフィルタなどを設けず、入力信号を素直に使うこととしました。


(私が)通常使用するリグの音量(オーディオ信号)は、100mVpp程度でした。これを2SC1815500mVpp程度に増幅するとともにレベル変換をしてMCUADCに入力します。



また私が使用するIC-705では、CW モードのフィルタ(FIL2) 350Hz-850Hz500Hz幅のデジタルフィルタが入ります。このフィルタ設定から、300Hz-900Hzを解析対象とすれば実用上問題ないと判断し、ADCのサンプリング周波数を2560Hzとしました。(標本化定理により、0-1280Hzが解析可能な範囲)

信号のシェーピング部 (Core1)

入力信号(ADC変換後)を、モールス信号(キーのOn/Off信号)に変換するのが信号のシェーピング(整形)です。


  FFT計算の設定

本機では、FFT計算により、CWトーンを抽出します。今回は、周波数分解能を20Hz幅に設定しました。(128サンプル/FFT @2560サンプル/)
また、キーのOn/Offを判定する時間間隔(=毎秒のFFT計算回数)も、解読速度の上限や、ノイズ対策に重要な要素になります。本機では、この間隔を約4ミリ秒(1/256)としました。 
10WPM(50/)の速度で、短点(dot)の長さは120ミリ秒*です。最高速度を50WPMとした場合、短点の長さは24ミリ秒ですので、1dot6サンプルとなりOn/Off判定に十分なデータを取得できます。


  ノイズの除去~CWトーンの抽出

 (グラフ37)

1) まず、FFT計算でオーディオ・スペクトラムデータを取得します。(256/)
(
データは20Hz(=ビン)64)

2) バックグラウンドノイズを除去するために、オーディオ信号全域の平均レベルより下のデータをカットします。

3) さらに不要帯域(300Hz以下と900Hz以上)のデータをカットします。

4) それでも、CWトーン以外に鋭いノイズが残りますので、各ビンの両隣のデータと平均値をとってならします。(山を低くする)

5) この後、もう一度、一定レベル以下のデータをカットすることで、CWトーンのみを抽出します。 → オーディオ・スペクトラムのグラフとして表示

6) 残ったデータから最も強い周波数のデータを解析対象とします。(注目周波数)

7) 解析対象のデータには、QSBなどのレベル変動があります。また、そもそも信号自体の強弱もありますので、ALC(自動レベル調整)をかけると同時に、Onレベル(Hiレベル)Offレベル(Lowレベル)、中間のOn/Off判定レベル(Thresholdレベル)を計算します。
→ オーディオレベルとしてグラフ表示



  On レベル: 青点線 

   判定レベル: 緑点線

   Offレベル:  赤点線

 


  キーon/off信号への変換

ノイズを除去したデータと、On/Off判定レベルから、キーのOn/Off状態を4ミリ秒毎に出力します。ただし、信号に重なったプチッというノイズや、急激なレベルの変動が、On/Off判定を狂わすため、短時間の変動を無視する(乗り越える)積分処理をしたのち、最終的なキーOn/Off信号として、次のモールス符号の解析データとします

モールス符号の解析処理部

最近はエレキーかパソコンでCWを送信される方が大多数ですが、電鍵(縦ブレキーなど)を使用されている初心者の方、気持ちを込めた符号を送信される(特に和文を使われる)ベテランの方もいらっしゃいます。加えて、途中の電波伝搬の状況により、キーのOn/Off時間は一定とはなりません。


  符号の判別

キーOn/Offの状態を監視しながら、短点・長点・文字区切り・単語区切りの判別をします。これと同時に、速度追従の計算もします。


  速度追従の考え方

観測した短点・長点のOn時間、符号間のOff時間からWPMを計算します。(文字区切り、単語区切りのOff時間は使用しません)
人間が打つ短点とその後ろのスペースは、1:1とは限りませんが、0.8:1.21.1:0.9など、個人で一定となるリズムがあります。(同様に長点も、3:1だけではなく、2.5:14:1など。長点の方がクセが強い傾向。)
本機では、この「リズム」をWPMの基本として考えます。つまり、短点とその後ろのスペース(1:1, 0.8:1.2, 1.1:0.9など)1単位(1Lと表現)して、1Lを更新していくことで速度追従をしています。
なお、前段のノイズ除去で取り切れなかった無音時(無信号時)のプチっというノイズが”E””T”と判定され、そのOn時間が短いために、どんどんWPMが上がってしまいます。これを防止するために、無音時のWPM20WPMに収束するようにしています。


  モールス信号の解読

文字区切り(単語区切り)が来るまでの、短点と長点のデータ(“1””2”で表現)を一塊として、モールス信号の解読ルーチンにデータを渡します。
モールス信号の解読ルーチンでは、昇順に並んだデータと照合して、合致した文字を返します。
欧文、和文のコード以外にも、連結文字記号や、しばしば連続して送信される文字もデータとして登録する事で、解読率を向上させています。


  デコードエラーの場合の試行

途中のノイズや、送信側が文字間隔を十分に取らないで送信した場合、解読エラーとなります。この場合、最長10符号(短点+長点)の塊を2文字に分解して解読を試行します。(例えば、”JH”を連続して送信した場合に、JHに分解する事を試行します)


★ 通常のQSOでも、文字間隔がほとんど無く、一体何を打っているのかサッパリわからない符号を送信するOMがいらっしゃいます。(多分、ご自分の中では区切っているのでしょうが) このような信号はCW Decoderでは解読できません。


  受信信号レベル低下時の出力抑制

受信信号レベルが低下した場合に、警告を表示すると同時に、”E””T”がダラダラと出力されないように、出力抑制をしています。

 

以上が、デコーダの主要な処理になります。


(1) 基本的な仕組み   <   [Home]   >   (3) 実際のプログラムの構造

コメント