基于Matlab的LDPC码性能研究毕业设计(含源文件)
歡迎添加微信互相交流學(xué)習(xí)哦!
項目源碼:https://gitee.com/oklongmm/biye
?
本科畢業(yè)設(shè)計(論文)
題
目?? ?LDPC碼性能研究
摘 要
?? ?信道編碼是數(shù)字通信系統(tǒng)的重要組成部分。LDPC信道編碼技術(shù)是編碼界的重要成果之一。1/2碼率的二元LDPC碼在AWGN信道下的性能距信息理論中的Shannon極限僅差0.0045dB,它是目前距Shannon極限最近的糾錯碼。Gallagar在1962年提出LDPC碼,1996年經(jīng)過Mackey、Spielman和Wiberg等人的再發(fā)現(xiàn)后,LDPC碼以其性能優(yōu)越、全并行迭代譯碼結(jié)構(gòu)、便于硬件實現(xiàn)等優(yōu)點,在無線通信、存儲工業(yè)等領(lǐng)域得到了廣泛應(yīng)用。
?? ?校驗矩陣的構(gòu)造是編碼的前提,本文采用了隨機構(gòu)造法構(gòu)造,并對矩陣的多種變換方法進行分析,比較了優(yōu)缺點。譯碼算法是LDPC碼的關(guān)鍵,譯碼復(fù)雜度的大小直接影響系統(tǒng)的實現(xiàn)。主要分硬判決譯碼、軟判決和復(fù)合譯碼。設(shè)計中采用的譯碼方式是軟判決譯碼。
?? ?在性能分析方面,利用matlab仿真碼長、列重和迭代次數(shù)對LDPC碼性能的影響。仿真結(jié)果表明,在一定范圍內(nèi),LDPC碼長碼的誤碼性能優(yōu)于短碼;碼長較小時,列重的增加會使性能變差,而對于長碼,列重在一定范圍內(nèi)的增大會改善LDPC的誤碼性能;增加迭代次數(shù)會使誤碼率降低,但當(dāng)?shù)螖?shù)大到一定值時,誤碼率將不會再隨著迭代次數(shù)的增加而降低。
關(guān)鍵詞 LDPC碼 信道編碼 矩陣變換 性能分析 ?
Abstract
?? ?Channel coding is an important component for digital communication systems. LDPC channel coding technology is one important achievement of the encoding results. The performance of half of the binary bit-rate LDPC codes in AWGN channel only has a tap of 0.0045dB to the Shannon Limit that makes it be the latest error-correcting codes from the Shannon Limit. Gallager proposed LDPC codes in 1962, after Mackey and others re-discovered it in 1996, with best performance, completely decoding algorithm in parallel scheme and easily realized for hardware design, LDPC codes has already been widely used in many practical systems such as wireless communication system and storage system.
?? ?The construction of the Check matrix is a precondition for coding; the randomized method was used in this paper. Several ways to transform the matrix was discussed and being compared about the merits of each method. The decoding algorithm is the key to LDPC code and the complexity of decoding direct impact realization of the system. There are three kinds of decoding algorithms: hard-decision method, soft-decision methods and hybrid decoding. The hard-decision method was used in this design.
Based on studying the basic theory of LDPC codes, the impact of codes length, column weight and iteration times on BER performance of LDPC codes are demonstrated by computer simulation and theoretical analysis. The simulation experiment indicated that: LDPC codes long-code error performance is superior to short-code error performance, but when the code length reaches a certain value, and then increase the code length, BER of LDPC codes lower rate will be small. When the code length is small, increasing the column weight, LDPC codes performance will deteriorate; when code length is large enough, increasing the column weight, LDPC codes performance will be improved, but when the column weight reaches a certain value, as set out priority to increasing the performance of LDPC codes will be worse. To increase the number of decoding iterations, LDPC codes performance will be improved; but when the number of iterations is large enough, then increase the number of iterations, LDPC codes will no longer reduce the error rate.
key words?? ?LDPC codes?? ?channel coding?? ?matrix transformation?? ?performance analysis?? ?
?
目 錄
摘 要?? ?I
ABSTRACT?? ?II
第1章 緒論?? ?1
1.1 數(shù)字通信系統(tǒng)?? ?1
1.2 信道編碼理論及其發(fā)展?? ?2
1.3 低密度奇偶校驗碼的提出、發(fā)展和現(xiàn)狀?? ?4
第2章 預(yù)備知識?? ?7
2.1 線性分組碼?? ?7
2.2 信道容量和香農(nóng)極限?? ?12
第3章 LDPC碼表示及編碼?? ?14
3.1 LDPC碼的定義及其TANNER圖表示?? ?14
3.1.1 LDPC碼的定義及其描述?? ?14
3.1.2 LDPC碼的Tanner圖表示?? ?15
3.2 二進制LDPC碼的編碼原理?? ?16
3.2.1 H矩陣的構(gòu)造?? ?16
3.2.2 ?LDPC碼的編碼思想?? ?17
第4章 LDPC碼的譯碼思想?? ?22
4.1 軟判決譯碼算法?? ?22
4.1.1 Tanner圖解析法原理?? ?22
4.1.2 SPA算法原理?? ?24
4.1.3 對數(shù)域BP譯碼算法?? ?27
4.1.4 最小和(Min-Sum)譯碼算法(改進的對數(shù)域BP譯碼算法)?? ?28
4.2硬判決譯碼算法?? ?29
4.2.1 Gallager的比特反轉(zhuǎn)譯碼算法?? ?29
4.2.2 改進的比特反轉(zhuǎn)譯碼算法?? ?30
4.3 優(yōu)化的基于加權(quán)錯誤校驗的LDPC比特反轉(zhuǎn)算法(IWVBF)?? ?31
第5章 程序流程分析?? ?33
5.1 主程序?? ?33
5.2 H矩陣生成?? ?34
5.3 編碼過程?? ?35
5.4 譯碼過程?? ?36
第6章 LDPC碼的性能分析?? ?37
6.1 碼長對LDPC碼性能的影響?? ?37
6.2 列重對LDPC碼性能的影響?? ?37
6.3 迭代次數(shù)對LDPC碼性能的影響?? ?38
6.4 H矩陣變換方法對性能的影響?? ?39
總結(jié)與展望?? ?43
參考文獻?? ?44
致 謝?? ?45
附 錄?? ?46
?
第1章 緒論
本章簡要介紹了數(shù)字通信系統(tǒng),并對系統(tǒng)中的每一部分進行了功能性說明,介紹了信道編碼理論及其發(fā)展歷程,最后概述了低密度奇偶校驗碼的提出、發(fā)展和現(xiàn)狀。
1.1 數(shù)字通信系統(tǒng)
通信系統(tǒng)的基本目的在于將信息由信源高效、可靠、安全地傳送到信宿。在信息傳輸?shù)倪^程中,信道中的噪聲會不可避免地對傳輸信息產(chǎn)生干擾,從而導(dǎo)致了可靠性的降低。所以,通信系統(tǒng)設(shè)計的核心問題在于如何克服信道中隨機噪聲對信號的干擾,減小信息傳輸產(chǎn)生的差錯,同時在最大程度上保證信息傳輸?shù)男?#xff0c;即如何解決系統(tǒng)有效性和可靠性的矛盾。一般地,通信系統(tǒng)的可靠性用誤比特率(BER)來衡量,其有效性則用信息傳輸速率R比特/信道符號來衡量。早期的人們普遍認(rèn)為:通信系統(tǒng)的可靠性與有效性之間存在不可調(diào)和的矛盾,一方的改善總是以犧牲另一方為代價,并指出當(dāng)功率受限時,在有擾通信信道上實現(xiàn)任意小錯誤概率的信息傳輸?shù)奈ㄒ煌緩骄褪前研畔鬏斔俾式档椭亮恪hannon信息和編碼理論的奠基性論文“通信的數(shù)學(xué)理論”于1948年發(fā)表之后,改變了這一觀點。他首次闡明了在有擾信道上實現(xiàn)可靠通信的方法,指出實現(xiàn)有效而可靠地信息傳輸?shù)耐緩骄褪峭ㄟ^編碼。根據(jù)Shannon的信息理論,數(shù)字通信系統(tǒng)的基本組成如圖1.1所示:
?
圖1.1 數(shù)字通信系統(tǒng)的基本組成
圖中,信源的作用為產(chǎn)生需要傳送的信息,信息可以是模擬信號也可以是數(shù)字信號。如果是模擬信號,在進入數(shù)字通信系統(tǒng)之前需要進行采樣和量化處理。
信源編碼器的主要作用是將信源發(fā)出的信息,例如語音、圖像或者是文字等原始的數(shù)據(jù)進行轉(zhuǎn)化,在保證通信質(zhì)量的前提下,盡可能的通過對信號的壓縮,提高通信系統(tǒng)的有效性。以更少的符號來表示原始信息,使信息能夠更好的在傳輸媒介中進行傳輸。
信道編碼是在發(fā)送器和接收器之間實現(xiàn)信號可靠傳輸?shù)谋匾侄沃弧鬏斝诺乐写嬖诘脑肼暠厝粫鬏數(shù)男畔⒁胧д婧托盘柵袥Q錯誤,因此需要采用差錯控制碼來檢測和糾正這些比特錯誤。信道編碼器的主要作用是通過對信源編碼后的信息加入冗余信息,使得接收方在收到信號后,可以通過信道編碼中的冗余信息進行前向糾錯,以保證通信系統(tǒng)的可靠性。
數(shù)字調(diào)制器的作用是使信息變成能夠適應(yīng)信道傳輸?shù)男盘枴P盘柦?jīng)過調(diào)制器后進入物理信道進行傳輸。典型的物理信道包括有線信道、無線信道、光纖信道、衛(wèi)星信道等,針對不同的信道設(shè)計通信系統(tǒng)時要有不同的考慮,如無線信道會收到多徑的影響而產(chǎn)生衰落,而衛(wèi)星信道會受到信號功率衰減的影響等。
信號到達接收端后,通過數(shù)字解調(diào)器對接收到的調(diào)制信號序列或傳輸碼字進行最優(yōu)估計,然后輸出數(shù)字編碼序列送到信道譯碼器。信道譯碼器對信息進行估計和判決,估計準(zhǔn)則是根據(jù)編碼準(zhǔn)則和信道特性而確定的,目的是最小化信道噪聲的影響。最后信源譯碼器根據(jù)信源編碼準(zhǔn)則將得到的信道編碼器輸出的編碼信息序列經(jīng)過相應(yīng)的信源譯碼后,得到對原始信息序列的估計。
1.2 信道編碼理論及其發(fā)展
圖1.1中的信道編譯碼部分是以特定的控制手段,引入適量冗余比特,以克服信息在傳輸過程中受到的噪聲和干擾影響。根據(jù)Shannon提出的信道編碼定理,對任意一個平穩(wěn)離散無記憶有噪聲信源,都有一個固定的量,稱之為信道容量,記做C。只要信息的傳輸速率低于信道容量,就必然存在一種編碼方法,使得信息出現(xiàn)差錯的概率隨碼長的增加趨于任意小;反之,當(dāng)信息傳輸速率超過信道容量時,則不存在這樣的編碼方法。這就是著名的信道編碼定理,它給出了特定信道上信息傳輸速率的上確界。
信道編碼定理:任意離散輸入無記憶平穩(wěn)信道存在信道容量,對預(yù)期的任一數(shù)據(jù)速率和任一錯誤概率,有可能設(shè)計一對編譯碼器,以保證該信道中速率為R的數(shù)據(jù)傳輸具有小于p的譯碼錯誤概率。
信道編碼定理指出,在有擾信道中,只要信息傳輸速率小于信道容量,就有可能實現(xiàn)任意可靠的信息傳輸。這個存在性定理提醒我們可以實現(xiàn)以接近信道容量的傳輸速率進行通信。但遺憾的是該定理采用的是非構(gòu)造性的證明方法,其中并沒有給出逼近信道容量的碼的具體編譯碼方法。
Shannon在信道編碼定理的證明中引用了三個基本條件,即:
(1)、采用隨機的編碼方式;
(2)、碼字長度趨近于無窮大;
(3)、譯碼采用最佳的最大似然譯碼。
一般可將信道編譯碼器所使用的糾錯碼從性能上分為壞碼和好碼。所謂壞碼是指只有將碼率降至零才能使誤碼率為任意小的編碼方式;而好碼又可以分為當(dāng)誤碼率任意小時,碼率逼近信道容量限的非常好碼和碼率可達到的非零最大值小于信道容量限的一般好碼。雖然Shannon指出一個隨機選擇的碼以很高的概率為好碼,但隨機碼的最大似然譯碼的復(fù)雜度往往與碼長呈指數(shù)關(guān)系,即在誤碼率隨碼長趨于無窮而趨向于零的同時,譯碼復(fù)雜度以指數(shù)增長,而在實際應(yīng)用中,只能夠使用以碼長多項式的時間和空間復(fù)雜度內(nèi)完成編譯碼的糾錯碼,因而盡管一般的隨機碼是好碼,但不能看作是實用碼。
自信道編碼定理提出以來,如何構(gòu)造一個逼近信道容量限的實用好碼成了眾多研究學(xué)者竟相研究的課題,并逐漸形成信息論的一個重要分支——信道編碼理論。五十多年來,人們構(gòu)造實用好碼的探索基本上是按照Shannon所引用的基本條件的后兩條為主線展開的。雖然從理論上講,除了目前已知的碼外,幾乎所有的碼都是好碼,但到目前為止,構(gòu)造出真正意義上的實用好碼還有較長的距離。雖然如此,通過眾多學(xué)者,特別是有關(guān)數(shù)學(xué)和信息論學(xué)術(shù)界的研究人員五十多年的共同努力,目前已經(jīng)取得了很多成果。下面對其進行簡要概述。
糾錯碼從構(gòu)造方法上可分為分組碼(Block Codes)和卷積碼(Convolutional Codes)兩大部分。在分組碼方面,第一個分組碼是1950年發(fā)現(xiàn)的能糾正單個錯誤的Hamming碼;在整個50年代,基于代數(shù)理論又發(fā)現(xiàn)了多個短碼長的分組碼,如1954年Golay發(fā)現(xiàn)的Golay碼以及Reed和Muller發(fā)現(xiàn)的RM碼,Prange在1957年發(fā)現(xiàn)的循環(huán)碼等。最有意義的是Bose和Ray-Chaudhuri在1960年及Hocuenghem在1959年分別獨立發(fā)現(xiàn)的能糾正多個錯誤的BCH碼,以及Reed和Solomon在1960發(fā)現(xiàn)的非二進制RS碼。實際上,BCH碼可以看作是某個RS碼的子域子碼,而RS碼又可以看作是BCH碼的特例。其后發(fā)現(xiàn)的分組碼主要有1970年的Goppa碼和1982年發(fā)現(xiàn)的代數(shù)幾何碼。在所有這些分組碼中,除了Goppa碼和代數(shù)幾何碼中存在個別達到GV限的漸進好碼外,其它均不是好碼。分組碼的譯碼主要采用基于代數(shù)的硬判決譯碼。
卷積碼最早由Elias提出,早期被稱為樹碼(Tree Codes),現(xiàn)在稱為格圖碼(Trellis Codes)或卷積碼。卷積碼具有動態(tài)格圖結(jié)構(gòu),可用有限狀態(tài)機來描述其狀態(tài)。由于缺乏有效的理論研究工具,對卷積碼的有效研究成果不是很多,目前性能好的卷積碼的構(gòu)造方法主要借助于計算機搜索來獲得。卷積碼的譯碼一般采用概率譯碼,由于譯碼算法的簡單、實用和易于實現(xiàn),卷積碼被廣泛應(yīng)用于實際中。
1966年,Forney將分組碼和卷積碼結(jié)合起來,提出了級聯(lián)碼(Concatenated Codes)的概念。級聯(lián)碼一般采用RS碼作為外碼,卷積碼作為內(nèi)碼。Forney的研究表明,級聯(lián)碼在性能得到較大改善的情況下,其譯碼復(fù)雜度并不顯著增加。
根據(jù)對接收信號處理方式的不同,糾錯碼的譯碼可以分為硬判決譯碼和軟判決譯碼。硬判決譯碼是基于傳統(tǒng)糾錯碼觀點的譯碼方法,解調(diào)器首先對信道輸出值進行最佳硬判決,再將判決結(jié)果送入譯碼器,譯碼器根據(jù)解調(diào)器的判決結(jié)果,利用碼字的代數(shù)結(jié)構(gòu)來糾正其中的錯誤。而軟判決譯碼則充分利用了信道輸出的波形信息,解調(diào)器將匹配濾波器輸出的一個實數(shù)值送入譯碼器,由于實數(shù)值包含了比硬判決更多的信道信息,譯碼器能夠通過概率譯碼充分利用這些信息,從而獲得比硬判決譯碼更大的編碼增益。
總之,盡管隨機碼是理論上的好碼,但由于其編碼實現(xiàn)的困難性和無法承受的譯碼復(fù)雜度而只被用做理論分析的工具,在信道編碼定理和后來的許多編碼理論成果中,代數(shù)編碼理論始終占據(jù)了主導(dǎo)地位,使得傳統(tǒng)的信道編碼技術(shù)受到臨界速率(Critical Rate),也稱做截止速率(Cutoff Rate)的限制。
1993年Turbo碼的提出被看作是信道編碼理論研究的重要里程碑。Berrou等人將卷積碼和隨機交織器相結(jié)合,同時采用軟輸出迭代譯碼來逼近最大似然譯碼,取得了超乎尋常的優(yōu)異性能,并一舉超越了截止速率,直接逼近Shannon提出的信道容量限。Turbo碼是一種信道編碼理論界夢寐以求的可實用非常好碼,它的出現(xiàn)標(biāo)志著信道編碼理論研究進入了一個嶄新的階段。Turbo碼成功的根本原因在于其實現(xiàn)方案中長碼構(gòu)造的偽隨機性是核心,它通過隨機交織器對信息序列的偽隨機置換實現(xiàn)了隨機編碼的思想,從而為Shannon隨機編碼理論的應(yīng)用研究奠定了基礎(chǔ)。
隨著Turbo碼的深入研究,人們重新發(fā)現(xiàn)Gallager早在1962年提出的低密度校驗碼(Low Density Parity-Check Codes,簡稱LDPC碼)也是一種具有漸進特性的非常好碼,它的譯碼性能同樣可以逼近Shannon信道容量限。由于LDPC碼具有在中長碼長時超過Turbo碼的性能,并且具有譯碼復(fù)雜度更低,能夠并行譯碼及譯碼錯誤可檢測等特點,成為目前信道編碼理論的研究熱點。研究表明,Turbo碼只是LDPC碼的一個特例,兩者都是基于圖構(gòu)造的低密度碼,譯碼算法具有等價性,從而使兩者在基于圖模型的編譯碼研究中得到了統(tǒng)一。
1.3 低密度奇偶校驗碼的提出、發(fā)展和現(xiàn)狀
1962年,Gallager在他的博士論文中提出了二元正則LDPC碼,也被稱做Gallager碼。Gallager證明了這類碼具有很好的漢明距離特性,是滿足GV限的漸進好碼,在計算樹上進行(N為碼長)次后驗概率迭代譯碼可以獲得依碼字長度指數(shù)降低的比特錯誤概率,但限于當(dāng)時的計算能力,缺少可行的譯碼算法,LDPC碼被認(rèn)為不是實用碼,在很長一段時間內(nèi)沒有受到人們的重視。
1981年,Tanner在他的一篇奠基性的文章中正式提出了用圖模型來描述碼字的概念,從而將LDPC碼的校驗矩陣對應(yīng)到被稱為Tanner圖的雙向二部圖上。采用Tanner圖構(gòu)造的LDPC碼,通過并行譯碼可以顯著地降低譯碼復(fù)雜度。Tanner還仔細(xì)分析了最小和算法(Min-Sum Algorithm)與和積算法(Sum-Product Algorithm)兩種信息傳遞算法,證明了基于有限無環(huán)Tanner圖的最小和譯碼算法與和積譯碼算法的最優(yōu)性。但Tanner圖在實際當(dāng)中是采用隨機圖構(gòu)造的,其中不可避免地存在小環(huán)路現(xiàn)象,這些小的環(huán)路會造成譯碼信息的重復(fù)傳遞,使譯碼過程中的消息之間不滿足獨立性假設(shè),影響了迭代譯碼算法的收斂性。
Turbo碼的發(fā)現(xiàn)重新引發(fā)了眾多學(xué)者對LDPC碼的研究興趣。MacKay和Neal利用隨機構(gòu)造的Tanner圖研究了LDPC碼的性能,發(fā)現(xiàn)采用和積譯碼算法的正則LDPC碼具有和Turbo碼相似的譯碼性能,在長碼時甚至超過了Turbo碼,這一結(jié)果引起了信道編碼界的極大關(guān)注。此后,Davey和MacKay從減少Tanner圖上小環(huán)路的概念出發(fā)提出了基于的LDPC碼,進一步提高了LDPC碼的譯碼性能。
在MacKay和Neal重新發(fā)現(xiàn)LDPC碼優(yōu)異性能的同時,Spielman和Sipser提出了基于二部擴展圖的擴展碼。在對擴展碼的研究中,他們證明了一個隨機構(gòu)造的Tanner圖以很大的概率為好的擴展圖,而由好的擴展圖構(gòu)造的線性糾錯碼是漸進好碼,從而證明了采用隨機Tanner圖構(gòu)造的LDPC碼以很大概率是漸進好碼。Luby等人將采用非正則Tanner圖構(gòu)造的擴展圖用于刪除信道,稱之為Tornado碼。由于采用了非正則的Tanner圖,Tornado碼具有更大的擴展性和更好的收斂性,糾刪性能更強。此后,采用優(yōu)化度序列設(shè)計的非正則Tanner圖被用于構(gòu)造LDPC碼,稱為非正則LDPC碼,與正則LDPC碼相比,非正則LDPC碼的性能得到顯著的提高。
同時,Wiberg結(jié)合Turbo碼和網(wǎng)格圖的研究,將Tanner 圖推廣到包含隱含狀態(tài)變量的因子圖(Factor Graph),對Turbo碼和LDPC碼的研究在因子圖的基礎(chǔ)上得到統(tǒng)一。Wiberg對因子圖的研究發(fā)現(xiàn),對任意給定系統(tǒng),無環(huán)圖的狀態(tài)復(fù)雜度是最大的,有環(huán)圖的狀態(tài)復(fù)雜度則會大大降低,從而證明了基于有環(huán)Tanner圖的LDPC碼具有較低的譯碼復(fù)雜度。Wiberg同時還證明了最小和算法和和積算法在本質(zhì)上的同一性,在格圖譯碼中,最小和算法退化為Viterbi譯碼算法,和積算法退化為BCJR譯碼算法。
近兩年,Richardson等人應(yīng)用密度進化理論來測度LDPC碼的性能。Richardson等人在對LDPC碼的研究中發(fā)現(xiàn),譯碼信息的迭代傳遞過程中存在著譯碼閾值現(xiàn)象,即當(dāng)信噪比大于譯碼閾值時,迭代譯碼可使誤碼率趨于零,反之無論采用多長的LDPC碼,經(jīng)過多少次迭代譯碼,總存在一定的錯誤概率。應(yīng)用中心極限定理,Richardson等人證明了有限隨機有環(huán)圖的譯碼閾值可以逼近無環(huán)圖的譯碼閾值。通過建立在無環(huán)圖上的密度進化理論,可以精確地計算無環(huán)圖上LDPC碼的譯碼閾值,分析其譯碼收斂條件,從而近似估算有環(huán)Tanner圖上LDPC碼的性能。研究表明,譯碼閾值的大小與LDPC碼的構(gòu)造參數(shù)密切相關(guān),采用優(yōu)化度序列設(shè)計的非正則LDPC碼可以有效地改善閾值,因此密度進化理論可以用于指導(dǎo)LDPC碼的優(yōu)化設(shè)計。
Chung等通過對密度進化理論的研究,進一步提出了應(yīng)用高斯逼近原理來簡化譯碼閾值計算和收斂性分析,從而使測度LDPC碼性能的模型由多參數(shù)動態(tài)系統(tǒng)的密度進化理論模型簡化為單一參數(shù)動態(tài)系統(tǒng)的高斯逼近模型。
?
第2章 預(yù)備知識
本章以漢明碼為例,介紹了線性分組碼的一般原理,并以此為后文中LDPC碼的編碼原理及程序中編碼算法設(shè)計打下理論基礎(chǔ),同時通過對線性分組碼的分析介紹,形象地表現(xiàn)了信道編解碼過程中的糾錯檢錯過程。此外,還對信道容量以及香農(nóng)極限進行了說明。
2.1 線性分組碼
在第一章中已經(jīng)提到,信道編碼的目的是提高信號傳輸?shù)目煽啃浴P诺谰幋a是在經(jīng)過信源編碼的碼元中增加一些多余的比特,目的在于利用這些特殊的多余比特去發(fā)現(xiàn)或糾正傳輸中發(fā)現(xiàn)的錯誤。在信道編碼只有發(fā)現(xiàn)錯碼能力而無糾錯能力時,必須結(jié)合其他的措施來糾正錯碼,否則只能將發(fā)現(xiàn)為錯碼的碼元刪除,以求避免錯碼帶來的負(fù)面影響。
在線性分組碼中,使用線性代數(shù)方程來決定監(jiān)督位與信息位之間的關(guān)系,所謂監(jiān)督位即在碼元中添加的冗余比特。線性分組碼的構(gòu)造方式較為簡單、理論較為成熟。本章以漢明碼為例介紹線性分組碼的一般原理。這種編碼方法是由漢明(R. W. Hamming)與1950年提出的。
漢明碼是一種能夠糾正一個錯碼的效率較高的線性分組碼。對于偶數(shù)監(jiān)督碼而言,在接收端解碼時,實際上就是在計算下式:?
?? ??? ?(2-1)
若計算出的S=0,就認(rèn)為無錯碼;若計算出的S=1,就認(rèn)為有錯碼。現(xiàn)在將式(2-1)成為監(jiān)督關(guān)系式,S為校正子。由于校正子是一個二進制數(shù)字,他只有兩種取值,故只能表示有錯和無錯,而不能進一步的指明錯碼的位置。不難推想,若此碼長增加一位,即有兩個監(jiān)督位,則能增加一個類似式(2-1)的監(jiān)督關(guān)系式。這樣就能得到兩個校正子。兩個校正子的可能取值有4種組合,即00,01,10,11,故能表示4種不同的信息。若用其中一種組合表示無錯碼,則還有其他3種組合可以用于指明一個錯碼的3個不同位置。因此,若有r個監(jiān)督關(guān)系式,則r個校正子可以指明一個錯碼的()個不同的位置。只有當(dāng)校正子可以指明的錯碼位置數(shù)目等于或大于碼組長度n時,才能夠糾正碼組中任何一個位置上的錯碼,即要求:?
?? ??? ?(2-2)
下面通過一個例子來說明如何具體構(gòu)造監(jiān)督關(guān)系式。要求設(shè)計一個能夠糾正1個錯碼的分組碼(n,k),給定的碼組中有4個監(jiān)督位,即k=4.由式(2-2)可知,這時要求監(jiān)督位數(shù)。若取,則。現(xiàn)在用表示這7個碼元,用表示校正子,這三個校正子恰好能夠指明個錯碼的位置。例如,可以按照表2.1所示規(guī)定校正子和錯碼位置的關(guān)系。當(dāng)然,也可以做其他的規(guī)定,這不影響討論的一般性。
表2.1 校正子和錯碼位置關(guān)系
?? ?錯碼位置?? ??? ?錯碼位置
001?? ??? ?101?? ?
010?? ??? ?110?? ?
100?? ??? ?111?? ?
011?? ??? ?000?? ?無錯碼
由此表可見,僅當(dāng)在位置上有錯碼時,校正子的值才等于1;否則的值等于0。這意味著4個碼元構(gòu)成偶數(shù)監(jiān)督關(guān)系:
?? ??? ?(2-3)
同理,構(gòu)成如下偶數(shù)監(jiān)督關(guān)系:
?? ??? ?(2-4)
以及構(gòu)成如下偶數(shù)監(jiān)督關(guān)系:
?? ??? ?(2-5)
在編碼時,信息位的決定于輸入信號,他們是隨機的。監(jiān)督位是按照監(jiān)督關(guān)系決定的,應(yīng)該保證上列3個式子中的校正子等于0,即有:
?? ??? ?(2-6)
上式可改寫為:
?? ??? ?(2-7)
若信息位的值給定,則可以根據(jù)上式計算出監(jiān)督位的值。這樣計算出的結(jié)果見表2.2。
表2.2 監(jiān)督位計算結(jié)果
?? ??? ??? ?
0000?? ?000?? ?1000?? ?111
0001?? ?011?? ?1001?? ?100
0010?? ?101?? ?1010?? ?010
0011?? ?110?? ?1011?? ?001
0100?? ?110?? ?1100?? ?001
0101?? ?101?? ?1101?? ?010
0110?? ?011?? ?1110?? ?100
0111?? ?000?? ?1111?? ?111
在接收端解碼時,對于每個接收碼組,先按式(2-3)至式(2-5)計算出校正子,然后按照表2.1判斷錯碼的位置。例如,若接收碼組為0000011,則按式(2-3)至式(2-5)計算得到:。這樣,由表2.1可知,錯碼位置在。
按照上述方法構(gòu)造的碼成為漢明碼。上面例子中的漢明碼是(7,4)碼,其最小碼距。由式(2-4)和式(2-5)可知,此碼能夠檢測2個錯碼,或糾正1個錯碼。漢明碼的碼率可以由式(2-2)取等號時的值得出:?
?? ? ?? ?(2-8)
當(dāng)r或n很大時,上式趨近于1.所以漢明碼是一種高效編碼。
在討論上面實例的基礎(chǔ)上,現(xiàn)在介紹線性分組碼的一般原理。前面已經(jīng)說明,線性分組碼的監(jiān)督位和信息位的關(guān)系是由一組線性代數(shù)方程決定的。式(2-6)就是這樣的方程式,將此式改寫成下列形式:
?? ??? ?(2-9)
在上式中已經(jīng)將簡寫成。代表模2加法。式(2-9)可以改寫成如下的矩陣形式:
?? ??? ?(2-10)
將上式改寫為:
?? ? 或 ?? ?(2-11)
式中
?? ?,, (2-12)
上標(biāo)“T”表示將矩陣轉(zhuǎn)置,即將矩陣的第一行變?yōu)榫仃嚨牡谝涣?#xff0c;將矩陣的第二行變?yōu)榫仃嚨牡诙小?br /> 我們將上式中的H稱為監(jiān)督矩陣。監(jiān)督矩陣給定后,碼組中的信息位和監(jiān)督位的關(guān)系就隨之確定了,比較式(2-9)和式(2-10)可以看出,H的行數(shù)就是監(jiān)督關(guān)系式的數(shù)目,即監(jiān)督位數(shù)r。H的每行中各個“1”的位置表示相應(yīng)的碼元參與監(jiān)督關(guān)系。例如,H的第一行1110100表示監(jiān)督位是由之和確定的。式(2-11)中的H可以分為如下兩部分:
?? ??? ?(2-13)
式中,為階矩陣,為階單位方陣。我們將如上式形式所表示的監(jiān)督矩陣稱為典型監(jiān)督矩陣。
由代數(shù)理論可知,H矩陣的各行應(yīng)該是線性無關(guān)的,否則將得不到r個線性無關(guān)的監(jiān)督關(guān)系式,從而也得不到r個獨立的監(jiān)督位。若一個矩陣能夠?qū)懗傻湫完囆问?#xff0c;則其各行也一定是線性無關(guān)的。因為容易驗證,的各行是線性無關(guān)的,故的各行也是線性無關(guān)的。
式(2-7)也可以仿照式(2-9)的做法,寫成如下矩陣形式:
?? ??? ?(2-14)
上式兩端分別轉(zhuǎn)置后,可以變成:
?? ??? ?(2-15)
式中,Q為階矩陣,是P的轉(zhuǎn)置,即:
?? ??? ?(2-16)
式(1-15)表示,在信息位給定后,用信息位的行矩陣乘以矩陣Q就得出監(jiān)督位。
我們將Q的左邊加上一個k階單位陣,構(gòu)成如下矩陣:
?? ??? ?(2-17)
G稱為生成矩陣,因為可以用它產(chǎn)生整個碼組A,即有:
?? ??? ?(2-18)
具有形式的生成矩陣成為典型生成矩陣。由典型生成矩陣得出的碼組A中,信息位的位置不變,監(jiān)督位附加于其后。這種形式的碼組稱為系統(tǒng)碼。
比較式(2-13)和式(2-17)可見,典型監(jiān)督矩陣H和典型生成矩陣G之間通過式(2-16)聯(lián)系。
與對矩陣H的要求相似,矩陣G的各行也必須是線性無關(guān)的。因為由式(2-18)得知,任意一個碼組A都是G的各行的線性組合。G共有k行,若他們線性無關(guān),則可以組合出種不同的碼組,這恰好是有k位信息位的全部碼組。若G的各行中有線性相關(guān)的,則不可能生成種不同的碼組了。實際上,G的各行本身就是一個碼組。因此,如果已有k個線性無關(guān)的碼組,則可以將其用作生成矩陣G,并由它產(chǎn)生其余的碼組。
一般來說,式(2-18)中的A是一個n列的列矩陣:
?? ??? ?(2-19)
它的n個元素就是碼組中的n個碼元。所以發(fā)送碼組就是A。由于傳輸中的干擾影響,接收碼組可能出現(xiàn)錯碼而有別于A。設(shè)接收碼組是一個n列的行矩陣:
?? ??? ?(2-20)
令接收碼組和發(fā)送碼組之差為:
?? ? ?(模2)?? ?(2-21)
E就是錯碼的行矩陣,有時還稱其為錯誤圖樣:
?? ??? ?(2-22)
式中,。因此,若,則表示該碼元未錯;若,表示該碼元為錯碼。式(2-21)還可以改寫成:
?? ??? ?(2-23)
上式表示發(fā)送碼組A與錯誤碼組E之和等于接收碼組B。例如,若發(fā)送碼組,錯碼矩陣,則接收碼組。
?? ?在接收端解碼時,令式(2-11)中的A等于接收碼組B進行計算。若接收碼組B中無錯碼(),由式(2-23)得知,,則式(2-11)仍成立。這時有:
?? ??? ?(2-24)
當(dāng)接收碼組中有錯碼時,,此時將B代入式(2-11)后,該式不一定成立。此外,在錯碼較多并超出這種編碼的檢錯能力時,B可能變?yōu)榱硪粋€許用碼組,故式(2-11)仍有可能成立。這時的錯碼將是不可檢測的。所以只有當(dāng)錯碼未超出檢測能力時,式(2-24)才不成立。假設(shè),這時式(2-24)的右端等于S,即有:
?? ??? ?(2-25)
將式(2-23)代入(2-25),得到:
由式(2-11)可知,上式右端第一項等于0,所以:
?? ??? ?(2-26)
式中,S就是由式(2-1)中的校正子S構(gòu)成的矩陣,所以也成為校正子,它同樣可以用來指示錯碼的位置。當(dāng)H確定后,式(2-26)中,S只與E有關(guān),而與A無關(guān)。這意味著S和錯碼E之間有確定的線性變換關(guān)系。若S和E有一一對應(yīng)關(guān)系,則S將能代表錯碼位置。
?? ?線性碼有一個重要性質(zhì),就是它具有封閉性。封閉性是指一種線性碼中任意兩個碼組之和仍為這種編碼中的一個碼組。下面對此做一簡單證明:
?? ?若和是兩個碼組,則由式(2-11)有:
? ?
將以上兩式相加得:
?? ??? ?(2-27)
所以也是一個碼組。由于線性碼具有封閉性,所以兩個碼組和之間的距離(即對應(yīng)位不同的數(shù)目)必定是另一個碼組的重量(即“1”的數(shù)目)。因此,碼的最小距離就是碼的最小重量(除全“0”碼組外)。
2.2 信道容量和香農(nóng)極限
信道容量表示一個信道下可靠傳輸?shù)淖畲笮畔鬏斔俾省2煌男诺?#xff0c;噪聲的存在形式不同,信道帶寬以及信號的各種限制不同,因而信道容量也不相同。香農(nóng)在其文章中定義的信道容量為:?
?? ? ?? ?(2-28)
?? ?X和Y分別代表信道的輸入和輸出,是X的概率密度函數(shù);是X和Y的互信息量;H(X)是信源熵;H(Y/X)為信道條件熵,即因為信道噪聲而造成的信息損失熵。
?? ?對于寬帶無限的加性高斯白噪聲(AWGN)信道,信道容量為:?
?? ? ?? ?(2-29)
是傳輸信號的平均功率,為高斯白噪聲的功率譜密度。
?? ?對于帶寬為W,信號平均功率為的帶限AWGN信道,信道容量為:?
?? ? ?? ?(2-30)
式(2-30)即為著名的香農(nóng)信道容量公式。
?? ?對于低密度碼的研究,需要涉及到輸入離散、輸出連續(xù)的AWGN信道。由于只有輸入符號均勻分布時才能使互信息量達到最大,因此假設(shè)輸入符號的概率密度函數(shù)為:?
?? ? ?? ?(2-31)
即:?
?? ? ?? ?(2-32)
?? ?對于AWGN信道可得:?
?? ? ?? ?(2-33)
?? ? ?? ?(2-34)
將式(2-33)和(2-34)代入式(2-28)有
?? ? ?? ?(2-35)
?? ?R表示碼率,表示傳輸每一個比特所需要的能量,與關(guān)系為。因為式(2-35)無法求出解析解,故智能采用數(shù)值仿真的方法近似求解。同時需要根據(jù)y的特點對其積分區(qū)域進行縮減,于是得到:?
?? ? ?? ?(2-36)
其中
當(dāng)傳輸錯誤概率時,得到的Shannon極限為
?? ? ?? ?(2-37)
可以看出這與理想AWGN信道的Shannon極限是完全一致的。
?? ?我們知道在實際研究中,R是不可能趨近于0的。所以利用式(2-36),再考慮滿速率傳輸?shù)那闆r(R=C),就可以得出不同的R下達到信道容量極限時所需的做小信噪比,如圖2.1所示。
?
圖2.1 二進制AWGN的信道容量
上圖給出了不同編碼速率R下二進制AWGN信道的信道容量。可以看出,當(dāng)評估某一信道編碼的性能時,不能直接用它的性能和一般意義下的Shannon極限(-1.6dB)進行比較,而應(yīng)該根據(jù)它的碼率在達到實際信道容量時所需的最小信噪比,并用來和其性能做比較,這樣才更合理。下表列舉出了一些常見碼率下所對應(yīng)的最小信噪比值。
表2.3 不同碼率條件下AWGN信道的最小信噪比
碼率(R)?? ?最低信噪比(dB)
8/9?? ?3.003
4/5?? ?2.040
2/3?? ?1.060
1/2?? ?0.187
1/3?? ?-0.495
0?? ?-1.6
?
第3章 LDPC碼表示及編碼
本章系統(tǒng)地概述了LDPC碼的定義及其Tanner圖表示,以及二進制LDPC碼的編碼原理。
3.1 LDPC碼的定義及其Tanner圖表示
3.1.1 LDPC碼的定義及其描述
一個碼長為n、信息位個數(shù)為k的線性分組碼可以由一個生成矩陣來定義,信息序列通過G被映射到碼字。線性分組碼也可以由一個一致校驗矩陣來等效描述,所有碼字均滿足。校驗矩陣每一行表示一個校驗約束,其中所有非零元素對應(yīng)的碼元變量構(gòu)成一個校驗集,用一個校驗方程表示;校驗矩陣的每一行表示一個碼元變量參與的校驗約束,當(dāng)列元素不為零時,表示該碼元變量參與了該行的校驗約束。碼元變量與檢驗方程之間的關(guān)系成為結(jié)構(gòu)。下面主要對二元LDPC碼進行討論。
LDPC碼是一種線性分組碼,它的名字來源于其校驗矩陣H的稀疏性,即校驗矩陣中只有數(shù)量很少的元素為“1”,大部分都是“0”。Gallager最早給出了正則LDPC碼的定義,具體來講正則LDPC碼的校驗矩陣H滿足下列三個條件:
(1)、H的每行有個“1”;
(2)、H的每列有個“1”,;
(3)、與碼長和H矩陣的行數(shù)相比,和都很小。
?
圖3.1 (20,3,4)LDPC碼的校驗矩陣
矩陣H的每列各自包含個“1”,表示每個碼元變量受到相同數(shù)目的校驗約束;每行也各自包含個“1”,表示每個校驗方程對相同數(shù)目的碼元變量進行校驗約束;由于和都很小,校驗矩陣具有很低的“密度”,因此由校驗矩陣所確定的碼稱為LDPC碼。Gallager證明了當(dāng)時,這類碼具有很好的漢明距離特性。正則LDPC碼通常用來表示,其中n為碼長,和的含義不變,圖3.1給出了一個(20,3,4)正則LDPC碼的校驗矩陣。
當(dāng)校驗矩陣H各行(列)中“1”的個數(shù)不全相同時,就得到了非正則LDPC碼。
3.1.2 LDPC碼的Tanner圖表示
設(shè)一個正則LDPC碼C具有校驗矩陣,其對應(yīng)的Tanner圖模型可以表示為一個二部圖。其中碼字向量表示為一組比特節(jié)點,分別對應(yīng)于校驗矩陣的各列,而校驗約束則表示為一組校驗節(jié)點,對應(yīng)與校驗矩陣的各行。僅當(dāng)時,比特節(jié)點與校驗節(jié)點之間有一條邊相連,節(jié)點與之間互稱鄰接節(jié)點,其間的連接邊稱為兩個節(jié)點的鄰接邊。對于正則LDPC碼,每個比特節(jié)點與個個校驗節(jié)點相連,稱該比特節(jié)點的度為;每個校驗節(jié)點與個比特節(jié)點相連,稱該校驗節(jié)點的度為,度表示與節(jié)點相連的邊的數(shù)目。圖3.2給出了圖3.1所示校驗矩陣對應(yīng)的Tanner圖結(jié)構(gòu)。
?圖3.2 (20,3,4)LDPC碼的Tanner圖表示
?? ?根據(jù)比特節(jié)點與校驗方程之間的約束關(guān)系可以得知,Tanner圖中中所有比特節(jié)點發(fā)出的邊的數(shù)目必然等于所有校驗方程所接收的邊的總數(shù)。那么對于LDPC碼(n,j,k),若假設(shè)m為校驗方程的個數(shù),即校驗矩陣H的行數(shù),則以下等式必然成立:
?? ??? ?(3-1)
?? ?對于非正則的LDPC碼,每個校驗方程約束的比特節(jié)點數(shù)目不一樣,同時每個比特節(jié)點受約束的校驗方程的數(shù)目也不一樣。反映在Tanner圖中就是每個點(比特節(jié)點和約束節(jié)點)所連接的邊的數(shù)目是不完全相同的。這樣一種不規(guī)則的LDPC碼在碼長很大的時候性能要比正則的LDPC碼好,這是由于“波浪效應(yīng)”(Wave Effect)所致。一部分比特節(jié)點受到約束的校驗方程數(shù)目比較多,即收到的約束度比較高,那么其正確譯碼的速度也相對比較快;以此同時,這些約束度較高的點也為其他約束度較低的點提供了更為準(zhǔn)確的譯碼外信息,最終使得所有比特節(jié)點正確譯碼的速度更快。又因為校驗矩陣H中每行和每列1的個數(shù)不同,所以不能再用(n,j,k)的方式來進行表示。為了準(zhǔn)確地表達一個非正則的LDPC碼,我們引入如下表達式:?
?? ? ?? ?(3-2)
?? ?其中表示比特節(jié)點的度的分布,表示校驗節(jié)點的度的分布;滿足 及 。
?? ?正則LDPC碼可以看成是非正則LDPC碼的特例,對于(n,3,4)形式的正則LDPC碼,相應(yīng)邊的度分布多項式分別退化為。
3.2 二進制LDPC碼的編碼原理
3.2.1 H矩陣的構(gòu)造
由于LDPC碼是以校驗矩陣H為特征的,不同的校驗矩陣H對應(yīng)了不同的碼字集合。因此,LDPC碼的編碼首先要設(shè)計校驗矩陣H,同時這也是LDPC碼編碼的關(guān)鍵。
對于規(guī)則的LDPC碼(n,j,k),在碼長n一定的情況下,主要的參數(shù)選擇則為j和k。目前的研究結(jié)果表明,性能最好的規(guī)則LDPC碼是(n,3,6)碼。根據(jù)式(3-1)可知,參數(shù)n,j,k確定后就可以得到校驗方程的數(shù)目m,那么H矩陣的大小就可以確定為。LDPC碼校驗矩陣H的一般構(gòu)造步驟如下:首先生成一個的全0矩陣,然后隨機地將每列中的j個0置換成1,每行當(dāng)中的k個0置換成1。但是在隨機置1的過程中,有兩種情況是必須要避免的:
(1)、出現(xiàn)長度為4的環(huán)
在LDPC碼校驗矩陣H中有一個很重要的概念:H矩陣的最小圍長(girth),即通常說的環(huán)。H矩陣中的4環(huán)結(jié)構(gòu)示意圖如下:
?
圖3.3 H矩陣中的4環(huán)結(jié)構(gòu)
其對應(yīng)Tanner圖如下:
?
圖3.4 Tanner圖中的4環(huán)結(jié)構(gòu)
當(dāng)H矩陣中出現(xiàn)長度為4的環(huán)時,其結(jié)構(gòu)會導(dǎo)致消息在兩組點之間的反復(fù)傳遞,而難以得到更新,與迭代譯碼的思想初衷所違背,是必須清除的一種結(jié)構(gòu)。我們另外做簡單的解釋,例如在圖3.3所示的H矩陣中,存在一個4環(huán)結(jié)構(gòu),于是這個4環(huán)對應(yīng)的校驗方程為:
?? ??? ?(3-3)
?? ??? ?(3-4)
由于4環(huán)的存在,我們可以看到,上面兩個校驗方程含有共同的比特節(jié)點與,直觀的說,如果這兩個校驗方程均出錯,則我們無法確定與中究竟是哪個出錯。從這個角度可以說明小循環(huán)對性能帶來的影響。所以我們在矩陣H矩陣時要避免4環(huán)以及短環(huán)的存在。理論分析表明,最小環(huán)的長度為6的情況下,碼字的最小距離為4。而隨機構(gòu)造的LDPC碼的最小距離是隨著分組長度,即碼長的增加而線性增加的。
(2)、比特節(jié)點所連接的校驗方程過于集中
當(dāng)比特節(jié)點所連接的校驗方程過于集中時,常常導(dǎo)致LDPC碼錯誤地板的發(fā)生。例如在圖3.5中,比特節(jié)點的度為3,但其中三個帶陰影的比特節(jié)點總共只連接了5個校驗方程;除了最右邊的一個校驗方程外,其它4個校驗方程中,每個都連接了兩個陰影的比特節(jié)點。因此,如果這三個陰影的比特節(jié)點都出錯時,左邊的四個校驗方程都不能檢測到錯誤的存在。而當(dāng)分組長度增大時,出現(xiàn)這種拓?fù)浣Y(jié)構(gòu)的可能性會隨之減少。
?
圖3.5比特節(jié)點所連接校驗方程過于集中的Tanner圖
對于不規(guī)則的LDPC碼其H矩陣的構(gòu)造也遵循上述兩個原則,不同的是校驗矩陣H每行和每列中1的個數(shù)不再相同。在最早提出的不規(guī)則LDPC碼中,比特節(jié)點和校驗節(jié)點的度都是不均勻的,即校驗矩陣H中每列,每行1的個數(shù)都不相同,但實際仿真結(jié)果表明,這種雙邊不均勻的情況并非最佳方案。實際的應(yīng)用方案是讓比特節(jié)點的度(即校驗矩陣H中每列I的個數(shù))變化比較大,而保持校驗節(jié)點的度(即校驗矩陣H中每行1的個數(shù))比較平均.其中約束度比較大的比特節(jié)點稱為優(yōu)先點。在迭代譯碼過程中,優(yōu)先點首先被正確譯碼的概率是最大的.如何分配這些優(yōu)先點,讓哪些校驗節(jié)點連接更多的優(yōu)先點,是不規(guī)則LDPC碼的一個研究方向。
3.2.2 ?LDPC碼的編碼思想
1、傳統(tǒng)編碼方法
這種編碼方法需要先將H矩陣進行變換得到一個生成矩陣G,然后利用信息序列與生成矩陣相乘進行編碼。下面我們首先給出兩個引理來說明校驗矩陣經(jīng)過高斯變換不會影響編碼結(jié)果。
引理1 設(shè)LDPC碼的校驗矩陣為,其中表示的是第k列的列向量,信息序列S編碼后生成的碼字為,如果將H矩陣的第i列和第j列進行交換得到,則,原信息序列經(jīng)過此新的校驗矩陣編碼后所得的碼字為,即將原碼字的第i個和第j個位置交換后得到新的碼字。
?? ?證明:
?? ?由LDPC碼校驗矩陣和碼字間的正交關(guān)系可得,即,所以。所以對校驗矩陣進行列變換,得到的新碼字也是對原碼字進行同樣位置的列變換。在編碼時,只要記錄下校驗矩陣列變換的動作,對新校驗矩陣下得到的碼字進行同樣位置的置換即可以得到原校驗矩陣所對應(yīng)的碼字。
?? ?引理2 使用高斯消元法對H矩陣進行行變換(即把H矩陣某一行按照模2相加到另一行上)不影響編碼結(jié)果,變換所得的矩陣與原矩陣具有等價性。
?? ?證明:
?? ?在Tanner圖中可以看出,把H矩陣的第i行按照模2相加到第j行上,在Tanner圖上即是從節(jié)點添加邊到所有與相連的節(jié)點上,如果已經(jīng)與該比特節(jié)點相連,則把該連接刪掉。設(shè)分別表示原來與校驗節(jié)點相連的所有比特節(jié)點的集合,表示的交集,表示與變換后的校驗節(jié)點相連的比特節(jié)點的集合;符號表示按模2進行累加,“+”表示按模2 進行相加,表示第k個比
特節(jié)點的值,由LDPC碼的定義可得及,則有:
?? ? ?? ?(3-5)
即,原來的碼字仍可滿足新校驗矩陣的校驗關(guān)系,所以,H矩陣進行行行變換不影響編碼結(jié)果。
?? ?下面介紹傳統(tǒng)編碼的基本理論和一般過程。
?? ?設(shè)信息源為s,則編碼生成的碼字。這種編碼方式是由最基本的原理推得的。當(dāng)分組長度為n時,編碼復(fù)雜度為,在移動通信中這種傳播時延對于語音通信是不能忍受的。計算復(fù)雜度也會使得存儲器的數(shù)量過多,影響通信成本。為了簡化計算,數(shù)學(xué)家們設(shè)計了很多簡便算法。但是這些算法要求校驗矩陣H具有相應(yīng)的特殊形式。
?? ?由編碼理論可知,具有系統(tǒng)形式的校驗矩陣H對應(yīng)的生成矩陣G也具有系統(tǒng)形式,得到的碼字U也是具有系統(tǒng)形式的碼字。現(xiàn)在假設(shè)編碼前的信息為s,編碼后的校驗位為c,編碼后信息位s位于碼字U的后部,即;假設(shè)校驗矩陣H的大小為,并具有系統(tǒng)形式,其中A是一個的單位矩陣,B是一個的矩陣。運用編碼理論即矩陣運算可以得到下列等式:
?? ??? ?(3-6)
?? ?由此等式可得到:,因為A為單位矩陣,故又可以簡化為:。
?? ?這種編碼方式要求校驗矩陣H具有系統(tǒng)形式,但卻是以犧牲LDPC碼的稀疏性為代價的。因為系統(tǒng)形式的校驗矩陣H要求具有一個的單位矩陣,這必然使得校驗矩陣H中的其余部分必須承擔(dān)余下的所有“1”元素,從而使得這部分顯得比較密集,并不能很好的達到LDPC碼原本所要求的稀疏性。這在一定情況下提高了LDPC碼編碼的復(fù)雜度。
2、基于下三角形式校驗矩陣的編碼方法
?? ?Mackey等證明,LDPC碼要在線性時間內(nèi)完成編碼,則其校驗矩陣具有如圖3.6所示的下三角的形式,并建議在構(gòu)造校驗矩陣時加入某些約束,使得構(gòu)造出的校驗矩陣具有下三角的形式。但是,如果在構(gòu)造校驗矩陣時加入某些約束,就違背了Shannon在證明信道編碼時引入的隨機性原則,從而降低了碼的性能。所以,既要保持隨機性原則,又要在線性時間內(nèi)完成編碼成了LDPC碼發(fā)展的一個障礙。
?
圖3.6 校驗矩陣的的下三角形式
基于此T.J.Richardson和R.L.Urbanke提出了Efficient快速編碼方法。Efficient編碼方法的基本思想是利用LDPC碼校驗矩陣稀疏性的性質(zhì),對校驗矩陣進行行列置換,使得校驗矩陣具有特定的形式,這中特定的形式使得編碼能夠在先行時間內(nèi)完成;基于下三角形式校驗矩陣的編碼方法、基于近似下三角校驗矩陣的編碼方法就是其中代表形式。
在基于下三角形式校驗矩陣的編碼方法中,由于僅僅對校驗矩陣進行行列置換,所以校驗矩陣的稀疏性并沒有被破壞,這樣在線性時間內(nèi)完成編碼是毋庸置疑的。下面討論具體的操作流程:
若LDPC碼的校驗矩陣具有如圖3.6所示的下三角形式,在圖中斜線上全為“1”,而其余的“1”均在斜線的左邊,則可以采用迭代的方式進行編碼。設(shè)碼字向量為,將其分為兩部分,即信息位向量和校驗位向量,即,則該編碼的過程可具體描述為:
(1)、直接將信息比特的值賦給信息位向量S;
(2)、采用后向迭代確定所有校驗位的值,即對所有的從小到大依次計算下式:?
?? ? ?? ?(3-7)
其中表示校驗矩陣中第i行,第j列上的元素。
?? ?實際上,該編碼過程就是在從上到下依次利用校驗矩陣的各行校驗約束關(guān)系。對于每一個校驗約束關(guān)系,其中涉及的變量除斜線上的“1”所對應(yīng)的校驗位外,其余的變量要么是信息位,要么就是前面已經(jīng)求出的校驗位,也就是說,該校驗約束關(guān)系中只有一個未知變量,因此可以很容易求得相應(yīng)校驗位的值。
?? ?設(shè)校驗矩陣經(jīng)過變換成為下三角形式后的平均行重為m,則整個編碼約需要m(n-k)次與運算,(m-1)(n-k)次異或運算,當(dāng)m相對于n可以看作很小的常數(shù)時,該編碼方法就具有線性的復(fù)雜度。
3、基于近似下三角形式校驗矩陣的編碼方法
?? ?基于近似下三角結(jié)構(gòu)的編碼方法可以看作是基于下三角結(jié)構(gòu)的編碼方法的改進。該方法的編碼處理過程分為兩部:預(yù)處理過程和實際編碼過程。預(yù)處理過程是一個離線計算,對于一個給定的碼字只需要做一次計算,但實際編碼過程主要是針對傳輸數(shù)據(jù)的處理部分。
?? ?在變換算法中,假設(shè)輸入信息比特部分為s,編碼獲得的校驗比特部分分為和,則碼字,滿足。我們把校驗矩陣進行行列重排,若能直接化為下三角矩陣,則編碼可以線性實現(xiàn)。通過行列變換我們把校驗矩陣化成如下的近似下三角矩陣:
?? ??? ?(3-8)
該矩陣形狀如下:
?
圖3.7 校驗矩陣的近似下三角形式
將校驗矩陣左乘如下矩陣
?? ??? ?(3-9)
得到
?? ??? ?(3-10)
那么可以分解為如下兩個表達式:
?? ??? ?(3-11)
?? ??? ?(3-12)
定義,并且假設(shè)非奇異,則求解上面兩式可得:
?? ??? ?(3-13)
?? ??? ?(3-14)
通過如上兩個公式可以計算校驗信息和,從而得到碼字。
?
第4章 LDPC碼的譯碼思想
?? ?LDPC碼的譯碼算法大致分為:軟判決譯碼、硬判決譯碼和混合判決譯碼。他們有著各自不同的糾錯性能和譯碼復(fù)雜度。軟判決譯碼算法性能最優(yōu),糾錯性能最好,但是運算復(fù)雜度也最高,其經(jīng)典算法就是置信度傳播(Belief Propagation, BP)算法。Gallager提出的比特反轉(zhuǎn)(Bit-Flipping, BF)譯碼算法是一種硬判決譯碼算法,運算最為簡單 ,復(fù)雜度低,但是糾錯性能也較低。混合判決譯碼算法,其糾錯性能和譯碼復(fù)雜度都在BF算法和BP算法之間。
?? ?下面將分別介紹三種類型的譯碼算法,分析它們的譯碼原理和性能。
4.1 軟判決譯碼算法
?? ?置信度傳播譯碼算法(BP譯碼算法)是最經(jīng)典的LDPC碼軟判決譯碼算法之一。核心思想是利用Tanner圖中的比特節(jié)點和校驗節(jié)點之間的約束關(guān)系,在兩種節(jié)點之間來回傳遞并且更新置信度信息,最終實現(xiàn)解碼。和積算法(Sum-Product Algorithm, SPA)作為一種通用的消息傳遞算法最早由Gallager提出,具體來說就是針對某一個比特節(jié)點進行解碼時,從它所參與的校驗方程那里得到判決信息,再綜合在解碼端接收到的軟判決信息進行最后的判決。而校驗方程的信息又是從參與該校驗方程的其他比特節(jié)點得到信息的。
4.1.1 Tanner圖解析法原理
?? ?上面介紹的SPA算法原理可以用Tanner圖來演示。
?
圖3.8 Tanner圖
如圖3.8所示,其中x1~x6為比特節(jié)點,f1~f3為校驗節(jié)點。設(shè)y1~y6為接收到的消息。Tanner圖中比特節(jié)點和校驗節(jié)點之間的連線看作是信息傳遞的路徑。初始化過程可以表示如下:
?
圖3.9 初始化過程
?? ?(1)、比特節(jié)點x1將從它所連接的多個非f3校驗節(jié)點那里得到的信息及原始信息的總和傳遞給校驗節(jié)點f3,用于修正校驗節(jié)點f3的信息。在Tanner圖上示意如下:
?
圖3.10 校驗節(jié)點的信息更新(x1?f3)
?? ?(2)、校驗節(jié)點f3將從它所連接的多個非x1比特節(jié)點那里得到的信息傳遞給比特節(jié)點x1,x1得到的是該比特節(jié)點的后驗信息,憑此來修正比特節(jié)點的判決信息。在Tanner圖上示意如下:
?
圖3.11 比特節(jié)點的信息更新(f3?x1)
(3)、比特節(jié)點x1綜合從信道直接得到的信息和從與之相連的校驗節(jié)點得到的信息做出判決。在Tanner圖上表示如下:
?
圖3.12 比特節(jié)點x1的信息判決
4.1.2 SPA算法原理
現(xiàn)在我們對SPA算法的原理進行說明。
令表示與校驗節(jié)點j相連的比特節(jié)點的集合,記為
表示除i外,與校驗節(jié)點j相連的比特節(jié)點的集合;
表示與比特節(jié)點i相連的校驗矩陣的集合,記為;
表示除j外,與比特節(jié)點i相連的校驗節(jié)點的集合;
表示包含的第j個校驗方程中的第k個比特;
表示對應(yīng)于的接收值;
表示接收到后判斷發(fā)送比特為的后驗概率;
表示接收到后判斷包含的第j個校驗方程中的第k個比特為的后驗概率;
表示碼字中的比特節(jié)點使得包含的所有校驗方程都滿足;
表示第i個比特節(jié)點傳遞給第j個比特節(jié)點的認(rèn)為是的外部概率信息,即在得到所有校驗節(jié)點和信道信息后,判斷的概率;
,假設(shè),表示校驗節(jié)點j傳遞給比特節(jié)點i的外部概率信息,即在給定信息位及其它信息位具有獨立概率分布條件下,第j個校驗方程滿足的概率。
如果收到的碼字中某一比特為b,那么定義碼字滿足校驗方程的后驗概率為。
首先我們引入三個結(jié)論:
(1)、考慮一個二進制序列,其中。
可以證明,a中含有偶數(shù)個1的概率為:
?? ? ?? ?(4-1)
a中含有奇數(shù)個1的概率為:
?? ? ?? ?(4-2)
(2)、假設(shè)信道為離散無記憶信道,則接收到的信息序列中的各個采樣值獨立,可以計算得到給定接收到的碼字和校驗事件下比特節(jié)點的后驗概率:
?? ? ?? ?(4-3)
假設(shè),由結(jié)論1可得,該校驗方程滿足的概率是:
?? ? ?? ?(4-4)
對于的情況可類似得到。由于假設(shè)之間相互獨立,所有個校驗比特都滿足的概率是:
?? ? ?? ?(4-5)
根據(jù)前面對的符號的定義,可以得到如下的計算公式:
?? ? ?? ?(4-6)
?? ? ?? ?(4-7)
根據(jù)上面兩個式子以及結(jié)論,則有:
?? ? ?? ?(4-8)
同樣地,根據(jù)前面對的符號的定義,可以得出下面的公式:
?? ? ?? ?(4-9)
?? ? ?? ?(4-10)
(3)、信道編碼器產(chǎn)生的碼字經(jīng)過調(diào)制然后送入信道,這里采用AWGN信道和BPSK調(diào)制,接收端得到的接收序列可以寫成。是0均值且方差為的高斯分布,滿足0,1等概率分布,由此可得AWGN信道下比特節(jié)點初始概率信息的計算公式為:
?? ? ?? ?(4-11)
即
?? ? ?? ?(4-12)
SPA算法原理執(zhí)行過程如下:
(1)、概率信息初始化
根據(jù)信道接收信息y,利用公式(4-12)計算每個比特節(jié)點的初始概率和。
?? ? ?? ?(4-13)
?? ? ?? ?(4-14)
(2)、校驗節(jié)點的概率信息處理
每個比特節(jié)點i將自身的概率信息傳遞給它參與的所有校驗節(jié)點,計算第j個校驗節(jié)點從第i個比特節(jié)點處獲得的信息。
?? ? ?? ?(4-15)
?? ? ?? ?(4-16)
(3)、比特節(jié)點的概率信息處理
每個校驗節(jié)點j將自身的概率信息傳遞給參與它的所有比特節(jié)點,計算第i個比特節(jié)點從第j個校驗節(jié)點處獲得的信息。
?? ? ?? ?(4-17)
?? ? ?? ?(4-18)
其中是常數(shù)因子,使得
(4)、判決
?? ? ?? ?(4-19)
?? ? ?? ?(4-20)
是常數(shù)因子,使得
根據(jù)比特i的概率值可以判決為:若,則,否則。
如果或者達到最大譯碼次數(shù),則終止譯碼,否則跳轉(zhuǎn)到步驟(2)繼續(xù)進行迭代譯碼。
不難看出,在這個算法中有大量的高復(fù)雜度的實數(shù)操作,并且需要存儲大量的中間過程的數(shù)據(jù)。由于對數(shù)操作可以將實數(shù)乘法運算轉(zhuǎn)換成實數(shù)加法運算,所以為了降低解碼復(fù)雜度,可以將上面的解碼過程轉(zhuǎn)化到對數(shù)域?qū)崿F(xiàn)。
4.1.3 對數(shù)域BP譯碼算法
首先定義對數(shù)似然比LLR(Log-APP-ratio):
?? ? ?? ?(4-21)
據(jù)此定義如下一系列LLR表達式:
?? ??
對數(shù)域BP算法譯碼過程如下:
(1)、似然信息初始化
?? ? ?? ?(4-22)
(2)、校驗節(jié)點的似然信息處理
將概率域傳遞公式(4-16)重寫為:
?? ??
對它做等式變換,得到:
?? ? ?? ?(4-23)
利用恒等式 的特性 對(4-23)變換得:
?? ??
即
?? ??
令 , ,則可以得到對數(shù)域計算校驗節(jié)點似然信息的表達式為:
?? ? ?? ?(4-24)
(3)、比特節(jié)點的似然信息處理
?? ??
即對數(shù)域計算比特節(jié)點似然信息的表達式為:
?? ? ?? ?(4-25)
(4)、判決
利用本次迭代過程中每個比特節(jié)點從校驗節(jié)點處獲得的似然信息,再加上從信道輸出數(shù)據(jù)得到的初始似然信息,計算新的似然信息值。
?? ? ?? ?(4-26)
根據(jù)比特i的似然值可以判決為:若,則,否則。
如果或者達到最大譯碼迭代次數(shù),則終止譯碼,否則跳轉(zhuǎn)到步驟(1)繼續(xù)執(zhí)行迭代過程。
4.1.4 最小和(Min-Sum)譯碼算法(改進的對數(shù)域BP譯碼算法)
重寫對數(shù)域BP譯碼算法的公式(4-24)如下:
?
利用函數(shù) 的性質(zhì) ,可將上面的表達式簡化為 。
?的函數(shù)特性如圖所示:
?
圖3.13 函數(shù) 與變量x的關(guān)系(x≥0)
根據(jù) 的函數(shù)特性可以做如下簡化處理:
?
于是可以得到下列公式:
?? ? ?? ?(4-27)
其他操作步驟同前。這就是最小和算法,由J.Chen和M.Fossorier等在1999年提出。在LDPC碼的列重不太大并且碼長不太長的時候,這種算法能夠達到較好的性能。這樣的簡化處理省去了累乘運算,降低了運算復(fù)雜度。
4.2硬判決譯碼算法
由Gallager提出的比特反轉(zhuǎn)(Bit-Flipping,BF)譯碼算法是一種典型的硬判決譯碼算法,它的運算最為簡單,復(fù)雜度最低,但是糾錯性能較低。后來的研究人員在其基礎(chǔ)上又提出了一系列改進的BF算法,改進的方向大致可以分成兩個:3利用軟信息對BF算法進行加權(quán)優(yōu)化,第二類是利用校驗矩陣的結(jié)構(gòu)特點對BF算法加以改進。本節(jié)我們首先介紹Gallager最初提出的比特反轉(zhuǎn)譯碼算法,然后闡述一下在此基礎(chǔ)上的改進算法,并提出一種優(yōu)化的基于加權(quán)錯誤校驗的LDPC碼比特反轉(zhuǎn)算法。
4.2.1 Gallager的比特反轉(zhuǎn)譯碼算法
Gallager的BF譯碼算法主要通過計算接受序列的伴隨式S來進行解碼。其譯碼原理為:先將從信道得到的譯碼器輸入數(shù)據(jù)判決為“0”、“1”序列,把該序列代入低密度校驗矩陣計算各個校驗方程的結(jié)果,得到相應(yīng)的錯誤伴隨圖樣。據(jù)此可以找出使得校驗方程不成立數(shù)目最多的比特節(jié)點,然后將比特節(jié)點反轉(zhuǎn),如果再次進行譯碼校驗沒有錯誤出現(xiàn),則譯碼終止,否則在達到最大迭代次數(shù)前不斷重復(fù)譯碼過程,直到所有的校驗方程都成立。
設(shè)發(fā)送的碼字序列為 ,BPSK調(diào)制后序列為 ,其中 ,接收到的硬判決序列為 ,LDPC碼校驗矩陣為 ,其中 。
可以計算碼字的伴隨式為:
?? ? ?? ?(4-28)
其中M=N-K。
若 ,則說明碼字序列滿足第i個校驗方程,若伴隨式S是全零向量,則說明碼字無誤。若伴隨式S不是全零向量,則碼字序列Z中一定有錯誤。按照式(4-29)計算碼字序列中每個比特所參與的不滿足校驗方程數(shù)目。
?? ? ?? ?(4-29)
找出F中最大的,反轉(zhuǎn)對應(yīng)的比特,然后重復(fù)上述過程。
綜上,Gallager的BF譯碼過程如下:
(1)、根據(jù)式(4-28)計算碼字序列Z所對應(yīng)的伴隨式S,若S=0,停止譯碼并輸出Z,否則進入步驟(2)。
(2)、按照式(4-29)計算碼字序列Z中每個比特所參與的不滿足校驗方程數(shù)目,并且找出參與錯誤錯誤方程數(shù)最多的比特。
(3)、反轉(zhuǎn)步驟(2)中找到的比特,更新碼字序列Z。
(4)、判斷是否達到最大迭代次數(shù)上限,否則重復(fù)步驟(1)~(3)。
4.2.2 改進的比特反轉(zhuǎn)譯碼算法
Gallager的BF譯碼算法非常簡單,但是由于只利用了伴隨式進行解碼,丟失了較多的軟信息,因此性能較差。后來的研究人員在其基礎(chǔ)上又提出了一系列改進的BF譯碼算法。Chan等人借助一個“Taboo”函數(shù)來輔助每次迭代過程中反轉(zhuǎn)比特的選擇,防止同樣的比特被反復(fù)反轉(zhuǎn);Kou等人提出了一種加權(quán)的BF譯碼算法;Zhang等人對此甲醛算法進行優(yōu)化,進一步提升了性能;Dong等人也對BF算法進行了研究,并提出了基于加權(quán)錯誤校驗的比特反轉(zhuǎn)算法(Weighted Violation based Bit Flipping, WABF),這種算法較其他算法最大的區(qū)別是,它并沒有利用任何軟信息進行算法加權(quán)優(yōu)化,同樣實現(xiàn)了性能的提升,是一種純粹的硬判決譯碼,因此實用性更強,一下做詳細(xì)介紹。
假設(shè)校驗矩陣 大小為 ,具有統(tǒng)一的列重和行重。 表示接收到的硬判決序列。則z的伴隨式表示為 。令 表示第i個比特節(jié)點所參與的校驗錯誤的方程數(shù)目; 表示校驗錯誤的方程集合。第m個校驗方程所含有的比特節(jié)點的集合表示為 。第n個比特節(jié)點所參與的校驗方程的集合為 。
WVBF算法原理如下:
(1)、計算伴隨式s。若s全為0,則停止譯碼。
(2)、計算 ,i=1,2,…,N。
(3)、對m=1,2,…,M,若 ,則計算 。
(4)、對m=1,2,…,M和i=1,2,…,N,若 并且 ,則計算 。
(5)、對i=1,2,…,N,若 ,則計算 。 越大,表示第i個比特節(jié)點出錯的概率就越大。若 ,則 。
(6)、找到 最大的比特節(jié)點,并反轉(zhuǎn)它。
重復(fù)(1)~(6),直到伴隨式為全0,或者達到最大迭代次數(shù)。
4.3 優(yōu)化的基于加權(quán)錯誤校驗的LDPC比特反轉(zhuǎn)算法(IWVBF)
在WVBF算法中,一次迭代只能反轉(zhuǎn)一個比特。而譯碼的收斂所需的平均迭代次數(shù)和 有關(guān)(N為碼長,p表示接收到的應(yīng)判決序列的所有比特節(jié)點的錯誤概率),因此譯碼速率較低。在此提出一種優(yōu)化的WVBF算法,它會在一次迭代中反轉(zhuǎn)一組比特,大大降低了迭代次數(shù),同時提高了譯碼性能。
設(shè)定一個判決門限t,t為相對于 恰當(dāng)選擇的一個大于0的實數(shù)。由于 在一次迭代中最多有 種可能的取值,很多比特的 都有可能超過門限,故可以將所有超過此門限的 所對應(yīng)的比特在一次迭代中全部反轉(zhuǎn)。因此WVBF算法中步驟(6)可以改進為:
若, ,則反轉(zhuǎn)所有超過門限的比特節(jié)點。
直觀看來,門限值高,很多錯誤的比特不能被反轉(zhuǎn),會引起誤判以致性能下降;門限值低,一些正確的比特反被糾錯,性能會更差。所以,恰當(dāng)選擇門限是關(guān)鍵。
改進算法的復(fù)雜度主要體現(xiàn)在原先算法的步驟(4)和步驟(6),在(4)中, 最多有 種可能的取值,我們可以在給定校驗矩陣而譯碼過程未開始時先計算出這些可能的取值,并存儲在查找表中。解碼開始后遇到出發(fā)操作只需進行查找表操作即可。令 為每次迭代中錯誤的比特數(shù)目( 的均值為Np),WVBF算法在步驟(6)中,一次迭代中最多有 個比特滿足 。而一次迭代值反轉(zhuǎn)一個比特,因此需要( )次實數(shù)加法操作,IWVBF算法的步驟(6)在一次迭代中反轉(zhuǎn)一組比特,大大降低了譯碼的迭代次數(shù),因而復(fù)雜度較之WVBF算法要低。?
第5章 程序流程分析
為實現(xiàn)對LDPC碼性能的分析,基于MATLAB編寫了LDPC碼的編譯碼程序。程序中主要包括主程序、H矩陣構(gòu)建、H矩陣變換、LDPC編碼、LDPC譯碼幾個部分。本章主要內(nèi)容為對程序的流程分析,以及部分函數(shù)功能的說明。
5.1 主程序
在本設(shè)計中,主程序中實現(xiàn)的功能主要有生成輸入序列、生成H矩陣、編譯碼以及誤碼率計算、仿真結(jié)果輸出。其中,生成H矩陣以及與編譯碼相關(guān)的功能通過函數(shù)調(diào)用的形式實現(xiàn)。在程序文件夾中,主程序?qū)?yīng)ldpc_demo.m文件。
主程序的流程圖如下:
?
圖5.1 主程序流程圖
下面對主程序中的部分函數(shù)加以說明:
1、原始信息序列的生成
主程序中,通過隨機函數(shù)生成一個二進制序列作為整個程序中編碼之前的原始信息序列,相關(guān)程序代碼如下:
s=round(rand(1,cols-rows));
其中cols與rows分別為主程序中定義的H矩陣的列數(shù)和行數(shù),cols-rows為序列的長度,當(dāng)然序列的長度值可以由自己直接指定。rand()函數(shù)為隨機函數(shù),rand(a,b)表示生成a行b列的隨機矩陣,矩陣的所有元素取值在0~1之間。round()函數(shù)為取整函數(shù),round(a)表示對數(shù)值a中的小數(shù)部分按照四舍五入規(guī)則進行取整。
整體代碼執(zhí)行結(jié)果為:生成個長度為(cols-rows)的二進制序列。
2、誤碼率的計算(BER統(tǒng)計)
在本設(shè)計中,誤碼率的數(shù)值是由誤碼比特數(shù)除以整體序列長度得到的。在程序中的代碼如下:
errmax=find(s~=uhat);
nerr=length(errmax);
BER=nerr/(cols-rows);
其中s為原始信息序列,uhat為譯碼后序列。?
整體程序段的執(zhí)行結(jié)果為:逐個比特檢索譯碼后序列與原始序列,求出兩個序列中不相同的比特數(shù)nerr,最后用誤比特數(shù)除以序列長度得出誤碼率。
3、調(diào)制與AWGN信道傳輸部分
在本程序中,為有效仿真通信系統(tǒng)模型,將編碼后的序列執(zhí)行bpsk調(diào)制后進行AWGN信道的仿真?zhèn)鬏?#xff0c;傳輸后的序列再送往解碼模塊。
實現(xiàn)該功能的程序段為:
tx_waveform=bpsk(u,amp);
rx_waveform=awgn(tx_waveform,SNR);
其中u為編碼后序列,amp為幅度,SNR為信噪比。awgn(a,snr)函表示在信號a中加入高斯白噪聲,信噪比SNR以dB為單位。
5.2 H矩陣生成
設(shè)計中生成H矩陣采用的是隨機方法,詳細(xì)構(gòu)造過程介紹見3.2.1節(jié)。在程序中,H矩陣大小為rowscols,定義列重為bits_per_col,為顯示方便,在流程圖中,我們用n代替列重,用m代替行重。在程序文件中,H矩陣生成對應(yīng)genH.m文件。
生成H矩陣的程序流程如下:
?
圖5.2 H矩陣的生成
設(shè)計中,H矩陣的列重bits_per_col=3,當(dāng)然也可以設(shè)置為其他值,但要注意的一點就是,列重不能取1,列重為1時,對于相應(yīng)的比特節(jié)點只有一個校驗方程,這樣是不能準(zhǔn)確完成譯碼的。列重值過大時可能會影響矩陣的稀疏性,這會在一定程度上加大運算復(fù)雜度。
5.3 編碼過程
LDPC碼的編碼在主程序中以函數(shù)調(diào)用的形式實現(xiàn),編碼算法應(yīng)用的是傳統(tǒng)編碼方法,編碼原理見2.1節(jié)線性分組碼以及3.2.2節(jié)LDPC碼的編碼思想。在程序文件中,編碼過程對應(yīng)ldpc_encode.m、H2P.m、mul_GF2.m文件。
編碼過程中部分程序如下:
[P,rearranged_cols]=H2P(H);
c=mul_GF2(P,s');
u1=[c' s];
u=reorder_bits(u1,rearranged_cols);
設(shè)H矩陣大小為rowscols,程序按照以下步驟執(zhí)行:
(1)、對H進行高斯消元,將其轉(zhuǎn)換為[I ?P]的形式,其中I為cols階單位陣。
(2)、c=P求得監(jiān)督位。其中為原信息序列的轉(zhuǎn)置,c為求出的監(jiān)督位矩陣;
(3)、將求出的監(jiān)督位與原始信息序列相連接,設(shè)計中將監(jiān)督位放在了信息序列的前面;
(4)、若H矩陣在高斯消元過程中有列交換,則對編碼后的碼字進行相應(yīng)的列交換。對碼字進行列交換的原因見第3.2.2節(jié)。
其流程圖為:
?
圖5.3 編碼過程整體流程圖
整個編碼過程中的重點為對H矩陣的高斯消元,也是運算量較大的一個部分。,下面我們對程序中高斯消元執(zhí)行過程進行簡單介紹。
設(shè)i=1:1:rows,j=rows-1:-1:1。
首先逐一檢查H的每行H(i,:),若H(i,i)=0,則尋找該行中的第一個非零元素,并將H的該列與第i列交換,若H(i,i)=1,則不需要進行列交換,然后檢查交換后或者不需要的H(:,i),自H(i,i)元素以下的第i+1行到第m行是否還有非零元素,若有,則將H的第i行疊加到該行,若無,則繼續(xù)檢查下一行。循環(huán)整個過程,將H轉(zhuǎn)化為左下方全為0,H(i,i)全為1的矩陣H1,最后再對H1自第rows行向第j行疊加,最終得到左邊為單位陣的矩陣。即H=[I ?P]。
5.4 譯碼過程
相對編碼過程而言,譯碼過程的運算要相對復(fù)雜的多。在本設(shè)計中,譯碼采用的是軟判決譯碼算法的SPA算法。譯碼過程相關(guān)函數(shù)對應(yīng)程序文件中l(wèi)dpc_decode.m、mul_GF2.m、extract_mesg.m文件。
譯碼過程流程圖如下:
?
圖5.4 譯碼過程流程圖
譯碼時概率信息初始化步驟中初始化概率p(0)與p(1)的取值是與信道有關(guān)的,在不同信道中傳輸信號,其初始化概率值是不相同的。對于AWGN信道,初始化概率值計算公式見式(4-13)、式(4-14)。整個譯碼過程在4.1節(jié)有詳細(xì)的理論描述,在這里就不再贅述。?
第6章 LDPC碼的性能分析
本章主要內(nèi)容為,通過利用MATLAB軟件編程仿真來表現(xiàn)碼長、列重和迭代次數(shù)對LDPC碼性能的影響。仿真時采用圖5.1所示的LDPC碼編譯碼仿真框圖。
下面我們將就碼長、列重及迭代次數(shù)三方面對LDPC碼性能的影響進行分析。
6.1 碼長對LDPC碼性能的影響
應(yīng)用matlab軟件針對額LDPC碼碼長分別為300、500,列重為3,最大迭代次數(shù)設(shè)置為25次進行了仿真實驗,分析研究碼長對LDPC碼誤碼性能的影響,仿真結(jié)果圖如下:
?
圖6.1 碼長對LDPC碼性能的影響
從圖中的仿真結(jié)果可以看出,在同樣的信噪比條件下,隨著碼長的增加,LDPC碼的性能不斷提高。在小信噪比區(qū)域,碼長的增加對誤碼率的改進不大,但隨著信噪比的增加,LDPC碼的誤碼率得到的明顯的改善。但隨著碼長的增加,LDPC碼的性能提高是相對的,當(dāng)達到一定的碼長后,性能將會有很小的提高。這是因為一定碼長下長編碼的性能有一定的極限,隨著碼長的增大,編碼和譯碼的復(fù)雜度也增加,編碼性能就會更接近極限,性能隨碼長增加改善的就更少。
6.2 列重對LDPC碼性能的影響
應(yīng)用matlab軟件針對碼長為256,譯碼的最大迭代次數(shù)為30,校驗矩陣的列重分別為2和4的情況下進行了仿真實驗。仿真得出的誤碼性能曲線如圖:
?
圖6.2 列重對LDPC碼性能的影響
從上圖的仿真結(jié)果可以看出來,在相同的信噪比下,隨著列重的增加,LDPC碼的誤碼率增大。分析其原因,因為仿真過程中所用的碼長不夠大,校驗矩陣不是足夠稀疏,增加列重,會在一定程度上降低校驗矩陣的稀疏性,在校驗矩陣不足夠稀疏的情況下,稀疏性的一定提高會給編碼對應(yīng)的Tanner圖帶來大量的短環(huán)。而短環(huán),尤其是長度為4的環(huán),會使算法的性能惡化,導(dǎo)致LDPC碼性能的下降。這種LDPC碼性能上的下降會隨著碼長的增加而逐漸減小,當(dāng)碼長足夠長,列重的增加對校驗矩陣的稀疏性的影響相對較小,而在譯碼時,列重大的LDPC碼比列重小的LDPC碼得到更多的校驗信息,從而得到更可靠的譯碼,所以此時,隨著列重的增加,LDPC碼的性能將會得到改善。但是當(dāng)列重增加到較大時,因為校驗矩陣不具有稀疏性,性能會隨著列重的增加嚴(yán)重下降。
6.3 迭代次數(shù)對LDPC碼性能的影響
應(yīng)用matlab仿真軟件針對碼長500的規(guī)則LDPC碼,列重為2,譯碼迭代次數(shù)分別為10和100的情況下進行了仿真實驗。下圖給出了上述情況下仿真得到的結(jié)果。
?
圖6.3 迭代次數(shù)對LDPC碼性能的影響
應(yīng)用matlab對碼長為500的規(guī)則LDPC碼在列重為3、信噪比為4的情況下進行了仿真,得出了LDPC碼誤碼率隨迭代次數(shù)變化的曲線,下圖給出了仿真結(jié)果:
?
圖6.4 LDPC碼誤碼率隨迭代次數(shù)變化曲線
從圖6.3的仿真結(jié)果可以看出,在相同的信噪比條件下,LDPC碼的性能隨著迭代次數(shù)的增加而逐漸提高。但是通過對圖6.4的觀察發(fā)現(xiàn),誤碼率并不能隨著迭代次數(shù)的增加而無限的減少,當(dāng)?shù)螖?shù)足夠大時,再增加LDPC碼的迭代次數(shù),只能增加系統(tǒng)的時延和復(fù)雜度,其性能不會再有提高。
6.4 H矩陣變換方法對性能的影響
?? ?在設(shè)計中,采用了傳統(tǒng)的高斯消元法、基于下三角形式校驗矩陣以及基于近似下三角形式校驗矩陣的編碼方法對LDPC碼誤碼率進行分析和比較。用matlab顯示出的列重為4的校驗矩陣中非零元素(“1”元素)分布如下:
?
圖6.5 H矩陣非零元素分布圖
?? ?在對H進行變換的過程中,首先逐一檢查H的每行H(i,:),若H(i,i)=0,則尋找該行中的第一個非零元素,并將H的該列與第i列交換,若H(i,i)=1,則不需要進行列交換,然后檢查交換后或者不需要的H(:,i),自H(i,i)元素以下的第i+1行到第m行是否還有非零元素,若有,則將H的第i行疊加到該行,若無,則繼續(xù)檢查下一行。循環(huán)整個過程,將H轉(zhuǎn)化為左下方全為0,H(i,i)全為1的矩陣H1,最后再對H1自第rows行向第j行疊加,最終得到左邊為單位陣的矩陣。即H=[I ?P]。經(jīng)過高斯消元后的H矩陣非零元素分布圖如下:
?
圖6.6 高斯消元后的校驗矩陣非零元素分布
轉(zhuǎn)換成下三角形式的校驗矩陣非零元素分布圖如下圖:、
?
圖6.7 下三角形式的校驗矩陣非零元素分布
近似下三角形式的校驗矩陣的非零元素分布圖如下:
?
圖6.8 近似下三角形式校驗矩陣非零元素分布
應(yīng)用matlab對在碼長為512、列重為4、迭代次數(shù)為20的條件下采用圖6.6~圖6.8三種H矩陣變換形式進行編碼的LDPC碼誤碼性能進行分析,得出其性能對比圖如下:
?
圖6.9 三種編碼方式LDPC碼的誤碼性能對比
?? ?由圖6.6~圖6.8可以明顯看出,高斯消元的過程破壞了校驗矩陣原有的稀疏性,在提高了編碼過程中運算量的同時,也會使矩陣中出現(xiàn)較多的短環(huán)而影響性能;轉(zhuǎn)換成下三角形式以及近似下三角形式的校驗矩陣保留了原有的稀疏性,在進行仿真時,其編碼時間明顯的短于傳統(tǒng)編碼所用的時間。通過分析應(yīng)用matlab進行仿真時所用時間以及觀察圖6.9發(fā)現(xiàn),在列重較小時,除編碼時間上的差別外,三種編碼方式LDPC碼的誤碼率差別并不大,但隨著列重的增大,基于下三角形式以及近似下三角形勢H矩陣的LDPC碼誤碼性能要漸漸優(yōu)于傳統(tǒng)編碼方式,此外列重值較大時,H矩陣并不一定能夠通過高斯消元轉(zhuǎn)換成圖6.6所示的形式,這在一個方面也顯示出傳統(tǒng)編碼方式的缺點。此外,通過對基于下三角形式編碼方法以及基于近似下三角形式編碼方法的性能對比可以看出,兩種編碼方式的性能差別并不大,但相比之下,還是后者的性能略好一點。實際上,平時較為常用的LDPC碼編碼方法就是基于近似下三角形式校驗矩陣的編碼方法。
?
總結(jié)與展望
?? ?信道編碼理論及技術(shù)作為現(xiàn)代通信系統(tǒng)必不可少的關(guān)鍵技術(shù),近幾十年在Shannon信道編碼理論的指引下已經(jīng)經(jīng)歷了飛速的發(fā)展并取得了大量的研究成果。LDPC碼在1996年經(jīng)過Mackey、Spielman和Wiberg等人的再發(fā)現(xiàn)后,在十年左右的時間里,取得了重大研究進展。與已經(jīng)發(fā)展成熟的Turbo相比,LDPC碼擁有更優(yōu)越的性能,較低的誤碼錯誤平臺,更低的譯碼復(fù)雜度。
?? ?本文回顧了信道編碼理論的發(fā)展歷史,探討了LDPC碼的基本原理,用matlab軟件對LDPC碼進行了性能仿真,并分析了碼長、列重以及迭代次數(shù)的變化會對LDPC碼的性能產(chǎn)生什么影響。
?? ?校驗矩陣的變換對于編碼尤為重要,本文采用隨機法構(gòu)造校驗矩陣,并分別探討了采用高斯消元法、基于下三角矩陣以及基于近似下三角矩陣三種變換方法的特點及理論。相比之下,高斯消元法破壞了矩陣原有的稀疏性,導(dǎo)致運算量較大,性能上也不如后面二者優(yōu)越。
?? ?LDPC的譯碼方法有很多,經(jīng)典的主要有BF、BP、SPA等算法。各有優(yōu)勢。本文中進行性能仿真時采用的是SPA譯碼算法,在譯碼過程中,比特節(jié)點和校驗節(jié)點之間傳遞的是置信度信息,即概率值。算法的原理都在文中也做了詳細(xì)的介紹。
?? ?任何一項技術(shù)的發(fā)明都是為了更好的應(yīng)用,目前LDPC碼的理論發(fā)展日趨成熟,我相信:隨著硬件技術(shù)不斷發(fā)展,加之更加成熟的理論做基礎(chǔ),LDPC碼作為一種優(yōu)秀的信道編碼一定會在未來的通信系統(tǒng)中發(fā)揮出巨大的作用。
?
參考文獻
[1] ?R.G. Gallager. Low density parity-check codes. IRE Trans. Inf. Theory, 8(1):21-28, Jan. 1962.?
[2] ?Hagiwara, M. & Fossorier, M. P. C. &Imai, 等. Fixed Initialization Decoding of LDPC Codes Over a Binary Symmetric Channel[J]. IEEE Transactions on Information Theory, 2012, 58(4).
[3] ?Sridhara D, Kelley C, Rosenthal A J. Tree-based construction of LDPC codes[C]. Information Theory, Institut fur Mathematik, Zurich Univ. , 4-9 Sept. 2005:845 - 849.?
[4] ?Jin Lu & Jos M. F. Moura. TS-LDPC Codes: Turbo-Structured Codes With Large Girth[J]. IEEE Transactions on Information Theory, March 2007, 53(3): 1080-1094.
[5] ?Moura, JMF, Lu J, etal. Structured low-density parity-check codes[J]. IEEE Signal Processing Magazine, Jan. 2004, 21(1):42-55.
[6]?? ?Mackay D J C. Good error-correcting codes based on very sparse matrices. IEEE Trans. Inform. Theory, 1999; 45(2): 399-431
[7]?? ?Richardson T J, Urbanke R L. Efficient encoding of low-density parity –check code. IEEE Transactions on Information Technology, 2001; 47(2): 638-656
[8] ?戴迎春, 趙忠文, 宋楠. 基于對角線法的LDPC編碼[A]. 全國第五屆信號和智能信息處理與應(yīng)用學(xué)術(shù)會議專刊(第一冊)[C], 2011.
[9] ?王鵬. LDPC碼的編譯碼原理及編碼設(shè)計[D]. 西安電子科技大學(xué), 2004年1月..
[10] ?唐啟榮. LDPC編碼的研究與硬件實現(xiàn)[D]. 北京郵電大學(xué), 2007年3月.
[11] ?劉英, 張志亮. 基于Matlab平臺的LDPC碼快速仿真研究[J]. 現(xiàn)代電子技術(shù), 2010年(9):121-122,128.
[12] ?王冬梅,王秀芳,浦曉威,路敬偉. 基于Matlab的LDPC碼的研究[J]. 科學(xué)技術(shù)與工程, 2010年4月, 10(10):2472-2475.
[13] ?岳田, 裴保臣. LDPC 碼的幾種譯碼算法比較[J]. 無線電通信技術(shù), 2006, 32(4):24-26.
[14] ?鄧薇. MATLAB函數(shù)速查手冊. 北京:人民郵電出版社, 2008年10月.
[15] ?何樹彬. LDPC碼編譯碼原理及應(yīng)用. 成都:電子科技大學(xué),2005.
[16] ?徐明遠, 邵玉斌. MATLAB仿真在現(xiàn)代通信中的應(yīng)用. 西安:西安電子科技大學(xué)出版社,2011年4月.
[17] ?韓輝. LDPC碼編譯碼技術(shù)研究[D]. 中國科技大學(xué), 2009.
[18] ?馬龍. LDPC碼簡化譯碼算法研究[D]. 重慶郵電大學(xué), 2007.
[19] ?李金根, 鄭紫薇. 低密度奇偶校驗碼的編碼方法研究 [R]. 大連海事大學(xué)信息工程學(xué)院:, 2009.
[20] ?陳旭燦, 劉冬培. 改進的LDPC譯碼算法研究[N]. 電子科技大學(xué)學(xué)報, 2010年3月(第39卷第2期).
?
總結(jié)
以上是生活随笔為你收集整理的基于Matlab的LDPC码性能研究毕业设计(含源文件)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP笔记-连接MySQL数据库及查询数
- 下一篇: xilinx7中管脚mrcc和srcc_