www.gusucode.com > 基于matlab编程(31,25)RS编码及解码源码程序 > 基于matlab编程(31,25)RS编码及解码源码程序/code/rs_decode_forney.m

    % a function to calculate evaluator polynomial using forney arithmetic
% according to syndrome polynomial & locator polynomial & roots of 
%locator polynomial
function [value,site]=rs_decode_forney(synd_x,sigma_x,root)
T=[1,2,4,8,16,5,10,20,13,26,17,7,14,28,29,31,27,19,3,6,12,24,21,15,30,25,23,11,22,9,18];
% vector of evaluator polynomial
w1=zeros(1,length(synd_x)+length(sigma_x)-1);
% 't' is the max number of errors
t=3;site=[];
% calculate the value of w(j)
for i=1:length(synd_x)-1
    for j=1:length(sigma_x)
        w1(i+j-1)=rs_add(w1(i+j-1),rs_mul(synd_x(i+1),sigma_x(j)));
    end
end
% evaluator polynomial
w=w1(1:2*t);
s=zeros(1,length(sigma_x));
% differential coefficient of locator polynomial
for h=1:length(sigma_x)
    if mod(h,2)==0
        s(h-1)=sigma_x(h);
    end
end
s(length(sigma_x))=0;
for k=1:length(root)
    w_final=rs_poly(w,root(k));
    s_final=rs_poly(s,root(k));
    % error value
    value(k)=rs_mul(w_final,rs_rev(s_final));
   site(k)=mod((31-(find(T==root(k))-1)),31);
end