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

📄 simrscbv.m

📁 数字通信第四版原书的例程
💻 M
字号:
function [sys, x0, str, ts] = simrscbv(t, x, u, flag, n, k, pg, tp, dim);
%SIMRSCBV SIMULINK S-function for Reed-Solomon code, binary vector version
%       This file is designed to be used in a SIMULINK S-Function block.
%       This function will encode the k*dim input binary vector to a n*m
%       binary code word.
%       Parameters: n -- length of code word.
%                   k -- length of message.
%                   pg-- generator polynomial
%                   tp-- list of all GF(2^M) elements. n=2^M-1.
%                   dim -- M.
%
%       The output has length n.

%       Wes Wang
%       Copyright (c) 1995-96 by The MathWorks, Inc.

if (flag == 3)
    % refresh the state only when there is a trigger signal
    len_u = length(u);
    if u(len_u)
        % main calculation
        t2 = n - k;
        pgg = fliplr(pg(1:length(pg)-1));       % pg is a monic polynomial
        msg = bi2de(vec2mat(u(1 : len_u-1), dim)) - 1;
        msg = [flipud(msg); -ones(t2,1)];
        sz = (len_u - 1) /dim;
        for main_j = 1 : sz
            if msg(main_j)>= 0
                for main_k = 1: t2
                    msg(main_j + main_k) = gfadd(msg(main_j + main_k), gfmul(msg(main_j), pgg(main_k), tp), tp);
                end;
            end;
        end;
        sys = [flipud(msg(sz+1:n))+1];
        indx = find(~(sys >= 0));
        sys(indx) = indx - indx;
        sys = de2bi(sys, dim)';
        sys = sys(:);
        sys = [sys; u(1:len_u - 1)];
%        disp(['should output ', num2str(n * dim), ' it is now ', num2str(length(sys))])
    else
        % if there is no trigger, no calculation.
        if t <= 0
            sys = zeros(n * dim, 1);
        end;
    end;
elseif flag == 0
    if 2^dim-1 ~= n
        error('Ree-Solomon encode has illegal code word length')
    end;
    sys(1) = 0; % no continuous state
    sys(2) = 0;
    sys(3) = n * dim;   % number of output, code word length plus one.
    sys(4) = k * dim + 1;       % number of input, message length.
    sys(5) = 0;
    sys(6) = 1;       % direct through flag.
    sys(7) = 1;       % one sample rate
    x0 = [];
    ts = [-1, 0];
else
    sys = [];
end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -