JavaScript で書かれたリードソロモン符号のエンコーダ・デコーダ
JavaScript だと、デコーダだけ、エンコーダだけ、というのはあったり、GF(2^8) オンリーなものはあったりするんだけど、汎用的なのがなくて悲しかった。
Zxing (バーコード読めるアプリ) の実装を見てみたら、読みやすい上で汎用的な実装だったのでリードソロモン部分だけ Java → JavaScript の移植を行った。
https://github.com/cho45/reedsolomon.js
他の目的があって移植してたけど、目的がなかなか達成できないのでとりあえずこれだけ npm にあげた。
久し振りに単純な移植作業をやった。特殊な依存が特になくほぼ計算なので
- 型宣言を全部 var に
- インスタンス変数の参照に this. をつける
- System.arraycopy() を TypedArray#set() に置き換える
ぐらいを何も考えずに機械的に行なったい、テストもまるごと Zxing のものをパクって移植した。
覚書
(2が底なら?) 任意のガロア域を使えるようになっており、いろんな用途に使えそう。
new GenericGF(primitive, size, b) で作れるが、primitive polynomial (原始多項式) はビットで表現されている。
x^8 + x^5 + x^3 + x^2 + 1 という多項式なら、8 5 3 2 0 bit が立ち 100101101 となる。0ビット目は +1 を表現してる。これは一般的な表現方法らしく、このように表わされた状態を数字として 301 としたり 0x12d としたりするみたいだ。
http://octave-online.net/ で primpoly(6, 'all') とかやれば原始多項式を全部求められる。
あと、JT65 (6bit) は AZTEC_DATA_6 と同じっぽい。
関連エントリー
- 標準符号化試験信号 PN符号 LFSR 別表第35とかに出てくる「標準符号化試験信号」の生成について調べた。 擬似信号発生器は、標準符号化試験信号(ITU-T勧告O.150による9...
- JavaScript ArrayBuffer -> String 変換 500 Can't connect to stackoverflow.com:443 (certificate verify failed)...
- ✖ 元気が全く、全然出てこなくて、どうしようもない。1回大きい負荷がかかって以来全方面にすっかり心が折れてるのがずっと続いてる。 コーディングは...
- 正規表現からそれにマッチするランダム文字列を生成する String_random.js var randomUrl = String_random(/http:\/\/[a-z]{3,8}\.example\.com\/([a-...