Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- source("GF2Lib.r")
- #GF(2^3)体を使う
- GF2mTable(3, 3)
- #情報bit数 k は GFn-GFm
- k <- GFn-GFm
- #生成行列を作る多項式(使うGF(2^3)体の原始多項式をつかう)
- Hx <- c(1,0,1,1) #x^3 + x + 1 の係数は 1,0,1,1
- # [k, GFm] の部分行列を作る
- P <- matrix(nrow=0, ncol=GFm) #つなげていくため最初は0行
- for( i in (GFn-1): GFm ){
- vec <- gf2.vec(2^i, len=length(Hx))
- vec <- gf2.mod(vec, Hx)
- P <- rbind(P, matrix(vec, nrow=1))
- }
- #単位行列部分を形成し、P行列をつなぐ
- G <- cbind(diag(k),P)
- G
- #検査行列を作る
- #P行列の下に、単位行列をつなぐ
- H <- rbind(P, diag(GFm))
- H
- Ix <- c(1,0,1,1)
- code <- gf2.mmult(Ix, G)
- code #Ixに対する正常なハミング符号
- #エラーを発生させる。(正常にエラー訂正できるかどうかの確認)
- err <- c(0,0,0,0,1,0,0) #どこか1bitにエラーを発生させる
- Rx <- gf2.add(code, err)
- #シンドロームというやつ。全部がゼロならデータ化けはなし。
- S <- gf2.mmult(Rx,H)
- S
- #もしシンドロームの全部の項がゼロでなければエラーなので修正する。
- if( sum(S)!=0 ){
- #2進ベクトルになっているので、数値に戻してべき表現の肩の数字を求める。
- # シンドロームの示す位置とRベクトルは逆順なので 7から引いて反転させた。
- err.pos <- 7-gf2m.log(gf2.dec(S))
- Rx[err.pos] <- xor(Rx[err.pos], 1)
- err.pos
- }
- answer <- Rx[1:4]
- answer #Ix と同じなら訂正がうまくできた。
- for( i in 1:7 ){
- print( gf2m.log(gf2.dec(H[i,])) )
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement