matlab 生成伽罗华域中元素代码

来源:互联网 发布:2017php视频教程百度云 编辑:程序博客网 时间:2024/06/04 19:25

clc;

clear;

%generate_gf(1,2^m);

%%————————————————运算前13个元素代码
function alpha_to=generate_gf(m,n) %任意m,n通用
m=12; %当m=12,n=3860;
n=3860;
alpha_to=zeros(1,2^m);
mask=1;
alpha_to(m+1)=0;
Pp=primpoly(m); %注意高低端掉个个儿
for i=1:m
  alpha_to(i)=mask;
    if (Pp(i)~=0)
       alpha_to(m+1)=bitxor(alpha_to(m+1),mask);
    end;
      mask=mask*2;
end;


mask=alpha_to(m);
%%———————————————运算剩余的元素代码
for i=m+2:n
     if (alpha_to(i-1)>=mask)
        alpha_to(i)=bitxor(alpha_to(m+1),bitxor(alpha_to(i-1),mask)*2);
     else
        alpha_to(i)=alpha_to(i-1)*2;
     end;
end;


alpha_to(2^m)=0;    %把元素0放在最后一位。



% 第二个文件primpoly.m


function Pp=primpoly(m)


if m==2
Pp=[1,1,1];
elseif m==3
Pp=[1,1,0,1];
elseif m==4
Pp=[1,1,0,0,1];
elseif m==5
Pp=[1,0,1,0,0,1];
elseif m==6
Pp=[1,1,0,0,0,0,1];


elseif m==7
Pp=[1,0,0,1,0,0,0,1];
elseif m==8
Pp=[1,0,1,1,1,0,0,0,1];
elseif m==9
Pp=[1,0,0,0,1,0,0,0,0,1];
elseif m==10
Pp=[1,0,0,1,0,0,0,0,0,0,1];
elseif m==11
Pp=[1,0,1,0,0,0,0,0,0,0,0,1];


elseif m==12
 Pp=[1,0,0,0,0,0,1,0,1,0,0,1,1];    %高低端调换
% Pp=[1,1,0,0,1,0,1,0,0,0,0,0,1];   %m=12实际本原多项式
elseif m==13
Pp=[1,1,0,1,1,0,0,0,0,0,0,0,0,1];
elseif m==14
Pp=[1,1,0,0,0,0,1,0,0,0,1,0,0,0,1];
elseif m==15
Pp=[1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1];
elseif m==16
Pp=[1,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1];


end;

%%%%%%%%可以检验运行结果

 Columns 1 through 5


           1           2           4           8          16


  Columns 6 through 10


          32          64         128         256         512


  Columns 11 through 15


        1024        2048        2369        3011        3783


  Columns 16 through 20


        1231        2462        2685        3515         567

        .........................

0 0
原创粉丝点击