c语言的BCH码的编译码程序doc.doc_第1页
c语言的BCH码的编译码程序doc.doc_第2页
c语言的BCH码的编译码程序doc.doc_第3页
c语言的BCH码的编译码程序doc.doc_第4页
c语言的BCH码的编译码程序doc.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

BCH码的编译码程序#include #include #include int m, n, length, k, t, d;int p21;int alpha_to1048576, index_of1048576, g548576;int recd1048576, data1048576, bb548576;int seed;int numerr, errpos1024, decerror = 0;void read_p() int i, ninf; printf(nEnter a value of m such that the code length isn); printf(2*(m-1) - 1 length 1) | !(m21) ); for (i=1; i pi = 0; p0 = pm = 1; if (m = 2) p1 = 1; else if (m = 3) p1 = 1; else if (m = 4) p1 = 1; else if (m = 5) p2 = 1; else if (m = 6) p1 = 1; else if (m = 7) p1 = 1; else if (m = 8) p4 = p5 = p6 = 1; else if (m = 9) p4 = 1; else if (m = 10) p3 = 1; else if (m = 11) p2 = 1; else if (m = 12) p3 = p4 = p7 = 1; else if (m = 13) p1 = p3 = p4 = 1; else if (m = 14) p1 = p11 = p12 = 1; else if (m = 15) p1 = 1; else if (m = 16) p2 = p3 = p5 = 1; else if (m = 17) p3 = 1; else if (m = 18) p7 = 1; else if (m = 19) p1 = p5 = p6 = 1; else if (m = 20) p3 = 1; printf(p(x) = ); n = 1; for (i = 0; i = m; i+) n *= 2; printf(%1d, pi); printf(n); n = n / 2 - 1; ninf = (n + 1) / 2 - 1; do printf(Enter code length (%d length = %d): , ninf, n); scanf(%d, &length); while ( !(length ninf) );void generate_gf() register int i, mask; mask = 1; alpha_tom = 0; for (i = 0; i m; i+) alpha_toi = mask; index_ofalpha_toi = i; if (pi != 0) alpha_tom = mask; mask = 1; for (i = m + 1; i = mask) alpha_toi = alpha_tom (alpha_toi - 1 mask) 1); else alpha_toi = alpha_toi - 1 9) printf(Computing cycle sets modulo %dn, n); printf(This may take some time).n); do ii = 0; do ii+; cyclejjii = (cyclejjii - 1 * 2) % n; sizejj+; aux = (cyclejjii * 2) % n; while (aux != cyclejj0); ll = 0; do ll+; test = 0; for (ii = 1; (ii = jj) & (!test); ii+) for (kaux = 0; (kaux sizeii) & (!test); kaux+) if (ll = cycleiikaux) test = 1; while (test) & (ll (n - 1); if (!(test) jj+; cyclejj0 = ll; sizejj = 1; while (ll (n - 1); nocycles = jj; printf(Enter the error correcting capability, t: ); scanf(%d, &t); d = 2 * t + 1; kaux = 0; rdncy = 0; for (ii = 1; ii = nocycles; ii+) minkaux = 0; test = 0; for (jj = 0; (jj sizeii) & (!test); jj+) for (root = 1; (root d) & (!test); root+) if (root = cycleiijj) test = 1; minkaux = ii; if (minkaux) rdncy += sizeminkaux; kaux+; noterms = kaux; kaux = 1; for (ii = 0; ii noterms; ii+) for (jj = 0; jj sizeminii; jj+) zeroskaux = cycleminiijj; kaux+; k = length - rdncy; if (k0) printf(Parameters invalid!n); exit(0); printf(This is a (%d, %d, %d) binary BCH coden, length, k, d); g0 = alpha_tozeros1; g1 = 1; for (ii = 2; ii 0; jj-) if (gjj != 0) gjj = gjj - 1 alpha_to(index_ofgjj + zerosii) % n; else gjj = gjj - 1; g0 = alpha_to(index_ofg0 + zerosii) % n; printf(Generator polynomial:ng(x) = ); for (ii = 0; ii = rdncy; ii+) printf(%d, gii); if (ii & (ii % 50) = 0) printf(n); printf(n);void encode_bch() register int i, j; register int feedback; for (i = 0; i = 0; i-) feedback = datai bblength - k - 1; if (feedback != 0) for (j = length - k - 1; j 0; j-) if (gj != 0) bbj = bbj - 1 feedback; else bbj = bbj - 1; bb0 = g0 & feedback; else for (j = length - k - 1; j 0; j-) bbj = bbj - 1; bb0 = 0; void decode_bch() register int i, j, u, q, t2, count = 0, syn_error = 0; int elp10261024, d1026, l1026, u_lu1026, s1025; int root200, loc200, err1024, reg201; t2 = 2 * t; /* first form the syndromes */ printf(S(x) = ); for (i = 1; i = t2; i+) si = 0; for (j = 0; j length; j+) if (recdj != 0) si = alpha_to(i * j) % n; if (si != 0) syn_error = 1; si = index_ofsi; printf(%3d , si); printf(n); if (syn_error) d0 = 0; d1 = s1; elp00 = 0; elp10 = 1; for (i = 1; i t2; i+) elp0i = -1; elp1i = 0; l0 = 0; l1 = 0; u_lu0 = -1; u_lu1 = 0; u = 0; do u+; if (du = -1) lu + 1 = lu; for (i = 0; i 0) q-; if (q 0) j = q; do j-; if (dj != -1) & (u_luq 0); if (lu lq + u - q) lu + 1 = lu; else lu + 1 = lq + u - q; for (i = 0; i t2; i+) elpu + 1i = 0; for (i = 0; i = lq; i+) if (elpqi != -1) elpu + 1i + u - q = alpha_to(du + n - dq + elpqi) % n; for (i = 0; i = lu; i+) elpu + 1i = elpui; elpui = index_ofelpui; u_luu + 1 = u - lu + 1; if (u t2) if (su + 1 != -1) du + 1 = alpha_tosu + 1; else du + 1 = 0; for (i = 1; i = lu + 1; i+) if (su + 1 - i != -1) & (elpu + 1i != 0) du + 1 = alpha_to(su + 1 - i + index_ofelpu + 1i) % n; du + 1 = index_ofdu + 1; while (u t2) & (lu + 1 = t); u+; if (lu = t) for (i = 0; i = lu; i+) elpui = index_ofelpui; printf(sigma(x) = ); for (i = 0; i = lu; i+) printf(%3d , elpui); printf(n); printf(Roots: ); for (i = 1; i = lu; i+) regi = elpui; count = 0; for (i = 1; i = n; i+) q = 1; for (j = 1; j = lu; j+) if (regj != -1) regj = (regj + j) % n; q = alpha_toregj; if (!q) rootcount = i; loccount = n - i; count+; printf(%3d , n - i); printf(n); if (count = lu) for (i = 0; i lu; i+) recdloci = 1; else printf(Incomplete decoding: errors detectedn); main() int i; read_p(); generate_gf(); gen_poly(); seed = 131073; srandom(seed); for (i = 0; i 16; encode_bch(); for (i = 0; i length - k; i+) recdi = bbi; for (i = 0; i k; i+) recdi + length - k = datai; printf(Code polynomial:nc(x) = ); for (i = 0; i length; i+) printf(%1d, recdi); if (i & (i % 50) = 0) printf(n); printf(n); printf(Enter the number of errors:n); scanf(%d, &numerr); printf(Enter error locations (integers between); printf( 0 and %d): , length-1); for (i = 0; i numerr; i+) scanf(%d, &errposi); if (numerr) for (i = 0; i numerr; i+) recderrposi = 1; printf(r(x) = ); for (i = 0; i length; i+) printf(%1d, recdi); if (i & (i % 50) = 0) printf(n); printf(n); decode_bch(); printf(Results:n); printf(original data = ); for (i = 0; i k; i+) printf(%1d, datai); if (i & (i % 50) = 0) printf(n); printf(nrecovered data = ); for (i = length - k; i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论