Charmsec®(Characterized Remainder Set Error Correcting code)符号は、 筆者が考案した誤り訂正ブロック符号です。 その数理的本質は剰余系ドメインから任意の離散シンボル空間への一般化された写像にあります。 ここでは 7-bit ASCII の印字可能文字という制約された集合への写像としての適用例を示しています。
Charmsec はシンボル表現そのものには依存しないため、数理的には直交振幅変調のコンスタレーションや OFDM のサブキャリア、 さらには量子状態といった、任意の離散的な次元や物理状態への拡張も可能です。
今回の ASCII への適用例では、数理マッピングの制約により印字不可能なコードが排除されています。
そのため、物理層において電磁気的信号として扱われる場合には NUL (0x00) と DEL (0x7F) が除外されていることにより、
連続同一符号の最大長が 12-bit 以内に制限されるため、スクランブラを使わなくても確実なクロック再生が可能です。
コード外の制御文字、例えば LF (0x0a)をデリミタとして利用するのを想定した場合に、その制御文字からのハミング距離が 1 の文字を、
符号文字から除外することにより、1-bit誤り耐性のあるデリミタとして利用できます。
このデリミタをマクロな、たとえば複数のコードブロック構造のデリミタとして用いた場合には、 同期ワードやその補足処理のオーバーヘッドなしで確実なブロック同期が実現できるため、 RS-232、RS-422、RS-485などの非同期シリアル通信だけでなく、独自の同期式バス通信にも広く応用が可能です。
また、情報エントロピーの余剰分(スーパーデータ)を利用することで、 補助的なメタデータや独立した異種データを同一の符号空間に内包させるといった利用方法が考えられます。 例えば、データストリーム中にタイムスタンプや各種の制御コードや、単発のあるいは別系統のデータを混在させることが可能となり、 リアルタイム性と伝送効率が同時に要求される産業用ロボットや各種モビリティ(乗り物)の制御信号伝送などの低遅延システムに適しています。
印刷可能文字であるためロギングやメールへの添付も容易です。
実行時に必要なメモリリソースは 8 KB未満と軽量であるため、リソースの限られた組込み用プロセッサにも適しています。 また、Charmsec における剰余系や多数決の演算は並列処理が可能であるため、FPGA や SoC への実装により、一層の高速化を図ることも可能です。

∖)
LF (0x0A) の 1-bit 誤りは符号文字にならないようにマッピングしてあるので、
LF を 1-bit 誤り訂正付きのコードブロックデリミタとして利用できます。∖ (0x5C) も符号文字から除外してあるため、∖ を誤り位置インジケータ等に利用できます。
∖ です。Charmsec7_5c_demo : Rev.1.98 (2026-07-17) (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 = hNcWuw'op
Charmsec7_5c_demo : rxdata = 0x0000badcafebabe <- rxcode = \NcWuw'op - Corrected an error
Charmsec7_5c_demo : rxdata = 0x0000badcafebabe <- rxcode = h\cWuw'op - Corrected an error
Charmsec7_5c_demo : rxdata = 0x0000badcafebabe <- rxcode = hN\Wuw'op - Corrected an error
Charmsec7_5c_demo : rxdata = 0x0000badcafebabe <- rxcode = hNc\uw'op - Corrected an error
Charmsec7_5c_demo : rxdata = 0x0000badcafebabe <- rxcode = hNcW\w'op - Corrected an error
Charmsec7_5c_demo : rxdata = 0x0000badcafebabe <- rxcode = hNcWu\'op - Corrected an error
Charmsec7_5c_demo : rxdata = 0x0000badcafebabe <- rxcode = hNcWuw\op - Corrected an error
Charmsec7_5c_demo : rxdata = 0x0000badcafebabe <- rxcode = hNcWuw'\p - Corrected an error
Charmsec7_5c_demo : rxdata = 0x0000badcafebabe <- rxcode = hNcWuw'o\ - Corrected an error
Charmsec7_5c_demo : txdata = 0x000141d4a551717 -> txcode = jlrvxz{en (saturated)
Charmsec7_5c_demo : rxdata = 0x000141d4a551717 <- rxcode = \lrvxz{en (superdata) - Corrected an error
Charmsec7_5c_demo : rxdata = 0x000141d4a551717 <- rxcode = j\rvxz{en (superdata) - Corrected an error
Charmsec7_5c_demo : rxdata = 0x000141d4a551717 <- rxcode = jl\vxz{en (superdata) - Corrected an error
Charmsec7_5c_demo : rxdata = 0x000141d4a551717 <- rxcode = jlr\xz{en (superdata) - Corrected an error
Charmsec7_5c_demo : rxdata = 0x000141d4a551717 <- rxcode = jlrv\z{en (superdata) - Corrected an error
Charmsec7_5c_demo : rxdata = 0x000141d4a551717 <- rxcode = jlrvx\{en (superdata) - Corrected an error
Charmsec7_5c_demo : rxdata = 0x000141d4a551717 <- rxcode = jlrvxz\en (superdata) - Corrected an error
Charmsec7_5c_demo : rxdata = 0x000141d4a551717 <- rxcode = jlrvxz{\n (superdata) - Corrected an error
Charmsec7_5c_demo : rxdata = 0x000141d4a551717 <- rxcode = jlrvxz{e\ (superdata) - Corrected an error
アーカイブのダウンロード : charmsec7_5c_demo-1.98.tar.gz [4kB tar.gz]
Charmsec の特徴の一つであるスーパーデータを利用してデータストリームの合間に単発データや制御コードを送ったり、
またデータストリームの終了やチェックビットやタイムスタンプ等に利用することもできます。
下の図は Charmsec7 を RS-485 のマルチドロップでの装置・ロボット間通信に適用した場合の利用例です。
CRT による多数決誤り訂正は,互いに直交する n + 2t 個の単位ベクトルが与えられ、 元の数がそれらとの内積によって得られる n 個の値の組として 1 + 2t 通りに表現可能である場合に、 それらの復号結果に対する多数決により最大 t 個の誤りを訂正できるという考えに基づいている。
この数を分解してマッピングするという構造は、直交変復調や量子誤り訂正に関する将来の研究に対しても、何らかの示唆を与えるものであればと願う。
特許公報 特許第7142977号 — データ通信システム、送信装置、および受信装置