• 大小: 4KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-18
  • 语言: Matlab
  • 标签:

资源简介

这个是LT码的MATLAB实现,作者把代码写的比较清楚,每个参数都有注释,很容易理解

资源截图

代码片段和文件信息

function    output_data = LT_decode_(input_dataG_matrixlength_info)
% *************************************************************************
% Programmer: chenjia
% Date: 11/09/2010
% Function file: LT_decode.m
% Description: 完成对LT码的译码过程
% input parameters:
%   input_data: 
%               待译码的符号序列,1*N的向量
%   G_matrix:
%               LT码的编码生成矩阵
%   length_info:
%               信源比特信息的长度
% output parameters:
%   output_data:
%               译码输出的比特序列
% usage:
%       output_data = LT_decode_(input_dataG_matrixlength_info)
% *************************************************************************

% =========================== 初始化处理 ===================================
length_input = length(input_data);        % 输入数据的长度,即待译码数据的长度
length_output = length_info;              % 译码输出长度,即原始信息的长度,length((LT_gener_matrix(:1))‘);
% --------------------------
% 定义四个数组
temp_decode = zeros(1length_info);       % 记录比特节点的当前值
temp_check = zeros(1length_input);       % 记录校验节点的当前值
che2bit_info = zeros(1length_info);      % 校验节点传递给父节点的信息
bit2che_info = zeros(1length_input);     % 比特节点传递给子节点的信息
% ---------------------------
temp_check = input_data;                   % 初始化校验节点信息
trans_matrix = G_matrix;            % 初始化信息传递矩阵,记录每次更新后的tanner图
% =========================================================================

% ============================= 度操作 ====================================
% -----------------------------------
% 计算出每个编码符号(校验节点)的度数
for i = 1:length_input                    % 初始化校验节点的分配度数
    degree_checkbit(i) = length(find(trans_matrix(:i)));
end;        % 找出生成矩阵中每一列的非零元素的个数,即为这一列对应的校验符号的度
% ------------------------------------
locate_degree1 = [];        % 用于存储度为1的校验符号索引值
j = 1;        % locate_degree1矩阵的索引指示
% ----------------------------------
% 统计度为1的校验节点,并记录其位置
for i = 1:length_input
    if degree_checkbit(i) == 1              % 校验节点i的度为1
        locate_degree1(j) = i;              % 记录度数为1的校验节点位置
        j = j+1;
    end;    
end;            % 得知哪些校验节点的度为1,并将它们存在locate_degree1中
% ------------------------------------
% =========================================================================

% ============================== 译码 =====================================
% 具体的译码过程
% ---------------------------------------------
if length(locate_degree1) == 0            % 若无度数为1的校验节点,则译码失败
    output_data = zeros(1length_output); % 译码失败,输出全0
    return;      % 返回到函数的开始,重新触发函数
% ---------------------------------------------    
else
    while (locate_degree1 ~= 0)           % 存在度为1的编码符号
        % -----------------------------------------------------
        % 找出度为1的校验节点所对应的信源符号,并将与它相连的编码符号的值赋给它
        % 赋值:sj<=ti
        for i = 1:length(locate_degree1)      % 针对度数为1的校验节点
            temp_vect_check(i) = find(trans_matrix(:locate_degree1(i)));          % 找到度为1的校验节点对应的行标即找到与这个校验节点相连的信源数据包
                % temp_vect_check: 存储与locate_degree1中度为1的校验节点所对应相连的信源数据包的索引值
      

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       6077  2012-02-14 14:47  LT_decode_.m

     文件       7626  2012-02-14 14:45  LT_encode_.m

----------- ---------  ---------- -----  ----

                13703                    2


评论

共有 条评论

相关资源