|
中国人剰余定理 (Chinese remainder theorem) [1] によると正整数 m は m < Πi=1k である 互いに素な数 p1 .. pk の剰余の組で 一意に表される。 これに互いに素な数 pk < pk + 1 < pk + 2 を 2 つ追加して m を k + 2 個の剰余で表すように冗長性を持たせると、 1 つの剰余に誤りがあった場合に k + 2 個中の k 個の剰余から逆算され得る k + 2Ck 個の正整数のうち k + 1Ck - 1 個は互いに異なった ものとなるが k + 1Ck 個は同一となるため 多数決により誤り訂正が可能となる。また 2 つの剰余に誤りがあった場合には 逆算した結果が全て異なるため誤り検出も可能である。
まず 16-bit の数を 3 つの剰余にしてそれを文字で表すためには 1 文字あたり約 5.4-bit 程度の情報量が必要で、 p1 < p2 < p3 < p4 < p5 とすると
216 <= p1 * p2 * p3 …(1)である必要がある。 各剰余をアルファベットで表すとすると大文字と小文字で 52 文字なので
p5 <= 52 …(2)である必要がある。(1), (2) の条件を満たす互いに素な数の組はいくつかあるが、 アルファベットから紛らわしい文字 {I, O, i, l, o} を除いた 47 文字 (List1)でも 実現可能な互いに素な数の組 {38, 41, 43, 45, 47} が見付かったのでこれを使用することにする。 List1 [紛らわしい文字 (I, O, i, l, o) を含まないアルファベット]
ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz例として元のデータの値が 0xcafe とすると、これは剰余の組として {20, 19, 22, 36, 31} と表され、これを List1 により文字変換して "WVYph" となる。 この文字列が 1 文字誤って例えば "sVYph" となった場合には、隣り合う 3 つの剰余から 計算される値は {0x4825, 0xcafe, 0xcafe, 0x2e05, 0x3bf9} となる。この中で同一のものが 2 つあればそれを選び単一文字誤り訂正とする。 この場合、第2項と第3項が同じで 0xcafe となり訂正が確認できた。 List2 にCプログラム例を示す。
List2 [Cプログラム例 (単一文字誤りテスト)]
|
List3 [プログラム実行例]
data = 0x4567, code = XQJqB, code+error = XxJqB, data = 0x4567(corrected) data = 0x4873, code = DRQHf, code+error = DRQwf, data = 0x4873(corrected) data = 0x944a, code = Aqpdk, code+error = AqYdk, data = 0x944a(corrected) data = 0x7ccd, code = fLAxp, code+error = fLjxp, data = 0x7ccd(corrected) data = 0x41f2, code = LhcHK, code+error = LhcHh, data = 0x41f2(corrected) data = 0xe146, code = aaHbB, code+error = caHbB, data = 0xe146(corrected) data = 0x0854, code = EAbTT, code+error = EZbTT, data = 0x0854(corrected) data = 0xe9e8, code = gWagC, code+error = gW#gC, data = 0xe9e8(corrected) data = 0x0f76, code = GYCwL, code+error = #YCwL, data = 0x0f76(corrected) data = 0x7263, code = ZKAkC, code+error = ZK#kC, data = 0x7263(corrected) 10 of 10 SEC test passed.
1文字誤りの符号語から 16-bit のデータへの誤り訂正復号が確認できた。 この符号の場合 16-bit のデータが 5 文字 30-bit 相当の文字列になるわけで、単純に 符号化率や誤り訂正能力で考えた場合 (28, 16, l=6) とか (48, 32, l=8) バースト誤り訂正符号などの 方がましであるし、中国人剰余定理を用いた符号としても初歩的で復号方法も 最適とは言えないが、アルファベットの文字列として符号化できるという点に おいて、例えばバーコードなどと違い電話や印刷ででも伝えられるといったところに、 適用箇所があるのではなかろうか。 例えば、企業や省庁の長くなりがちな部署名の略号への適用等が考えられる。
Jun. 22, 2022 : タイトル・表示等変更
Feb. 13, 2016 : 誤記修正
Aug. 31, 2014 : 誤記修正