📄 gfprimfd.m
字号:
function pr = gfprimfd(m, fd_flag, p)
%GFPRIMFD Searches primitive polynomials with a given polynomial degree.
% PR = GFPRIMFD(M) finds one primitive polynomial with a given degree M.
% in GF(2).
%
% PR = GFPRIMFD(M, FD_FLAG) finds primitive polynomial(s) with a given
% degree M and flag FD_FLAG.
% FD_FLAG = 'min' find primitive polynomial with minimum degree.
% FD_FLAG = 'max' find primitive polynomial with maximum degree.
% FD_FLAG = 'all' do an exhausting search to find all primitive
% polynomials of the given degree.
% FD_FLAG = N find all primitive polynomials with N terms.
%
% If PR is an empty output, no primitive polynomial was found
% provided the given condition.
%
% PR = GFPRIMFD(M, FD_FLAG, P) finds primitive polynomial(s) in GF(P).
%
% See also HAMMGEN, GFTUPLE, GFPRIMCK.
% Wes Wang 7/26/94, 10/7/95
% Copyright (c) 1995-96 by The MathWorks, Inc.
% $Revision: 1.1 $ $Date: 1996/04/01 17:59:33 $
if nargin < 3
p = 2;
end;
nn = p^m - 1;
if m < 0
error('GF(p) polynomail cannot be less than zero');
elseif m == 0
pr = 1;
elseif m == 1
pr = [1 1];
elseif m >= 2
if nargin < 2
% find one result and return
for i = 1 : nn
% try all of possibility
test_bed = [de2bi(i, m, p), 1];
if test_bed(1) ~= 0
if gfprimck(test_bed, p) == 1
pr = [pr; test_bed];
return;
end;
end;
end;
elseif isstr(fd_flag)
fd_flag = lower(fd_flag);
if fd_flag(1:2) == 'mi'
% minimum term
for j = 3 : m + 1
for i = 1 : nn
% try all of possibility
test_bed = [de2bi(i, m, p), 1];
if test_bed(1) ~= 0
if sum(test_bed ~= 0) == j
if gfprimck(test_bed, p) == 1
pr = test_bed;
return;
end;
end;
end;
end;
end
elseif fd_flag(1:2) == 'ma'
% maximum term
for j = m+1 : -1 : 3
for i = 1 : nn
% try all of possibility
test_bed = [de2bi(i, m, p), 1];
if test_bed(1) ~= 0
if sum(test_bed ~= 0) == j
if gfprimck(test_bed) == 1
pr = test_bed;
return
end;
end;
end;
end;
end
else
for i = 1 : nn
% exhaust search
test_bed = [de2bi(i, m, p), 1];
if test_bed(1) ~= 0
if gfprimck(test_bed, p) == 1
pr = [pr; test_bed];
end;
end;
end;
%sort based on the minimum number of terms
[x, i] = sort(sum(pr' ~= 0));
pr = pr(i, :);
end;
else
% fd_flag is a number
for i = 1 : nn
% try all of possibility
test_bed = [de2bi(i, m, p), 1];
if test_bed(1) ~= 0
if sum(test_bed ~= 0) == fd_flag
if gfprimck(test_bed) == 1
pr = [pr; test_bed];
end;
end;
end;
end;
end;
end;
if isempty(pr)
disp('No primitive polynomial has been found provided the given constrain');
end;
%--end of GFPRIMFD--
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -