资源简介
笔者在2015年学生时代就基本上搞定了解码的原理和方法,其后将RS(255,239)解码算法进行了详细的解读,在这里使用的是BM迭代算法。
本文参考国外某位大牛Ming-Han Lei(hendrik@humanistic.org) 写的RS(31,19)解码代码。
本文的多项式采用的是MATLAB进行编解码的本原多项式,因此编码部分的效果可以直接用MATLAB进行验证。
解码部分使用可以参考了RS编解码的FPGA实现 -- 俞旋 东南大学硕士学位论文,解码部分的效果可参考论文得以验证。
相当于公开了这篇硕士论文背后的源代码。
关键词: RS(255,239)编解码 BM迭代算法 verilog 详细解读
该解码算法迭代过程可以改进,如果需要改进的算法可以向笔者索取。
代码片段和文件信息
% chien search
% multiply block
% alpha = 2 to multiply a^0 ~ a^15;
% 2015-10-28
% edit by leo
% reserved in other file...
%g = [79 44 81 100 49 183 56 17 232 187 126 104 31 103 52 118 1];
seq = [0 0 0 0 0 0 0 0];
cnt = 0;
%syms x;
gf2poly = gf([1 0 0 0 1 1 1 0 1] 8);
a = roots(gf2poly);
fprintf(‘CHIEN process start!\n‘);
% calc the a^0 ~ a^15 then change to double type and store in seq co(i)
% co means coeffiency
fprintf(‘start calc a.^(i) in GF(28).\n‘);
for i = 1 : 1 : 16
GFa = a.^(i - 1);
temp1 = GFa.x;
co(i) = temp1(1);
end
g = co;
fid1 = fopen(‘f:\FPGApro\POST\SECOND\1RSDec\MATLAB\CHIEN.txt‘‘wt‘);
fprintf(‘next copy from multi_multiply.m to calc the m0~m15 block.\n‘);
for z = 0 : 1 : 15;
gi = g(z+1);
% convert gi into bin mode
xx = fi(gi080);
bxx = bin(xx);
% bxx is in char type change to double and store in sequence m
for i = 1 : 1 : 8
m(i) = double( bxx(i) - 48 );
end
x = m(1)*a.^7 + m(2)*a.^6 + m(3)*a.^5 + m(4)*a.^4 + m(5)*a.^3 + ...
m(6)*a.^2 + m(7)*a.^1 + m(8);
% to generate Y = M * X; -> matrix M
for j = 1 : 1 : 8
xi = x*2^(j-1);
temp = xi(1);
t1 = double(temp.x);
t2 = fi(t1080);
ct = bin(t2);
for i = 1 : 1 : 8
mm(i9-j) = double(ct(i) - 48);
end
end
fprintf(fid1‘g[%d] = %d \n‘zg(z+1));
for j = 8 : -1 : 1 %line
for i = 8 : -1 : 1 %coloum
if(mm(ji) ~= 0)
seq(cnt+1) = (8 - i);
cnt = cnt + 1;
end
end
fprintf(fid1‘ y[%d] = x[%d]‘8-jseq(1));
if(cnt >= 2)
for i = 2: 1: cnt
fprintf(fid1‘ ^ x[%d]‘seq(i));
end
end
fprintf(fid1‘;\n‘);
cnt = 0;
end
end
fclose(fid1);
% end
fprintf(‘CHIEN process END!\n‘);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4000 2015-11-03 11:27 all_sim+MATLAB+doc\all_sim\123.cr.mti
文件 16861 2015-11-03 11:27 all_sim+MATLAB+doc\all_sim\123.mpf
文件 4008 2015-11-03 09:53 all_sim+MATLAB+doc\all_sim\decode.v
文件 3996 2015-11-02 15:45 all_sim+MATLAB+doc\all_sim\decode.v.bak
文件 5771 2015-10-23 11:23 all_sim+MATLAB+doc\all_sim\inverse.v
文件 10366 2015-11-03 09:44 all_sim+MATLAB+doc\all_sim\rsdec_berl.v
文件 8398 2015-10-23 15:20 all_sim+MATLAB+doc\all_sim\rsdec_berl.v.bak
文件 14923 2015-10-28 11:31 all_sim+MATLAB+doc\all_sim\rsdec_chien.v
文件 9309 2015-10-08 10:42 all_sim+MATLAB+doc\all_sim\rsdec_syn.v
文件 9865 2015-11-02 14:43 all_sim+MATLAB+doc\all_sim\rsencode.v
文件 9867 2015-09-28 11:58 all_sim+MATLAB+doc\all_sim\rsencode.v.bak
文件 190 2015-11-02 14:48 all_sim+MATLAB+doc\all_sim\sigin.v
文件 190 2015-09-28 11:56 all_sim+MATLAB+doc\all_sim\sigin.v.bak
文件 4496 2015-11-02 16:07 all_sim+MATLAB+doc\all_sim\test-bench.v
文件 4102 2015-11-02 15:12 all_sim+MATLAB+doc\all_sim\test-bench.v - 副本.bak
文件 4490 2015-11-02 15:22 all_sim+MATLAB+doc\all_sim\test-bench.v.bak
文件 16 2015-11-02 14:04 all_sim+MATLAB+doc\all_sim\testbench.txt
文件 31263 2015-11-03 11:26 all_sim+MATLAB+doc\all_sim\transc
文件 532480 2015-11-03 11:27 all_sim+MATLAB+doc\all_sim\vsim.wlf
文件 2958586 2015-11-03 11:27 all_sim+MATLAB+doc\all_sim\wave.vcd
文件 42234 2015-11-03 09:53 all_sim+MATLAB+doc\all_sim\work\decode\verilog.psm
文件 2792 2015-11-03 09:53 all_sim+MATLAB+doc\all_sim\work\decode\_primary.dat
文件 8240 2015-11-03 09:53 all_sim+MATLAB+doc\all_sim\work\decode\_primary.dbs
文件 489 2015-11-03 09:53 all_sim+MATLAB+doc\all_sim\work\decode\_primary.vhd
文件 23875 2015-11-02 16:07 all_sim+MATLAB+doc\all_sim\work\inverse\verilog.psm
文件 6044 2015-11-02 16:07 all_sim+MATLAB+doc\all_sim\work\inverse\_primary.dat
文件 8703 2015-11-02 16:07 all_sim+MATLAB+doc\all_sim\work\inverse\_primary.dbs
文件 214 2015-11-02 16:07 all_sim+MATLAB+doc\all_sim\work\inverse\_primary.vhd
文件 75028 2015-11-03 09:44 all_sim+MATLAB+doc\all_sim\work\multiply\verilog.psm
文件 5525 2015-11-03 09:44 all_sim+MATLAB+doc\all_sim\work\multiply\_primary.dat
............此处省略322个文件信息
评论
共有 条评论