⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gfprimfd.m

📁 数字通信第四版原书的例程
💻 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 + -