<- BACK

DCF39/DCF49パケット

パケット通信、基礎の基礎

EFR Teleswitch

EFR Teleswitch

EFR Teleswitchは広域の電力系システムをリモートコントロールするための無線システムです。

ドイツ(DCF39, DCF49)とハンガリー(HGA22)に送信所があり、日本で直接受信することは困難ですが、WebSDR経由でモニターできます。
EFR Teleswitch

PROTOCOL

国際規格「IEC 60870-5」をベースに「DIN 19244」に規定されているようです。

EFR公式資料
Klaus Betke氏資料

シンプルなプロトコルです。これを題材にしてパケット通信の基礎を勉強しましょう!

PACKET PARSER / ANALYZER

Arduinoで受信プログラムを作成してみました。

10秒ごとにタイムパケット、必要に応じて機器に対するコマンドが送信されています。

ユーザーデータ領域はあくまでバイナリデータですが、稀にアスキー文字で"DCF39 TEST"のようにコールサインを送出することがあるようです。
DCF39 PACKET PARSER

CODE

v1.38 DOWNLOAD(.zip)up

パケットの処理は初めての領域で「たぶんこんな感じだろう」という自己流ですが、市販ソフト以上の機能を盛り込むことができたので満足です。
DCF39 PACKET PARSER

SYSTEM

※デモジュレータはNE565Nを使ったもの
MASK AND SHIFT

MASK & SHIFT

プログラミングの超初歩の確認!

1バイトに複数の情報があって切り分ける必要があるとします。そんな時は「ビット演算子」である「マスク」や「シフト」を使って加工します。
PARITY AND FCS

PARITY & CHECKSUM

通信理論の超初歩の確認!

ざっくり図のような検算を送信側・受信側双方で行うことによってエラーを検出します。BAUDOTのRTTYには出てこない概念ですね。
MSB AND LSB

MSB & LSBnew

通信理論の超初歩の確認!

書くときはMSBファースト、送るときはLSBファーストが一般的です。例外もあるので注意を払う必要があります。
時計表示

電波時計

LCDにタイムパケットを表示して電波時計風に。
DCF39 PACKET CSV

CSV FILE OUTPUT

ファイル出力をすれば統計をとって分析することもできます。

参考コード
DCF49 ANALYSIS

DCF49 24H ANALYSIS

DCF49を24時間記録して分析してみました。

取得ログ(.csv)

※2020年現在、アスキー文字でのコールサイン送出はやっていないようですね。

PACKET SENDERnew

フレームがシンプルなので送信側も簡単に作れます。送受信して遊びましょう!

さらにデータ構成を自分で考えてテストしたり勉強にもなりますね。
arduino code

CODE

v0.6 DOWNLOAD(.zip)

SSDVの基礎実験new

デジタル伝送なら文字、音声、画像データは本質的に同じものなので、同じプラットフォームで送ることができます。

左の動画は32x32ピクセルのビットマップ画像を64バイトx16パケットに分割して送受信しているところ。

ヘッダ内のフレーム番号を基に後から組み立てたりできるのがパケット構造を使うメリットでもあります。
SSDV TEST

SSDVの基礎実験

1.8inch液晶表示もできました。32x32px程度なら200Baudも出せばいい感じです。

160x120pxは300Baudでも激遅でした^^少しでも実用性を考慮するならしっかりしたモデムを使って1200Baud以上で。

参考コード
テストパターン(32x32)
カメラ画像(160x120)

SSDVの話はまたいずれ別の項目を作って載せたいと思います。

RS-FECの基礎実験new

QRコードでお馴染みリードソロモン符号によるエラー訂正の実験をしてみました。

参考コード

AVRマイコンに最適化され、ARDUINOで動作するRS-FECライブラリの例

xirka-dev/RS-FEC
RS-FEC リードソロモン ざっくり 簡単に

RS-FECの基礎理論

多くのサイトや動画でリードソロモン符号の原理が解説されていますが、数学が得意ではない私は「ガロア体」なる言葉が出てきた瞬間にそっ閉じする訳です。

なんか雰囲気だけでも掴める解説はないんかね?と探し回ってみると、都城高専の中村博文先生が「小学生でもわかるように解説してやんよ。」というレポートを出しておられまして、それがこちら、

小学校の剰余計算の学習のみを前提とするリード・ソロモン符号 ...

これでもまだ難しい私は情報を極限まで切り詰めて整理しました。(左画像)

要するに付加データを含めた全データが2つの多項式を構成していて、受け側で計算するとエラーの「大きさ」と「位置」を割り出せるという話です。

こんな感じで合ってます?ほんと数学は苦手でいつも苦労します^^

AX.25の基礎実験new

AX.25はAPRS(自動位置情報通知)やアマチュア衛星でよく使われているプロトコルです。元は商用の「X.25」でそれをアマチュア無線用に改良したものです。

動画はHFパケットのサンプル信号をデコードしRAWデータをシリアルに出力しているところ。
AX.25 UIフレーム

DCF39/49の知識は使えない。

DCF39/49パケットをスピードアップして制御信号をちょこっと変更すれば「はいAX.25完成!」とはいかないんですね。残念!

同期の取り方が全く異なり、NRZI符号化という新しい概念も出てきます。商用プロトコルの中では逆にメジャーで必須の項目なので勉強しておきましょう。

SONODA Takehiko氏の日本語解説がこちら
arduino code

CODE

v1.31 DOWNLOAD(.zip)

LINUXにも標準インストールされているプロトコルですし、優秀なライブラリもすぐに見つかるでしょうが、ここは勉強のために自分で書いてみました。

理論は複雑ではないですが、それをどうやってコードに落とし込むかはかなり試行錯誤しました。結果、十分安定動作するものが出来たのでよかったです。