Charmsec™ - 誤り訂正文字化符号
特許第7142977号

 0x3dcafebabe → 'T:MKyEn

                 + sigle-character error

                 \T:MKyEn → 0x03dcafebabe (corrected) 

2021年12月17日
細田 隆之 (lyuka@finetune.co.jp)

Charmsec™ 符号は、筆者が考案した誤り訂正符号で、データを印刷可能な文字に符号化するブロック符号です。
Charmsec の名は Characterized Reminder Set Error Correcting code に由来します。

概要

この符号は符号文字中の文字単位での誤りを許容して復号することができます。下記実装例では 1 文字の誤りに対処出来ます。
情報エントロピーの余剰分を利用して、データ長の大きさを超えて扱える範囲の数(スーパーデータ)があります。
下記の実装例では LF (0x0a) を 1-bit 誤り訂正付きのコードデリミタとして使用可能です。
RS-232, RS-422, RS-485 のような非同期シリアル通信での装置やデバイス間通信に適しています。
実時間性と伝送効率が同時に要求される分野(e.g. 産業ロボットや乗り物の制御信号の伝送)に適しています。
印刷可能文字であるためロギングやメールへの添付も容易です。
必要なリソースは 8 k byte 程度ですので、比較的小規模のシステムにも実装が容易です。
Charmsec™ 符号はいくつかありますが、実用上ポピュラーなものを次に紹介します。

目次

符号比較

符号文字のマッピング例

Charmsec の符号文字の 7-bit ASCII コードへのマッピング例 (デリミタ : LF, 除外文字 : ∖)

Note 1 : NL (0x0A) の 1-bit 誤りは符号文字にならないようにマッピングしてあるので、 NL を 1-bit 誤り訂正付きのコードブロックデリミタとして利用できます。
Note 2 : ∖ (0x5C) も符号文字から除外してあるため、∖ を誤り位置インジケータ等に利用できます。

符号化と復号の例

Charmsec7_5C 1文字誤り訂正文字化符号
44-bit のデータを 9-char の ASCII 文字列に符号化します。除外文字は ∖ です。
符号化率は約 0.698 です。 Base64 に対しては、約 22 % の符号文字の増加となります。
符号化と復号の例
Sun, 12 Jun 2022 17:32:26 +0900
Charmsec7_5c_demo : Rev.1.92 (Jun. 12, 2022) (c) 2004 Takayuki HOSODA, Finetune co., ltd.
Charmsec7_5c_demo : Using charmsec7_5c - a subset of the Charmsec CoDec library.
Charmsec7_5c_demo : '\' is to be used as the error position indicator here.
Charmsec7_5c_demo : txdata = 0x0000badcafebabe -> txcode = gMbVtv'no
Charmsec7_5c_demo : rxdata = 0x0000badcafebabe <- rxcode = \MbVtv'no - Corrected an error
Charmsec7_5c_demo : rxdata = 0x0000badcafebabe <- rxcode = g\bVtv'no - Corrected an error
Charmsec7_5c_demo : rxdata = 0x0000badcafebabe <- rxcode = gM\Vtv'no - Corrected an error
Charmsec7_5c_demo : rxdata = 0x0000badcafebabe <- rxcode = gMb\tv'no - Corrected an error
Charmsec7_5c_demo : rxdata = 0x0000badcafebabe <- rxcode = gMbV\v'no - Corrected an error
Charmsec7_5c_demo : rxdata = 0x0000badcafebabe <- rxcode = gMbVt\'no - Corrected an error
Charmsec7_5c_demo : rxdata = 0x0000badcafebabe <- rxcode = gMbVtv\no - Corrected an error
Charmsec7_5c_demo : rxdata = 0x0000badcafebabe <- rxcode = gMbVtv'\o - Corrected an error
Charmsec7_5c_demo : rxdata = 0x0000badcafebabe <- rxcode = gMbVtv'n\ - Corrected an error
Charmsec7_5c_demo : txdata = 0x000141d4a551717 -> txcode = ikquwyzdm (saturated)
Charmsec7_5c_demo : rxdata = 0x000141d4a551717 <- rxcode = \kquwyzdm (superdata) - Corrected an error
Charmsec7_5c_demo : rxdata = 0x000141d4a551717 <- rxcode = i\quwyzdm (superdata) - Corrected an error
Charmsec7_5c_demo : rxdata = 0x000141d4a551717 <- rxcode = ik\uwyzdm (superdata) - Corrected an error
Charmsec7_5c_demo : rxdata = 0x000141d4a551717 <- rxcode = ikq\wyzdm (superdata) - Corrected an error
Charmsec7_5c_demo : rxdata = 0x000141d4a551717 <- rxcode = ikqu\yzdm (superdata) - Corrected an error
Charmsec7_5c_demo : rxdata = 0x000141d4a551717 <- rxcode = ikquw\zdm (superdata) - Corrected an error
Charmsec7_5c_demo : rxdata = 0x000141d4a551717 <- rxcode = ikquwy\dm (superdata) - Corrected an error
Charmsec7_5c_demo : rxdata = 0x000141d4a551717 <- rxcode = ikquwyz\m (superdata) - Corrected an error
Charmsec7_5c_demo : rxdata = 0x000141d4a551717 <- rxcode = ikquwyzd\ (superdata) - Corrected an error

C言語での実装例

Charmsec7_5C 実装例 (クリックで展開します)
Download アーカイブのダウンロード : charmsec7_5c_demo-1.92.tar.gz [4kB tar.gz]

スーパーデータ利用例

Charmsec™ の特徴の一つであるスーパーデータを利用してデータストリームの合間に単発データや制御コードを送ったり、
またデータストリームの終了やチェックビットやタイムスタンプ等に利用することもできます。
下の図は Charmsec7 を RS-485 のマルチドロップでの装置・ロボット間通信に適用した場合の利用例です。

技術解説

▼ 特許明細書より抜粋(クリックで展開します)

変更履歴

▼ 変更履歴(クリックで展開します)

関連項目


Copyright (c) Finetune co., ltd.