一種無速率Spinal碼的前向堆棧譯碼方法
【技術領域】
[0001]本發(fā)明屬于通信技術領域,具體涉及一種無速率Spinal碼的前向堆棧譯碼方法。
【背景技術】
[0002]無線網(wǎng)絡通信的主要問題就是在時變信道的噪聲、干擾和衰落的影響下找到一種高吞吐量的傳輸協(xié)議。一種理想的解決方法就是使用無速率編碼,不限制發(fā)送端發(fā)送信息數(shù)量,而是根據(jù)信道狀況進行調(diào)整。Spinal碼是一種在時變信道無線網(wǎng)絡中適用的無速率編碼。Spinal碼的核心是對輸入消息比特連續(xù)使用偽隨機哈希函數(shù)結合星座映射函數(shù)來產(chǎn)生傳輸符號消息。Spinal碼是一種逼近香農(nóng)容量限適于無線通信系統(tǒng)的好碼。
[0003]現(xiàn)有的Spinal碼譯碼方法為Bubble譯碼,該算法基于樹搜索的最大似然譯碼方案。最大似然譯碼器從編碼器初始hash狀態(tài)所代表的根節(jié)點開始擴展譯碼樹,遍歷每個節(jié)點的所有輸入,獲得該節(jié)點的所有子節(jié)點,在搜索到樹的所有葉子節(jié)點之后,能夠得到最優(yōu)路徑。Bubble譯碼方法不搜索樹的所有節(jié)點,在每一層搜索結束后,只保留最優(yōu)的B個節(jié)點作為下一層搜索的母節(jié)點,因此,Bubble譯碼方案只搜索部分節(jié)點,擴展的樹也只是部分樹。但是,Spinal碼的每一個節(jié)點的子節(jié)點數(shù)目較大,而Bubble譯碼方案中,每一層需要保留固定長度的節(jié)點,因此,該譯碼方案的計算復雜度很大,是一個隨著信息位長度和信息分段長度增加而急劇增大的常數(shù)。
【發(fā)明內(nèi)容】
[0004]本發(fā)明所要解決的技術問題在于針對上述現(xiàn)有技術中的不足,提供一種無速率Spinal碼的前向堆棧譯碼方法,其進行無速率Spinal碼的譯碼的計算量小,性能良好,應用范圍廣,實用性強,便于推廣使用。
[0005]為解決上述技術問題,本發(fā)明采用的技術方案是:一種無速率Spinal碼的前向堆棧譯碼方法,其特征在于該方法包括以下步驟:
[0006]一種無速率Spinal碼的前向堆棧譯碼方法,其特征在于該方法包括以下步驟:
[0007]步驟一、設置譯碼器參數(shù):設置碼樹的總層數(shù)M、搜索單元大小D、每單元搜索完成后所得到的最大路徑數(shù)目B、在一個搜索單元中搜索時的最大擴展路徑數(shù)Clim和搜索層指數(shù)i,其中,M = n/k,n為無速率Spinal碼的信息序列的長度,k為將無速率Spinal碼的信息位分段后每段的信息序列的長度,D為能整除M的正整數(shù),i的初始值為O ;
[0008]步驟二、初始化搜索堆棧C_stack和保留路徑堆棧B_stack,令譯碼器的初始hash狀態(tài)與編碼器的hash狀態(tài)相同,將譯碼器的初始hash狀態(tài)作為初始擴展節(jié)點壓入保留路徑堆棧B_stack,并將初始路徑可靠度置為0,將初始擴展節(jié)點的層數(shù)置為O ;
[0009]步驟三、比較iD與n/k的大小,當iD〈n/k時,將i增加I,執(zhí)行步驟四;當iD彡n/k時,執(zhí)行步驟九;
[0010]步驟四、清空搜索堆棧C_stack,并將保留路徑堆棧B_stack中的節(jié)點按可靠度大小順序壓入搜索堆棧C_stack,使得搜索堆棧C_stack中的節(jié)點按可靠度大小由棧頂向下降序排列,之后清空保留路徑堆棧B_stack ;
[0011]步驟五、擴展搜索堆棧C_stack的棧頂節(jié)點,遍歷所有的可能輸入,由子節(jié)點的路徑編碼序列和已有的信道觀測值計算子節(jié)點的可靠度;刪除被擴展過的棧頂節(jié)點,并將所有獲得的子節(jié)點壓入搜索堆棧C_stack ;在擴展搜索堆棧C_stack的棧頂節(jié)點的過程中,當搜索堆棧C_stack的大小等于在一個搜索單元中搜索時的最大擴展路徑數(shù)Clim時,終止擴展過程,執(zhí)行步驟八;
[0012]步驟六、對搜索堆棧C_stack中的節(jié)點按照可靠度大小由棧頂向下降序排序,當搜索堆棧C_stack的棧頂節(jié)點的層數(shù)小于iD時,返回步驟五繼續(xù)擴展搜索堆棧C_stack的棧頂節(jié)點;當搜索堆棧C_stack的棧頂節(jié)點的層數(shù)等于iD時,執(zhí)行步驟七;
[0013]步驟七、將搜索堆棧C_stack的棧頂節(jié)點壓入保留路徑堆棧B_stack,同時遍歷搜索堆棧C_stack至將除棧頂節(jié)點以外的可靠度依次從大到小排列的前B-1個層數(shù)為iD的節(jié)點,按可靠度從大到小的順序依次壓入保留路徑堆棧B_stack后停止,之后返回步驟三;當除棧頂節(jié)點以外的層數(shù)為iD的節(jié)點數(shù)目小于B-1時,遍歷搜索堆棧C_stack,將所有層數(shù)為iD的節(jié)點壓入保留路徑堆棧B_stack之后停止,之后返回步驟三;
[0014]步驟八、遍歷搜索堆棧C_stack至將搜索堆棧C_stack中可靠度依次從大到小排列的前B個層數(shù)為iD的節(jié)點,按可靠度大小順序依次壓入保留路徑堆棧B_stack后停止,之后返回步驟三;當層數(shù)為iD的節(jié)點數(shù)目大于O且小于B時,遍歷搜索堆棧C_stack,將所有層數(shù)為iD的節(jié)點壓入保留路徑堆棧B_stack之后停止,之后返回步驟三;當層數(shù)為iD的節(jié)點不存在時,執(zhí)行步驟十;
[0015]步驟九、將保留路徑堆棧B_stack中可靠度最大的節(jié)點的信息比特輸入作為譯碼結果輸出;
[0016]步驟十、終止譯碼過程、輸出譯碼錯誤,等待新的接收信息。
[0017]上述的一種無速率Spinal碼的前向堆棧譯碼方法,其特征在于:步驟五中由子節(jié)點的路徑編碼序列和已有的信道觀測值計算子節(jié)點的可靠度依據(jù)的計算公式為L(Zt)=L (Z0)+1gP (yt|xt (Zt)),其中,Zci為可靠度為L(Zci)的母節(jié)點,Zt為母節(jié)點Zci的一個子節(jié)點,L(Zt)為子節(jié)點Zt的可靠度,Xt(Zt)為由母節(jié)點Ztl轉(zhuǎn)移至子節(jié)點Z t的路徑編碼序列,y ,為已有的信道觀測值,P (yt I xt (Zt))為當信道輸入為xt (Zt)、輸出為yt時的信道轉(zhuǎn)移概率。
[0018]本發(fā)明與現(xiàn)有技術相比具有以下優(yōu)點:
[0019]1、本發(fā)明針對現(xiàn)有無速率Spinal碼的譯碼方法復雜度過高的不足而提出,在不改變無速率Spinal碼的速率性能的前提下,極大地減小了譯碼算法的計算量。
[0020]2、本發(fā)明設計了一種近似最大似然譯碼算法,根據(jù)無速率Spinal碼的編碼有序性、隨機性,遍歷最小的可能碼樹找到最優(yōu)路徑,譯碼方法核心是進行分段的樹搜索,基于堆棧譯碼,找到最優(yōu)路徑,性能良好。
[0021]3、本發(fā)明不僅適用于長度較短的碼字,對較長碼字仍然適用,適用于不同信道條件下的無速率Spinal碼的譯碼,可用于無線網(wǎng)絡通信中對抗復雜時變信道,實用性強,便于推廣使用。
[0022]綜上所述,本發(fā)明進行無速率Spinal碼的譯碼的計算量小,性能良好,應用范圍廣,實用性強,便于推廣使用。
[0023]下面通過附圖和實施例,對本發(fā)明的技術方案做進一步的詳細描述。
【附圖說明】
[0024]圖1為本發(fā)明的方法流程框圖。
【具體實施方式】
[0025]如圖1所示,本發(fā)明包的無速率Spinal碼的前向堆棧譯碼方法,包括以下步驟:
[0026]步驟一、設置譯碼器參數(shù):設置碼樹的總層數(shù)M、搜索單元大小D、每單元搜索完成后所得到的最大路徑數(shù)目B、在一個搜索單元中搜索時的最大擴展路徑數(shù)Clim和搜索層指數(shù)i,其中,M = n/k,η為無速率Spinal碼的信息序列的長度,k為將無速率Spinal碼的信息位分段后每段的信息序列的長度,D為能整除M的正整數(shù),i的初始值為O ;
[0027]步驟二、初始化搜索堆棧C_stack和保留路徑堆棧B_stack,令譯碼器的初始hash狀態(tài)與編碼器的hash狀態(tài)相同,將譯碼器的初始hash狀態(tài)作為初始擴展節(jié)點壓入保留路徑堆棧B_stack,并將初始路徑可靠度置為0,將初始擴展節(jié)點的層數(shù)置為O ;
[0028]步驟三、比較iD與n/k的大小,當iD〈n/k時,將i增加I,執(zhí)行步驟四;當iD彡n/k時,執(zhí)行步驟九;
[0029]步驟四、清空搜索堆棧C_stack,并將保留路徑堆棧B_stack中的節(jié)點按可靠度大小順序壓入搜索堆棧C_stack,使得搜索堆棧C_stack中的節(jié)點按可靠度大小由棧頂向下降序排列,之后清空保留路徑堆棧B_stack ;
[0030]步驟五、擴展搜索堆棧C_stack的棧頂節(jié)點,遍歷所有的可能輸入,由子節(jié)點的路徑編碼序列和已有的信道觀測值計算子節(jié)點的可靠度;刪除被擴展過的棧頂節(jié)點,并將所有