Advertisement
Guest User

Untitled

a guest
Apr 28th, 2015
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.55 KB | None | 0 0
  1. source("GF2Lib.r")
  2.  
  3. #GF(2^3)体を使う
  4. GF2mTable(3, 3)
  5.  
  6. #情報bit数 k は GFn-GFm
  7. k <- GFn-GFm
  8.  
  9. #生成行列を作る多項式(使うGF(2^3)体の原始多項式をつかう)
  10. Hx <- c(1,0,1,1) #x^3 + x + 1 の係数は 1,0,1,1
  11.  
  12. # [k, GFm] の部分行列を作る
  13. P <- matrix(nrow=0, ncol=GFm) #つなげていくため最初は0行
  14. for( i in (GFn-1): GFm ){
  15. vec <- gf2.vec(2^i, len=length(Hx))
  16. vec <- gf2.mod(vec, Hx)
  17. P <- rbind(P, matrix(vec, nrow=1))
  18. }
  19.  
  20. #単位行列部分を形成し、P行列をつなぐ
  21. G <- cbind(diag(k),P)
  22. G
  23.  
  24. #検査行列を作る
  25. #P行列の下に、単位行列をつなぐ
  26. H <- rbind(P, diag(GFm))
  27. H
  28.  
  29. Ix <- c(1,0,1,1)
  30. code <- gf2.mmult(Ix, G)
  31. code #Ixに対する正常なハミング符号
  32.  
  33. #エラーを発生させる。(正常にエラー訂正できるかどうかの確認)
  34. err <- c(0,0,0,0,1,0,0) #どこか1bitにエラーを発生させる
  35. Rx <- gf2.add(code, err)
  36.  
  37. #シンドロームというやつ。全部がゼロならデータ化けはなし。
  38. S <- gf2.mmult(Rx,H)
  39. S
  40.  
  41. #もしシンドロームの全部の項がゼロでなければエラーなので修正する。
  42. if( sum(S)!=0 ){
  43. #2進ベクトルになっているので、数値に戻してべき表現の肩の数字を求める。
  44. # シンドロームの示す位置とRベクトルは逆順なので 7から引いて反転させた。
  45. err.pos <- 7-gf2m.log(gf2.dec(S))
  46. Rx[err.pos] <- xor(Rx[err.pos], 1)
  47. err.pos
  48. }
  49. answer <- Rx[1:4]
  50. answer #Ix と同じなら訂正がうまくできた。
  51.  
  52. for( i in 1:7 ){
  53. print( gf2m.log(gf2.dec(H[i,])) )
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement