資源簡介
這個是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
評論
共有 條評論