Quantcast
Channel: ずるやすみねこのリサイズ研究
Viewing all 1278 articles
Browse latest View live

誤り訂正符号随筆

$
0
0
誤り訂正にしても、画像圧縮にしても、頼りになるのはトリケップス本なのである。
トリケップス社は、仕様や理論を実機にするための橋わたしをしてくれる会社である。
インプレス社がだしている一般向けの本とは違い、理論がわからない学卒技術者がとにかく作らなきゃいけないといったときの具体的な方法を書いてあるので、高いけど価値があるのである。
地デジのときは、画像圧縮、OFDM,誤り訂正と3つのパラダイムがあった。
そのときも技術者がたよりにしたのはトリケップス本だったはずである。
地デジ関係の大手メーカーは数社であるので、それらの会社とそこの下請けの人しか買わないので高いのである。
また、中小企業は、大手から仕事を受注しようと必死に勉強したであろうから、そこの人も買ってるので多少買う人は多いと思う。
それにしても、日本の人口に比べれば、電気技術者の絶対数は少ないのである。高いのはしょうがないのである。

誤り訂正は、必死こいてVerilog書いて、FPGAで動かして、そのネットリストだけで、1000万円以上お客からお金とれる割のいい仕事だった時代がある。
そして地デジの時代がやってきて、リードソロモン、畳み込み符号の仕事で稼いだ人がいたはずである。
無線、放送には誤り訂正はかかせないので、次はデジタルラジオでしょうか?
仕事をつくるために、新しい仕様の誤り訂正技術が使われるとおもわれます。

思い出し開始

$
0
0
昔は、LFSRによる多項式乗算器と多項式除算器の説明が書いてある本がいっぱいあったんだけど
最近みかけなくなった。
BCHでは、多項式乗算器も多項式除算器も、多項式の係数が1か0なのでそんな悩まないですむんだけど
リードソロモンでは、係数がガロア拡大体の要素なので、多項式乗算器より多項式除算器のほうがむずかしい。
ちょっと忘れちゃったけどLFSRのはしっこが逆元をかけなきゃいけなかったと思う。

まあなんで逆元になるかっていうのは、筆算での多項式割り算で係数をa,b,cという一般化した係数を使って
行うと、なるほどとわかる。

LFSRによる多項式除算器と多項式乗算器は、筆算での計算のしくみに忠実にもとづいているのである。

このことに気づくと、何も見ないで、自分でLFSRを作ることができます。

リードソロモンの多項式乗算器、多項式除算器がわからなかったら、筆算での多項式乗除算を一般化して、紙と鉛筆で計算してみることをお勧めします。

まあ、BCH、リードソロモンに行く前に、CRCをマスターしておくことは無駄にはならないので
CRCの符号器、復号器をHDLでもC言語でもいいから作っておくといいかもしれないです。

1日

$
0
0
48時間ほしい。寝る間も惜しいのである。しかし寝る。

地デジリードソロモン符号

$
0
0
g(x)=(x+λ^0)(x+λ^1)…(x+λ^15)、(λ=02h)
p(x)=x^8+x^4+x^3+x^2+1
ということなので
翻訳すると
生成多項式g(x)=(x+1)(x+α)(x+α^2)(x+α^3)・・・(x+α^15)
体生成多項式これは8次の原始多項式のひとつなのだが、p(x)=x^8+x^4+x^3+x^2+1ということなので
p(x)=0とおいて
x^8+x^4+x^3+x^2+1=0
x^8=-x^4-x^3-x^2-1
ここでGF(2)では和はEXORなので1+1=0、1-1=0なので1をたしても1をひいても同じなので
X^8=x^4+x^3+x^2+1
ガロア体GF(2)からx^8=x^4+x^3+x^2+1を使ってガロア拡大体GF(2^8)をつくることができる
拡大して作った元をαのベキであらわす。
GF(2^8)拡大体の元をベクトル表現すると

0                         00000000
1                         00000001
α                         00000010
α^2                       00000100
α^3                       00001000
α^4                       00010000
α^5                       00100000
α^6                       01000000
α^7                       10000000
α^8 =α^4+α^3+α^2+1        00011101
α^9 =α^5+α^4+α^3+α        00111010
α^10=α^6+α^5+α^4+α^2      01110100
α^11=α^7+α^6+α^5+α^3      11101000
α^12=α^8+α^7+α^6+α^4
    =α^4+α^3+α^2+1+
     α^7+α^6+α^4
    =α^7+α^6+α^3+α^2+1    11001101



α^253=?
α^254=?


α^255=1
α^256=α
と繰り返す。
256個の元からなるのがGF(2^8)のガロア拡大体である。

ということで0、1、α、α^2・・・・α^254
まで256個の元がもとまる
この256個の元のベクトル表現は、2進数8ビットであらわされる数すべてである
余談だがこのベクトル表現を2進数として読むと、M系列乱数になっている。
手計算でやってたら大変なので、LFSRをHDLでもC言語でもいいから作って計算するといいです
さて、生成多項式にもどり
g(x)=(x+1)(x+α)(x+α^2)(x+α^3)・・・(x+α^15)
であるが、これを展開する。
たとえば先頭から括弧2個ずつ組にして展開していくと
(x+1)(x+α)=x^2+(α+1)X+α
(x+α^2)(x+α^3)=x^2+(α^2+α^3)+α^5



(x+α^13)(x+α^14)=?
(x+15)
ここで1個だけ例をあげるが
α^2+α^3をα^?のかたちにするには
α^2のベクトル表現 00000100
α^3のベクトル表現 00001000
をガロア体上でたすわけである
すると
           00001100
これを先ほどもとめた0、1、α・・α^254までのベクトル表現の一覧からさがすのである。
これは、先ほどの表を完成させれば可能。ここではめんどくさいので、そのベキをKとすると
α^K
(x+α^2)(x+α^3)=x^2+(α^K)x+α^5
同様に
 α+1=α^Mとあらわせるとすると
(x+1)(x+α)(x+α^2)(x+α^3)
=(x^2+(α^M)x+α)(x^2+(α^K)x+α^5)
=x^4+(α^K)x^3+(α^5)x^2
+(α^M)x^3+(α^(M+K))x^2+(α^(M+5))x
+αx^2+(α^(K+1))x+α^6
=xの最大次の係数が4となる多項式ができる(α^?)x^4+(α^?)+x^3+(α^?)+x^2+(α^?)x+α^?といった感じ

でまとめあげると
x^16+(α^?)x^15+(α^?)X^14+・・・+α^?X^0
が生成多項式になるのである
これが生成多項式である

地デジリードソロモン符号器は(255,239)符号ですので
検査バイトは255-239=16バイトです。
よって
8かける239ビットの入力信号を1バイトづつブロックにして239ブロックならべる
ブロックをGF(2^8)の元のベクトル表現としてα^?であらわして

ブロックを多項式の係数としてあらわす

(α^?)X^254+(α^?)X^253+・・・+(α^?)X^16

これを先ほどもとめた生成多項式の展開系でわる。
ベクトルLFSRで割り算を計算するとあまりがX^15(最大ベキが15の多項式であらわされる
あまりがでる。このあまりが検査バイトである。
先ほどのでーたのおしりに、あまりをつければ、エンコードの終了となる。
さて地デジの符号は頭の51バイトに0をいれる(204,188)短縮符号である。
送るときには51個の0のブロックをとっておくる。
この51個の0ブロックは復号のときにまたつける。
値0の51個のブロックの部分は誤りなしとみなせるので、誤りが発生するのは188バイトのデータ部分か16バイトの検査バイトの部分である。
これは、訂正できる誤りの発生したバイト数の最大バイト数を変えないで、データを短くする
効果があり、誤りの発見できるバイトが全データに比較して格段に増えるのである。

ベクトルLFSR多項式除算器、乗算器、リードソロモン復号の話はまた次回

ガロア拡大体どうしの積

$
0
0
和は、ベクトル表現して対応するビットどうしのEXORをとればよかった
が積はというとαのベキの指数部をたせば良いのだが、こういう方法もあるということで書いておく。

(a7*X^7+a6*X^6+a5*X^5+a4*X^4+a3*X^3+a2*X^2+a1*X+a0)(b7*X^7+b6*X^6+b5*X^5+b4*X^4+b3*X^3+b2*X^2+b1*X+b0)
を展開する
すると係数が
a7b7*X^14
+(a7b6+a6b7)*X^13



+a0b0*X^0

Xの14次の多項式ができる
この係数を計算してa7b7= a7 and b7
+はEXORで計算する
その結果をあらたな変数としておく

X^8=x^4+x^3+x^2+1
を使って、X^8 8次以上の項の次数をおとす
たとえば
X^14=X^8(X^6)=(X^4+x^3+x^2+1)X^6=X^10+X^9+X^8+X^6=(X^2+X+1)X^8+X^6=・・・・

するとXの7次の多項式ができこれが積のベクトル表現となる。

今回の説明は、ひどいけど、勘のいい人ならイメージはつかめると思う

ところで、ウィキペディアにピーターソン法でのリードソロモン復号法が書いてあったので
説明するのはやめにした。符号化の方法ものってた。

リードソロモンの復号法は、ピーターソン法がWIKI
バーレカンプマッシー法とフォーニーのアルゴリズムがCQ出版のディジタルエラー訂正技術入門 西村芳一著
ユークリッド法がトリケップス出版の実践誤り訂正技術
にそれぞれわかりやすく書いてあります

今後の予定は、ベクトル多項式除算器、乗算器について書いてみたいと思う
図がかけないので文章の説明になります。
それが終わったら、いよいよC言語で実装して、次にVerilog記述にはいります。
3種の方法がすべて完成するのに、1年以上かかるかもしれないです。

ベクトル多項式除算器(序)

$
0
0
これは、リードソロモンエンコーダにいる回路である。
1個前のブログのガロア拡大体どうしの積を求める回路と
逆元エンコーダ(verilogのfunction文でcaseで羅列すると組み合わせ回路でできる)と
DFFでできる。
おじさんは、GF(2^9)、GF(2^7)のベクトル多項式除算器のVerilogソース
2001年につくったのがある。コメントに原始多項式を書いてない。ここにはろうと思ったが長すぎてはれない。GF(2^8)は、まだつくってないのでこれからつくる。
ガロア拡大体の全元をもとめるには、LFSRをつくって1をいれてぐるぐるまわせば、255クロックで
0以外の全元がでてくる。1クロックごとの出力をMODELSIMでファイル出力してやればいい。
生成多項式は、前ブログのp(x)を使う。
そこで逆元のテーブルを作って、逆元エンコーダの完成である。
あとは、ソースをかけば、ベクトル多項式除算器の完成、それにちょこちょこと細工をすればリードソロモンエンコーダの完成である。
CRCエンコーダがわかってれば、ビット幅を8にしただけなのである。

原始多項式を求めるプログラム

$
0
0
読者の中には、原始多項式を1次から8次のものは本にのってるのでいいけど9次以上のを求めたいという人がいると思うので書いときます。
定義をそのままつかいます。
9次の場合、8次以下の考えられる多項式全部でわってわりきれなければ、それが、原始多項式
です。
9次だと結果がでるのに数日かかります。
原始多項式は必ず1の項があります。なぜかは忘れました。
昔つくったけど、なくしちゃったので、またつくってみようとおもいます。
原始多項式は各項、係数が必ず0か1です。

たぶん

$
0
0
大学生が就職のときにRS、BCH符号器、復号器のHDLを提出して、学生時代につくりましたっていえば、まず、100%企業はとってくれると思います。

すでに金がとれるレベルだからね。

シンドローム計算、ピーターソン法、チェン探索タイムチャート例

$
0
0



上から、シンドローム計算、ピーターソン法、チェン探索のタイムチャートです。
シンドローム計算はS1、S2、・・・、S(2t)を並列に計算します。
tは、訂正できる最大誤りビットまたはブロックです。BCHではビット、RSではブロック
ピーターソン法は、最大誤り数2のとき、シンドロームS1,S2,S3,S4をもとにクラメルの公式でもとめています。σ0とσ1をもとめています。
σ1が8クロックかかって律速段階なので、σ0の計算は2クロックでおわるけど、6クロックなにもしないでまって8クロックかかるようにしてます。σ1とσ0の計算は同時にスタートします。
CPUのアキュームレータをガロア拡大体乗算器とガロア拡大体除算器(逆元乗算器)とパラレルEXORだけの演算器にしたような感じでハードウエアコストをさげました。
チェン探索は、適当な本みれば載ってます。
ここにのせたタイムチャートは、BCH、RS符号共通です。
RSでは、このあと、誤り数値計算がはいります。
誤り数値計算とは、ブロックのどのビットがちがってるかを求めます。
リードソロモンのすごいとこは、ひとつのブロックの全ビットかひっくりかえっていても、訂正できることです。なのでインターリーブによって、バースト誤り訂正だけでなく単発でぽこぽこばけるランダム誤りを高率で訂正することができるわけです。
誤り数値計算は、「実戦誤り訂正技術」トリケップス刊と「符号理論」今井秀樹著をじっくりよめば、
わかります。

50000アクセス達成

$
0
0
2016.4.10 50000アクセス達成

ベクトル多項式除算器(本論)

$
0
0
a,b,c,d,eをそれぞれ実数として
被除数多項式ax^2+bx+cを除数多項式dx+eで割ることを考える。

dx+e √ax^2+bx+c
aは0でない。dも0でないとする

(a/d)xがたって、(ax^2+bx+c)-(ax^2-(ae/d)x)=(b+ae/d)x+c

(b+ae/d)/dがたって ((b+ae/d)x+c)-((b+ae/d)x+(((b+ae/d)e)/d))=c-((b+ae/d)e)/d=c-e(bd+ae)/d

ax^2+bx+c わる dx+e は 商が(a/d)x+(b+ae/d)/d 剰余が c-e(bd+ae)/d




これをシフトレジスタで表現すると

寝る時間になったので続きは明日。

ベクトル多項式乗算器

$
0
0
これは、どんな本にものってるので省略。考え方は多項式除算器と同じ。
ガロア体多項式乗算器では、DFFとガロア拡大体の元どうしの乗算器があればできる。

富士通の池田氏

$
0
0
富士通の故池田さんは、仕事をするとき、本をちょっと読んでは考えていたそうです。
微分方程式をといて、電話の不具合をみつけたそうです。
リレー式電子計算機の複雑な回路をざっとみて、ぱしっと間違いをみつけたそうです。
夏はバケツに水をいれて足をいれて、歌をうたいながら仕事をしてたそうです。
池田さんも本質が見えるまで考える人で、理解できるまで、次に進まなかったんだと思います。
同じことを楽しく考え続ける執念。
徹底的に考えること。
その積み重ねが、天才を作ったと考えます。

本をちょっと見て考えるとは

$
0
0
本ちょっと見て考え、イメージを頭の中でいじくりまわす。
だんだんわかってくる。
本をちょっと見て考えるは、丸暗記ではない理解して記憶を頭に定着させる唯一の方法である。

リードソロモン

$
0
0
リードソロモンにだけでてくる、誤りブロックを構成するビットの1個1個の誤りを見つけるための
効率的なアルゴリズムであるフォーニーの証明をしたいがなんせたっぷり時間がとれない。
今週末もだめ。誤植のうちにはいらない誤植だが、頼りにすべき今井先生の符号理論にも誤植があるので
論文をあたりたいが、国会図書館にいく時間はとれないので、証明できなければ、実際の値をいれて計算してあうまで試行錯誤するしかない。いちおうネット上にひとつだけ、フォーニーの証明をしているpdfをみつけたが、変数の記号が文献によってそれぞれ違う。いろいろあたると頭がおかしくなりそうである。
そんな中でも今井先生の符号理論が一番いいと思うので、ベースは今井本でやっていきたい。

と思ったけど、今井本の7.42式の証明ができたので、もうだいじょうぶだ。今井本とトリケップス本が正しいことが証明された。西村本は、みてるとあたまいたくなってくるので、バーレカンプマッシーもトリケップス本をつかうことにする。

ガロア体でも形式微分が成り立つか気になったので

$
0
0
やってみた

(1+(α^2)X)(1+(α^3)X)=1+(α^2+α^3)X+(α^5)X^2

両辺を形式微分


左辺の微分=(α^2)(1+(α^3)X)+(α^3)(1+(α^2)X)=α^2+α^3+2*(α^5)X
=α^2+α^3

右辺の微分=α^2+α^3+2*(α^5)X=α^2+α^3

確かに形式微分はなりたつ

よって、フォーニーは

最大2誤りブロック訂正可能な場合で2ブロック誤った場合

e(i)= -((S0+S1*X+S2*X^2+S3*X^3)(1+σ1*X+σ2*X^2))mod(X^4) / (1+σ1*X+σ2*X^2)') | {X=α^(-ji)}
i=1~2

1ブロックだけ誤った場合

e(i)= -((S0+S1*X+S2*X^2+S3*X^3)(1+σ1*X)mod(X^4) / (1+σ1*X)') | {X=α^(-ji)}
i=1

iは誤りブロックの通し番号
jlは、誤ったブロックの番号

これより、ブロック番号3と5が誤って2ブロック誤った場合は、

j1=3,j2=5 となり

ブロック番号3だけが誤った場合は

j1=3 となる

上の式にもどって、mod(X^4)はXの4次以上の項を削除するという意味である。
分母の形式微分を計算して

e(i)= -((S0+S1*X+S2*X^2+S3*X^3)(1+σ1*X+σ2*X^2)mod(X^4)) / (σ1) | {X=α^(-ji)}
i=1~2

e(i)= -((S0+S1*X+S2*X^2+S3*X^3)(1+σ1*X)mod(X^4)) / (σ1) | {X=α^(-ji)}
i=1

地デジリードソロモンでe(i)=0xffだったら全ビットばけてることになる。

フォーニーは

$
0
0
フォーニーのアルゴリズム

e=ω/σ’を変形して、柳屋画蔵さんのブログの誤り訂正のページにある式にしたものである。
おじさんはω/σ’を使って愚直につくることにする。

これでVerilog実装にはいれます。

まずはC言語でGF(2^8)ガロア拡大体の元のリストをつくり、逆元回路のVerilog記述します。

ガロア拡大体GF(2^8)の元

$
0
0
地デジリードソロモン用GF(2^8)元一覧 
右端の2桁は16進数表示

α^175が全部のビットがたったものなんだね。

---------00000000 00
ALFA^000=00000001 01
ALFA^001=00000010 02
ALFA^002=00000100 04
ALFA^003=00001000 08
ALFA^004=00010000 10
ALFA^005=00100000 20
ALFA^006=01000000 40
ALFA^007=10000000 80
ALFA^008=00011101 1d
ALFA^009=00111010 3a
ALFA^010=01110100 74
ALFA^011=11101000 e8
ALFA^012=11001101 cd
ALFA^013=10000111 87
ALFA^014=00010011 13
ALFA^015=00100110 26
ALFA^016=01001100 4c
ALFA^017=10011000 98
ALFA^018=00101101 2d
ALFA^019=01011010 5a
ALFA^020=10110100 b4
ALFA^021=01110101 75
ALFA^022=11101010 ea
ALFA^023=11001001 c9
ALFA^024=10001111 8f
ALFA^025=00000011 03
ALFA^026=00000110 06
ALFA^027=00001100 0c
ALFA^028=00011000 18
ALFA^029=00110000 30
ALFA^030=01100000 60
ALFA^031=11000000 c0
ALFA^032=10011101 9d
ALFA^033=00100111 27
ALFA^034=01001110 4e
ALFA^035=10011100 9c
ALFA^036=00100101 25
ALFA^037=01001010 4a
ALFA^038=10010100 94
ALFA^039=00110101 35
ALFA^040=01101010 6a
ALFA^041=11010100 d4
ALFA^042=10110101 b5
ALFA^043=01110111 77
ALFA^044=11101110 ee
ALFA^045=11000001 c1
ALFA^046=10011111 9f
ALFA^047=00100011 23
ALFA^048=01000110 46
ALFA^049=10001100 8c
ALFA^050=00000101 05
ALFA^051=00001010 0a
ALFA^052=00010100 14
ALFA^053=00101000 28
ALFA^054=01010000 50
ALFA^055=10100000 a0
ALFA^056=01011101 5d
ALFA^057=10111010 ba
ALFA^058=01101001 69
ALFA^059=11010010 d2
ALFA^060=10111001 b9
ALFA^061=01101111 6f
ALFA^062=11011110 de
ALFA^063=10100001 a1
ALFA^064=01011111 5f
ALFA^065=10111110 be
ALFA^066=01100001 61
ALFA^067=11000010 c2
ALFA^068=10011001 99
ALFA^069=00101111 2f
ALFA^070=01011110 5e
ALFA^071=10111100 bc
ALFA^072=01100101 65
ALFA^073=11001010 ca
ALFA^074=10001001 89
ALFA^075=00001111 0f
ALFA^076=00011110 1e
ALFA^077=00111100 3c
ALFA^078=01111000 78
ALFA^079=11110000 f0
ALFA^080=11111101 fd
ALFA^081=11100111 e7
ALFA^082=11010011 d3
ALFA^083=10111011 bb
ALFA^084=01101011 6b
ALFA^085=11010110 d6
ALFA^086=10110001 b1
ALFA^087=01111111 7f
ALFA^088=11111110 fe
ALFA^089=11100001 e1
ALFA^090=11011111 df
ALFA^091=10100011 a3
ALFA^092=01011011 5b
ALFA^093=10110110 b6
ALFA^094=01110001 71
ALFA^095=11100010 e2
ALFA^096=11011001 d9
ALFA^097=10101111 af
ALFA^098=01000011 43
ALFA^099=10000110 86
ALFA^100=00010001 11
ALFA^101=00100010 22
ALFA^102=01000100 44
ALFA^103=10001000 88
ALFA^104=00001101 0d
ALFA^105=00011010 1a
ALFA^106=00110100 34
ALFA^107=01101000 68
ALFA^108=11010000 d0
ALFA^109=10111101 bd
ALFA^110=01100111 67
ALFA^111=11001110 ce
ALFA^112=10000001 81
ALFA^113=00011111 1f
ALFA^114=00111110 3e
ALFA^115=01111100 7c
ALFA^116=11111000 f8
ALFA^117=11101101 ed
ALFA^118=11000111 c7
ALFA^119=10010011 93
ALFA^120=00111011 3b
ALFA^121=01110110 76
ALFA^122=11101100 ec
ALFA^123=11000101 c5
ALFA^124=10010111 97
ALFA^125=00110011 33
ALFA^126=01100110 66
ALFA^127=11001100 cc
ALFA^128=10000101 85
ALFA^129=00010111 17
ALFA^130=00101110 2e
ALFA^131=01011100 5c
ALFA^132=10111000 b8
ALFA^133=01101101 6d
ALFA^134=11011010 da
ALFA^135=10101001 a9
ALFA^136=01001111 4f
ALFA^137=10011110 9e
ALFA^138=00100001 21
ALFA^139=01000010 42
ALFA^140=10000100 84
ALFA^141=00010101 15
ALFA^142=00101010 2a
ALFA^143=01010100 54
ALFA^144=10101000 a8
ALFA^145=01001101 4d
ALFA^146=10011010 9a
ALFA^147=00101001 29
ALFA^148=01010010 52
ALFA^149=10100100 a4
ALFA^150=01010101 55
ALFA^151=10101010 aa
ALFA^152=01001001 49
ALFA^153=10010010 92
ALFA^154=00111001 39
ALFA^155=01110010 72
ALFA^156=11100100 e4
ALFA^157=11010101 d5
ALFA^158=10110111 b7
ALFA^159=01110011 73
ALFA^160=11100110 e6
ALFA^161=11010001 d1
ALFA^162=10111111 bf
ALFA^163=01100011 63
ALFA^164=11000110 c6
ALFA^165=10010001 91
ALFA^166=00111111 3f
ALFA^167=01111110 7e
ALFA^168=11111100 fc
ALFA^169=11100101 e5
ALFA^170=11010111 d7
ALFA^171=10110011 b3
ALFA^172=01111011 7b
ALFA^173=11110110 f6
ALFA^174=11110001 f1
ALFA^175=11111111 ff
ALFA^176=11100011 e3
ALFA^177=11011011 db
ALFA^178=10101011 ab
ALFA^179=01001011 4b
ALFA^180=10010110 96
ALFA^181=00110001 31
ALFA^182=01100010 62
ALFA^183=11000100 c4
ALFA^184=10010101 95
ALFA^185=00110111 37
ALFA^186=01101110 6e
ALFA^187=11011100 dc
ALFA^188=10100101 a5
ALFA^189=01010111 57
ALFA^190=10101110 ae
ALFA^191=01000001 41
ALFA^192=10000010 82
ALFA^193=00011001 19
ALFA^194=00110010 32
ALFA^195=01100100 64
ALFA^196=11001000 c8
ALFA^197=10001101 8d
ALFA^198=00000111 07
ALFA^199=00001110 0e
ALFA^200=00011100 1c
ALFA^201=00111000 38
ALFA^202=01110000 70
ALFA^203=11100000 e0
ALFA^204=11011101 dd
ALFA^205=10100111 a7
ALFA^206=01010011 53
ALFA^207=10100110 a6
ALFA^208=01010001 51
ALFA^209=10100010 a2
ALFA^210=01011001 59
ALFA^211=10110010 b2
ALFA^212=01111001 79
ALFA^213=11110010 f2
ALFA^214=11111001 f9
ALFA^215=11101111 ef
ALFA^216=11000011 c3
ALFA^217=10011011 9b
ALFA^218=00101011 2b
ALFA^219=01010110 56
ALFA^220=10101100 ac
ALFA^221=01000101 45
ALFA^222=10001010 8a
ALFA^223=00001001 09
ALFA^224=00010010 12
ALFA^225=00100100 24
ALFA^226=01001000 48
ALFA^227=10010000 90
ALFA^228=00111101 3d
ALFA^229=01111010 7a
ALFA^230=11110100 f4
ALFA^231=11110101 f5
ALFA^232=11110111 f7
ALFA^233=11110011 f3
ALFA^234=11111011 fb
ALFA^235=11101011 eb
ALFA^236=11001011 cb
ALFA^237=10001011 8b
ALFA^238=00001011 0b
ALFA^239=00010110 16
ALFA^240=00101100 2c
ALFA^241=01011000 58
ALFA^242=10110000 b0
ALFA^243=01111101 7d
ALFA^244=11111010 fa
ALFA^245=11101001 e9
ALFA^246=11001111 cf
ALFA^247=10000011 83
ALFA^248=00011011 1b
ALFA^249=00110110 36
ALFA^250=01101100 6c
ALFA^251=11011000 d8
ALFA^252=10101101 ad
ALFA^253=01000111 47
ALFA^254=10001110 8e

手計算で地デジリードソロモン生成多項式を展開してみる

$
0
0
(X+1)(X+α)=X^2+(1+α)X+α
00000001 00000010の各ビットEXORをとると00000011
前のブログから1+α=α^25
よって(X+1)(X+α)=X^2+(α^25)X+α
(X+α^2)(X+α^3)=X^2+(α^2+α^3)X+α^5
同様にEXOR計算は00001100
表よりα^2+α^3=α^27
(X+α^2)(X+α^3)=X^2+(α^27)X+α^5
(X+α^4)(X+α^5)=X^2+(α^4+α^5)X+α^9
00010000 00100000 EXOR 00110000
(X+α^4)(X+α^5)=X^2+(α^29)X+α^9
(X+α^6)(X+α^7)=X^2+(α^6+α^7)X+α^13
11000000
(X+α^6)(X+α^7)=X^2+(α^31)X+α^13
(X+α^8)(X+α^9)=X^2+(α^8+α^9)X+α^17
00011101 00111010 EXOR 00100111 27hex
(X+α^8)(X+α^9)=X^2+(α^33)X+α^17
(X+α^10)(X+α^11)=X^2+(α^10+α^11)X+α^21
01110100
11101000
10011100 9c hex
(X+α^10)(X+α^11)=X^2+(α^35)X+α^21
(X+α^12)(X+α^13)=X^2+(α^12+α^13)X+α^25
11001101
10000111
01001010 46hex
(X+α^12)(X+α^13)=X^2+(α^48)X+α^25
(X+α^14)(X+α^15)=X^2+(α^14+α^15)X+α^29
00010011
00101010
00111001 39hex
(X+α^14)(X+α^15)=X^2+(α^154)X+α^29

(X+1)(X+α)(X+α^2)(X+α^3)=(X^2+(α^25)X+α)(X^2+(α^27)X+α^5)
=(X^4+(α^27)X^3+(α^5)X^2+(α^25)X^3+(α^52)x^2+(α^30)X+αX^2+(α^28)X+α^6
=X^4+(α^27+α^25)X^3+(α^5+α^52+α)X^2+(α^30+α^28)X+α^6
00001100
00000011
00001111 0f hex
α^27+α^25=α^75
00100000
00010100
00000010
00110110 36hex
α^5+α^52+α=α^249
01100000
00011000
01111000 78hex
α^30+α^28=α^78
(X+1)(X+α)(X+α^2)(X+α^3)
=X^4+( α^75)X^3+(α^249)X^2+(α^78)X+α^6

(X+α^4)(X+α^5)(X+α^6)(X+α^7)

つづきは明日。
これをソフトでやっちゃうと、読者には伝わらない。めんどくさくてもやらないといけないのである。

うむ

$
0
0
誤り訂正だけ専門にやってても飯が食える時代があった。

今は、そんな時代ではない。
Viewing all 1278 articles
Browse latest View live