/drm/trunk/debug/mm/ml/ml_rs_model_xxbm/bm.m

http://github.com/zaqwes8811/decoder-reed-solomon · MATLAB · 75 lines · 50 code · 1 blank · 24 comment · 7 complexity · ed447144e5fb64e77fed0b7e7b720e01 MD5 · raw file

  1. % ???????????????? ??????? ????????? ?.-?????
  2. % "High-Speed Low-Complexity Reed-Solomon Decoder
  3. % using Pipelined Berlekamp-Massey Algorithm and Its
  4. % Folded Architecture"
  5. clear; clc;
  6. % K = 9; t = 3; % ?????????????? ????????, ??????? ?????? ????? ?????????
  7. % p_sourse = [1 0 0 1 1]; % x4+x+1 gf(16)
  8. K = 207; t = 24;
  9. p_sourse = [1 0 0 0 1 1 1 0 1]; % x8+x+1
  10. p = bitroute(p_sourse, length(p_sourse)); % ??? ????????? ?????? ??????????? ???? ? ???????
  11. ip = arbit2dec(p); % ????????? ? uint
  12. m = length(p)-1; % ??????? ????????????? ??????????
  13. GF = 2^m; % ????? ????????? ? ???? 2^(??????? ???????? ??????????)
  14. % ????????
  15. % 1. ?????? ???? ? ????? ? ??????? ????? ?????????? ??????
  16. % 2. ??? ??? ??
  17. T = 2*t; % ????? ??????????? ????????
  18. N = T+K; % ????? ???????? ? ??????? ?????
  19. j0 = 1; % ????????? ???????
  20. % ????????? ???????
  21. [index_of alpha_to] = getLook_up(p_sourse);
  22. % ??????????? ?????????
  23. % ? ???????? ?? ????? ???? ??????????, ??????? ?? ????????? ??????????? ??? ????????
  24. unicalc{1,1} = index_of;
  25. unicalc{1,2} = alpha_to;
  26. unicalc{1,3} = GF;
  27. unicalc{1,4} = m;
  28. %%% ???????? ????????? %%%%%%%%
  29. load sindroms;
  30. load lambdas;
  31. load omegas;
  32. % ?????? ??????????
  33. lambda_deg = 0; l_er = 0;
  34. discrep = 0; % ???????
  35. % ????????? ?????????
  36. lambda = [1 zeros(1, T/2)];
  37. prev_lambda = [0 1 zeros(1, T/2-1)]; % B(x) ????? ????????
  38. tau = zeros(1, T);
  39. % ???????? ?????????? (????)
  40. for i_round = 1:T % ???? ?? ??????????? ????????
  41. discrep = 0; % ??????? ????????
  42. for i = 1:l_er+1
  43. mpp = gmult(s(i_round-i+1),lambda(i), unicalc);
  44. discrep = myxor(discrep, mpp,8); % ??????? ???????
  45. end
  46. % ????????? ???????. ???????????? ????
  47. if discrep ~= 0
  48. for k = 1:T/2+1 % ????? ?? ????? ??????
  49. mpp = gmult(discrep, prev_lambda(k), unicalc);
  50. tau(k) = myxor(lambda(k), mpp, 8);
  51. if tau(k) ~= 0 % ?????? ???????
  52. lambda_deg = k-1; % ????? ??????? ??????? ??????
  53. end
  54. end
  55. % ????? ?????????
  56. if 2*l_er < i_round
  57. l_er = i_round-l_er;
  58. for k = 1:T/2+1
  59. prev_lambda(k) = gdiv(lambda(k), discrep, unicalc);
  60. end
  61. end
  62. % ????????? ???? ??????
  63. lambda = tau;
  64. tau = zeros(1, length(tau)); % ????????
  65. end
  66. % ???????? ?????? ???????
  67. prev_lambda = [0 prev_lambda];
  68. prev_lambda(:,end) = []; % ???????? ????????? ????????
  69. % prev_lambda_deg = prev_lambda_deg+1;
  70. end
  71. % ?????? ???????? ????????
  72. % ????? ?? ????????? ??????????? ??????????? ?????? ? ????????
  73. % ????????
  74. lambda_deg