ldpc.m

来自「ldpc译码器 目前通信系统中很多标准都在采用ldpc码」· M 代码 · 共 44 行

M
44
字号
H = [0 1 0 0 1 0 1 0 0 0 0 0 0 0 1 0 1 0 1 0;
     1 0 1 0 0 0 0 1 1 0 0 1 0 0 0 0 0 1 0 0;
     0 0 0 1 0 1 0 0 0 1 0 0 0 1 1 0 0 1 0 0;
     0 0 0 0 0 1 0 1 0 0 1 0 1 0 0 0 1 0 0 1;
     0 0 0 1 0 0 0 1 0 0 1 1 0 1 1 0 0 0 0 0;
     0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 0 1 1 0;
     0 1 0 1 1 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0;
     0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1;
     1 1 0 0 0 0 0 0 0 0 1 0 1 0 0 1 0 0 0 1;
     1 0 0 0 0 0 1 0 1 1 0 0 0 1 0 1 0 0 0 0];
 
[rowH, colH] = size(H);
iteration_number = 10;


block = 1;
x = randint(10*block,1,2);
coded_msg = x'*H;

coded_msg = 2*coded_msg-1;

deviation = 1/(10^(snr/10));
code_noise = coded_msg+sqrt(deviation)*randn(length(coded_msg),1);

msg_ctov = zeros(rowH, 6);
msg_vtoc = zeros(colH, 3);
 
for i = 1:iteration_number
    % Calculate LLR message past from v nodes to c nodes
    for v_node = 1: colH
        edge_of_v = edge_set_of_v(v_node, H);  % find the c nodes connected to current v node
        for c_node = 1:3   % each v node connects to 3 c nodes
            msg_vtoc(v_node,c_node) = init_msg(v_node); % initialize
            for k = 1:3
                if k ~= c_node
                    index = find(edge_set_of_c(edge_of_v(k),H) == v_node);
                    msg_vtoc(v_node,c_node) = msg_vtoc(v_node,c_node) + msg_ctov(edge_of_v(k),index);
                end
            end
            alpha_msg_vtoc(v_node,c_node) = sign(msg_vtoc(v_node,c_node))*(log(1+exp(-abs(msg_vtoc(v_node,c_node))))-log(1-exp(-abs(msg_vtoc(v_node,c_node)))));
        end
    end
    
            

⌨️ 快捷键说明

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