资源简介
这个是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
评论
共有 条评论