版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
./WORD格式可編輯本科生畢業(yè)論文〔設計題目:MATLAB實現卷積碼編譯碼專業(yè)代碼:作者姓名:學號:單位:指導教師:年月日.目錄前言11.糾錯碼基本理論21.1糾錯碼基本理論2糾錯碼概念2基本原理和性能參數21.2幾種常用的糾錯碼62.卷積碼的基本理論82.1卷積碼介紹82.1.1卷積碼的差錯控制原理82.2卷積碼編碼原理102.2.1卷積碼解析表示法102.2.2卷積碼圖形表示法112.3卷積碼譯碼原理152.3.1卷積碼三種譯碼方式152.3.2Viterbi譯碼原理163.卷積碼編譯碼及MATLAB仿真183.1Matlab概述183.1.1Matlab的特點193.1.2Matlab工具箱和內容193.2卷積碼編碼及仿真20編碼程序203.3信道傳輸過程仿真213.4維特比譯碼程序及仿真223.4.1維特比譯碼算法解析233.4.2Viterbi譯碼程序253.4.3viterbi譯碼matlab仿真28信噪比對卷積碼譯碼性能的影響28碼率對卷積碼譯碼性能的影響303.4.6約束長度對卷積碼誤碼性能的影響31回溯長度對卷積碼誤碼性能的影響323.4.8判決方式對卷積碼誤碼性能的影響324.結論及展望344.1結論344.2展望355.結束語36參考文獻37致謝38附錄39摘要在數字通信系統(tǒng)中,通常采用差錯控制編碼來提高系統(tǒng)的可靠性。自P.Elias首次提出卷積碼編碼以來,這一編碼技術至今仍顯示出強大的生命力。目前,卷積碼已廣泛應用在無線通信標準中,如GSM,CDMA2000和IS-95等無線通信標準中。本文簡單介紹了糾錯碼的基本原理,論述了卷積碼編譯碼原理和算法,并通過matlab仿真對卷積碼性能進行研究,重點比較分析了不同碼率、不同約束長度、不同回溯長度以及不同譯碼判決方式對Viterbi譯碼性能的影響,并得出相關結論。關鍵詞:卷積碼,Viterbi,Matlab,誤碼率,數字通信系統(tǒng)AbstractIndigitalcommunicationsystems,errorcontrolcodingisusuallyusedtoimprovesystemreliability.SinceP.Eliasputforwardtheconvolutionalcodingthefirsttime,thecodingisstillshowingstrongvitality.,hasbecomewidelyusedinsatellitecommunications,wirelesscommunicationsandmanyothercommunicationsystemsasakindofchannelcodingmethod.suchasGSM,CDMA2000andhasbeenawirelesscommunicationstandardsofIS-95.Thisarticleintroducesthebasicprinciplesoferror-correctingcodes,mainlyreasearchtheprincipleoftheconvolutionalcodeencodinganddecodingandthealgorithms.Throughthematlabsimulation,westudytheperformanceofconvolutionalcode,especillytheperformanceoftheviterbidecodingwithdifferentbitrates,differentConstraintlength,differenttracebackdeptheanddifferentdecisiontypes,compareandmakeconclusions.Keywords:convolutionalcodes,Viterbi,Matlab,biterrorrate,thedigitalcommunicationsystem...MATLAB實現卷積碼編譯碼前言信道編碼是數字通信系統(tǒng)的重要組成部分,隨著通信技術的不斷發(fā)展,信道編碼技術也在不斷地發(fā)展。在通信系統(tǒng)中,信道傳輸特性不理想以及噪聲的存在,會導致接收端出現接收信號的錯誤,因此用于信道糾錯的信道編碼是數字通信系統(tǒng)中極為重要的一個環(huán)節(jié)。二十世紀40年代香農定理的出現為人們指出了糾錯碼的研究方向。根據香農的有噪信道編碼定理,可以推導出一個碼率為R的編碼通信系統(tǒng)達到無誤碼傳輸狀態(tài)所必須的最小信噪比的理論極限。這個理論極限通常稱為香農限,它說明對一個碼率為R的編碼通信系統(tǒng),只有當SNR超過這個極限值時才能獲得無誤碼傳輸。只要SNR高于這個極限值,香農的編碼定理保證了能夠獲得無誤碼傳輸的〔可能相當復雜編碼通信系統(tǒng)的存在性。另外,香農證明了在采用無限長的隨機編碼時,數據可以以接近信道容量的速率幾乎無誤碼的傳輸,從而為信道編碼的研究奠定了基礎。本文主要介紹了信道編碼的基本理論,著重研究了卷積碼的編碼方法和viterbi譯碼,介紹了MATLAB的使用方法,并編寫卷積碼的編碼和解碼程序,通過MATLAB仿真軟件對卷積碼編解碼進行仿真。重點對viterbi譯碼進行了研究,該算法就是利用卷積碼編碼器的格圖來計算路徑度量,選擇從起始時刻到終止時刻的惟一幸存路徑作為最大似然路徑,沿著最大似然路徑回溯到開始時刻,所走過的路徑對應的編碼輸出就是最大似然譯碼輸出序列。它是一種最大似然譯碼方法,當編碼約束長度不大、或者誤碼率要求不是很高的情況下,Viterbi譯碼器設備比較簡單,計算速度快,因而Viterbi譯碼器被廣泛應用于各種領域。1.糾錯碼基本理論1.1糾錯碼基本理論1.1.1糾錯碼概念糾錯碼<errorcorrectingcode>,在傳輸過程中發(fā)生錯誤后能在收端自行發(fā)現或糾正的碼。僅用來發(fā)現錯誤的碼一般常稱為檢錯碼。為使一種碼具有檢錯或糾錯能力,須對原碼字增加多余的碼元,以擴大碼字之間的差別,即把原碼字按某種規(guī)則變成有一定剩余度〔見信源編碼的碼字,并使每個碼字的碼之間有一定的關系。關系的建立稱為編碼。碼字到達收端后,可以根據編碼規(guī)則是否滿足以判定有無錯誤。當不能滿足時,按一定規(guī)則確定錯誤所在位置并予以糾正。糾錯并恢復原碼字的過程稱為譯碼。檢錯碼與其他手段結合使用,可以糾錯。1.1.2基本原理和性能參數糾錯碼編碼的基本思想是在被傳輸的信息碼元中附加一些監(jiān)督碼元,并且使它們之間確定某一種關系,根據傳輸過程中這種關系是否被破壞來發(fā)現或糾正錯誤??梢娺@種差錯控制能力是用增加信息量的冗余度來換取的。設編碼后的碼組長度、碼組中所含信息碼元以及監(jiān)督碼元的個數分別為n、k和r,三者間滿足n=k+r,定義編碼效率為R=k/n=1-r/n。可見碼組長度一定時,所加入的監(jiān)督碼元個數越多,編碼效率越低。香農的信道編碼定理指出:對于一個給定的有擾信道,若信道容量為C,只要發(fā)送端以低于C的速率R發(fā)送信息,其中R為編碼器的輸入二進制碼元速率,則一定存在一種編碼方法,使編碼錯誤概率P隨著碼長n的增加,按指數下降到任意小的值??梢员硎緸镼UOTE<1-1>其中E<R>稱為誤差指數,它與R和C的關系如圖1-1所示。圖1-1誤差指數曲線由定理有如下結論:<1>.在碼長及發(fā)送信息速率一定的情況下,為減小P可以增大信道容量。由圖2-1可知,E<R>隨信道容量的增加而增大。由式<1-1>可知,錯誤概率隨E<R>的增大而指數下降。<2>.在信道容量及發(fā)送信息速率一定的條件下,增加碼長,可以使錯誤概率指數下降。對于實際應用來說,此時的設備復雜性和譯碼延時也隨之增加。香農的信道編碼定理為信道編碼奠定了理論基礎,雖然定理本身并沒有給出具體的差錯控制編碼方法和糾錯碼的結構,但它從理論上為信道編碼的發(fā)展指出了努力方向。我們用3位二進制碼組來說明檢錯糾錯的基本原理。3位二進制碼元共有8種可能的組合:000、001、010、011、100、101、110、111。如果這8種碼組都可傳遞消息,若在傳輸過程中發(fā)生一個誤碼,則一種碼組會錯誤地變成另一種碼組。由于每一種碼組都可能出現,沒有多余的信息量,因此接收端不可能發(fā)現錯誤,認為發(fā)送的就是另一種碼組。如果選其中000、011、101、110來傳送消息,這相當于只傳遞00、01、10、11四種信息,而第3位是附加的。這位附加的監(jiān)督碼元與前面兩位碼元一起,保證碼組中"1"碼的個數為偶數。這4種碼組稱為許用碼組。另外4種碼組不滿足這種校驗關系,稱為禁用碼組,它們在編碼后的發(fā)送碼元中不會出現。接收時一旦發(fā)現有禁用碼組,就表明傳輸過程中發(fā)生了錯誤。用這種簡單的校驗關系可以發(fā)現1個或3個錯誤,但不能糾正錯誤。因為當接收到的碼組為禁用碼組時,比如為010,無法判斷發(fā)送的是哪個碼組。雖然原發(fā)送碼組為101的可能性很小<因為3個誤碼的概率一般很小>,但不能絕對排除,即使傳輸過程中只發(fā)生一個誤碼,也有三種可能的發(fā)送碼組即000、011和110。假如我們進一步將許用碼組限制為二種即000和111,顯然這樣可以發(fā)現所有2位以下的誤碼,若用來糾錯,可以用最大似然準則糾正1位錯誤??梢杂靡粋€三維立方體來表示上述3位二進制碼組的例子,如圖1-2所示。圖中立方體各頂點分別表示8位碼組,3位碼元依次表示x、y、z軸的坐標。zzyx<0,0,1><0,1,1><0,0,0><1,1,1><0,1,0><1,1,0><1,0,0><1,0,1>圖1-2碼距的幾何解釋這里定義碼組中非零碼元的數目為碼組的重量,簡稱碼重。比如100碼組的碼重為1,101碼組的碼重為2。定義兩個碼組中對應碼位上具有不同二進制碼元的位數為兩碼組的距離,稱為漢明<Hamming>距,簡稱碼距。在前面3位二進制碼組的例子中,當8種碼組均為許用碼組時,兩碼組間的最小距離為1,稱這種編碼的最小碼距為1,一般記為dmin=l;當選4種碼組為許用碼組時,最小碼距dmin=2;當用2種碼組作為許用碼組時,dmin=3。從圖1-2所示的立方體可以看出,碼距就是從一個頂點沿立方體各邊移到另一個頂點所經過的最少邊數。圖中粗線表示000與111之間的一條最短路徑。很容易得出前例中各種情況下的碼距。根據以上分析可知,編碼的最小碼距直接關系到這種碼的檢錯和糾錯能力,所以最小碼距是差錯控制編碼的一個重要參數。對于分組碼一般有以下結論:<1>在一個碼組內檢測e個誤碼,要求最小碼距<1-2><2>在一個碼組內糾正t個誤碼,要求最小碼距QUOTE<1-3><3>在一個碼組內糾正t個誤碼,同時檢測e<eQUOTEt>個誤碼,要求最小碼距<1-4>這些結論可以用圖1-3所示的幾何圖形簡單的給予證明。圖1-3碼距與檢錯和糾錯能力的關系圖1-3<a>中C表示某碼組,當誤碼不超過e個時,該碼組的位置移動將不超出以它為圓心以e為半徑的圓。只要其它任何許用碼組都不落入此圓內,則C發(fā)生e個誤碼時就不可能與其它許用碼組混淆。這意味著其它許用碼組必須位于以C為圓心,以e+1為半徑的圓上或圓外。因此該碼的最小碼距dmin為e+1。圖1-3<b>中C1、C2分別表示任意兩個許用碼組,當各自誤碼不超過t個時,發(fā)生誤碼后兩碼組的位置移動將各自不超出以C1、C2為圓心,t為半徑的圓。只要這兩個圓不相交,當誤碼小于t個時,根據它們落在哪個圓內可以正確地判斷為C1或C2,就是說可以糾正錯誤。以C1、C2為圓心的兩圓不相交的最近圓心距離為2t+l,即為糾正t個誤碼的最小碼距。式<1-1>所述情形中糾正t個誤碼同時檢測e個誤碼,是指當誤碼不超過t個時,能自動糾正誤碼,而當誤碼超過t個時,則不可能糾正錯誤但仍可檢測e個誤碼。圖1-3<c>中C1、C2分別為兩個許用碼組,在最壞情況下C1發(fā)生e個誤碼而C2發(fā)生t個誤碼,為了保證此時兩碼組仍不發(fā)生混淆,則要求以C1為圓心e為半徑的圓必須與以C2為圓心t為半徑的圓不發(fā)生交疊,即要求最小碼距dmin>=t+e+1??梢奷min體現了碼組的糾、檢錯能力。碼組間最小距離越大,說明碼字間最小差別越大,抗干擾能力就越強。由于編碼系統(tǒng)具有糾錯能力,因此在達到同樣誤碼率要求時,編碼系統(tǒng)會使所要求的輸入信噪比低于非編碼系統(tǒng),為此引入了編碼增益的概念。其定義為,在給定誤碼率下,非編碼系統(tǒng)與編碼系統(tǒng)之間所需信噪比Eb/N0之差<用dB表示>。采用不同的編碼會得到不同的編碼增益,但編碼增益的提高要以增加系統(tǒng)帶寬或復雜度來換取。<2.1.3>糾錯碼實現糾錯碼實現中最復雜的部分是譯碼。它是糾錯碼能否應用的關鍵。根據式<1>,采用的碼長n越大,則誤碼率越小。但n越大,編譯碼設備也越復雜,且延遲也越大。人們希望找到的譯碼方法是:誤碼率隨碼長n的增加按指數規(guī)律下降;譯碼的復雜程度隨碼長n的增加接近線性地增加;譯碼的計算量則與碼長n基本無關??上?已經找到的碼能滿足這樣要求的很少。不過由于大規(guī)模集成電路的發(fā)展,既使應用比較復雜的但性能良好的碼,成本也并不太高。因此,糾錯碼的應用越來越廣泛。糾錯碼傳輸的都是數字信號。這既可用硬件實現,也可用軟件實現。前者主要用各種數字電路,主要是采用大規(guī)模集成電路。軟件實現特別適合計算機通信網等場合。因為這時可以直接利用網中的計算機進行編碼和譯碼,不需要另加專用設備。硬件實現的速度較高,比軟件可快幾個數量級。在傳信率一定的情況下,如果采用糾錯碼提高可靠性,要求信道的傳輸率增加,帶寬加大。因此,糾錯碼主要用于功率受限制而帶寬較大的信道,如衛(wèi)星、散射等系統(tǒng)中。糾錯碼還用在一些可靠性要求較高,但設備或器件的可靠性較差,而余量較大的場合,如磁帶、磁盤和半導體存儲器等。在分組碼的研究中,譜分析的方法受到人們的重視。糾同步錯誤碼、算術碼、不對稱碼、不等錯誤糾正碼等,也得到較多的研究.1.2幾種常用的糾錯碼<1>RS編碼RS碼即里德-所羅門碼,它是能夠糾正多個錯誤的糾錯碼,RS碼為〔204,188,t=8,其中t是可抗長度字節(jié)數,對應的188符號,監(jiān)督段為16字節(jié)<開銷字節(jié)段。實際中實施〔255,239,t=8的RS編碼,即在204字節(jié)〔包括同步字節(jié)前添加51個全"0"字節(jié),產生RS碼后丟棄前面51個空字節(jié),形成截短的〔204,188RS碼。RS的編碼效率是:188/204。<2>卷積碼卷積碼非常適用于糾正隨機錯誤,但是,解碼算法本身的特性卻是:如果在解碼過程中發(fā)生錯誤,解碼器可能會導致突發(fā)性錯誤。為此在卷積碼的上部采用RS碼塊,RS碼適用于檢測和校正那些由解碼器產生的突發(fā)性錯誤。所以卷積碼和RS碼結合在一起可以起到相互補償的作用。卷積碼分為兩種:①基本卷積碼:基本卷積碼編碼效率為,η=1/2,編碼效率較低,優(yōu)點是糾錯能力強。②收縮卷積碼:如果傳輸信道質量較好,為提高編碼效率,可以采樣收縮截短卷積碼。有編碼效率為:η=1/2、2/3、3/4、5/6、7/8這幾種編碼效率的收縮卷積碼。編碼效率高,一定帶寬內可傳輸的有效比特率增大,但糾錯能力越減弱。<3>Turbo碼1993年誕生的Turbo碼,單片Turbo碼的編碼/解碼器,運行速率達40Mb/s。該芯片集成了一個32×32交織器,其性能和傳統(tǒng)的RS外碼和卷積內碼的級聯一樣好。所以Turbo碼是一種先進的信道編碼技術,由于其不需要進行兩次編碼,所以其編碼效率比傳統(tǒng)的RS+卷積碼要好。<4>交織在實際應用中,比特差錯經常成串發(fā)生,這是由于持續(xù)時間較長的衰落谷點會影響到幾個連續(xù)的比特,而信道編碼僅在檢測和校正單個差錯和不太長的差錯串時才最有效〔如RS只能糾正8個字節(jié)的錯誤。為了糾正這些成串發(fā)生的比特差錯及一些突發(fā)錯誤,可以運用交織技術來分散這些誤差,使長串的比特差錯變成短串差錯,從而可以用前向碼對其糾錯,例如:在DVB-C系統(tǒng)中,RS<204,188>的糾錯能力是8個字節(jié),交織深度為12,那么糾可抗長度為8×12=96個字節(jié)的突發(fā)錯誤。實現交織和解交織一般使用卷積方式。交織技術對已編碼的信號按一定規(guī)則重新排列,解交織后突發(fā)性錯誤在時間上被分散,使其類似于獨立發(fā)生的隨機錯誤,從而前向糾錯編碼可以有效的進行糾錯,前向糾錯碼加交積的作用可以理解為擴展了前向糾錯的可抗長度字節(jié)。糾錯能力強的編碼一般要求的交織深度相對較低。糾錯能力弱的則要求更深的交織深度。一般來說,對數據進行傳輸時,在發(fā)端先對數據進行FEC編碼,然后再進行交積處理。在收端次序和發(fā)端相反,先做去交積處理完成誤差分散,再FEC解碼實現數據糾錯。交積不會增加信道的數據碼元。<5>偽隨機序列擾碼進行基帶信號傳輸的缺點是其頻譜會因數據出現連"1"和連"0"而包含大的低頻成分,不適應信道的傳輸特性,也不利于從中提取出時鐘信息。解決辦法之一是采用擾碼技術,使信號受到隨機化處理,變?yōu)閭坞S機序列,又稱為"數據隨機化"和"能量擴散"處理。擾碼不但能改善位定時的恢復質量,還可以使信號頻譜平滑,使幀同步和自適應同步和自適應時域均衡等系統(tǒng)的性能得到改善。擾碼雖然"擾亂"了原有數據的本來規(guī)律,但因為是人為的"擾亂",在接收端很容易去加擾,恢復成原數據流。實現加擾和解碼,需要產生偽隨機二進制序列〔PRBS再與輸入數據逐個比特作運算。PRBS也稱為m序列,這種m序列與TS的數據碼流進行模2加運算后,數據流中的"1"和"0"的連續(xù)游程都很短,且出現的概率基本相同。利用偽隨機序列進行擾碼也是實現數字信號高保密性傳輸的重要手段之一。一般將信源產生的二進制數字信息和一個周期很長的偽隨即序列模2相加,就可將原信息變成不可理解的另一序列。這種信號在信道中傳輸自然具有高度保密性。在接收端將接收信號再加上〔模2和同樣的偽隨機序列,就恢復為原來發(fā)送的信息。2.卷積碼的基本理論2.1卷積碼介紹卷積碼最早于1955年由Elias提出,稍后,1957年Wozencraft提出了一種有效地譯碼方法即序列譯碼。1963年Massey提出了一種性能稍差但是比較實用的門限譯碼方法,使得卷積碼開始走向實用化。而后1967年Viterbi提出了最大似然譯碼算法,它對存儲級數較小的卷積碼很容易實現,被稱作Viterbi譯碼算法,廣泛的應用于現代通信中。2.1.1卷積碼的差錯控制原理卷積碼是一種性能優(yōu)越的信道編碼,它的編碼器和解碼器都比較易于實現,同時還具有較強的糾錯能力,這使得它的使用越來越廣泛。我們在一些資料上可以找到關于分組碼的一些介紹,分組碼的實現是將編碼信息分組單獨進行編碼,因此無論是在編碼還是譯碼的過程中不同碼組之間的碼元無關。卷積碼和分組碼的根本區(qū)別在于,它不是把信息序列分組后再進行單獨編碼,而是由連續(xù)輸入的信息序列得到連續(xù)輸出的已編碼序列。即進行分組編碼時,其本組中的n-k個校驗元僅與本組的k個信息元有關,而與其它各組信息無關;但在卷積碼中,其編碼器將k個信息碼元編為n個碼元時,這n個碼元不僅與當前段的k個信息有關,而且與前面的〔N-1段信息有關〔N為編碼的約束長度。同樣,在卷積碼譯碼過程中,不僅從此時刻收到的碼組中提取譯碼信息,而且還要利用以前或以后各時刻收到的碼組中提取有關信息。而且卷積碼的糾錯能力隨約束長度的增加而增強,差錯率則隨著約束長度增加而呈指數下降。卷積碼<n,k,N>主要用來糾隨機錯誤,它的碼元與前后碼元有一定的約束關系,編碼復雜度可用編碼約束長度N*n來表示。一般地,最小距離d表明了卷積碼在連續(xù)N段以內的距離特性,該碼可以在N個連續(xù)碼流內糾正<d-1>/2個錯誤。卷積碼的糾錯能力不僅與約束長度有關,還與采用的譯碼方式有關??傊?由于n,k較小,且利用了各組之間的相關性,在同樣的碼率和設備的復雜性條件下,無論理論上還是實踐上都證明:卷積碼的性能至少不比分組碼差。以二元碼為例,輸入信息序列為u=<u0,u1,…>,其多項式表示為u<x>=u0+u1x+…+ulxl+…。編碼器的連接可用多項式表示為g<1,1><x>=1+x+x2和g<1,2><x>=1+x2,稱為碼的子生成多項式。它們的系數矢量g<1,1>=<111>和g<1,2>=<101>稱作碼的子生成元。以子生成多項式為陣元構成的多項式矩陣G<x>=[g<1,1><x>,g<1,2><x>],稱為碼的生成多項式矩陣。由生成元構成的半無限矩陣稱為碼的生成矩陣。其中<11,10,11>是由g<1,1>和g<1,2>交叉連接構成。編碼器輸出序列為c=u·G,稱為碼序列,其多項式表示為c<x>,它可看作是兩個子碼序列c<1><x>和c<2><x>經過合路開關S合成的,其中c<1><x>=u<x>g<1,1><x>和c<2><x>=u<x>g<1,2><x>,它們分別是信息序列和相應子生成元的卷積,卷積碼由此得名。在一般情況下,輸入信息序列經過一個時分開關被分成k0個子序列,分別以u<x>表示,其中i=1,2,…k0,即u<x>=[u<x>,…,u<x>]。編碼器的結構由k0×n0階生成多項式矩陣給定。輸出碼序列由n0個子序列組成,即c<x>=[c<x>,c<x>,…,c<x>],且c<x>=u<x>·G<x>。若m是所有子生成多項式g<x>中最高次式的次數,稱這種碼為<n0,k0,N>卷積碼。卷積碼中編碼后的n個碼元不僅與當前段的k個信息有關,而且也與前面〔N-1段的信息有關,編碼過程中相互關聯的碼元為nN個。因此,這N時間內的碼元數目nN通常被稱為這種碼的約束長度。卷積碼的糾錯能力隨著N的增加而增大,在編碼器復雜程度相同的情況下,卷段積碼的性能優(yōu)于分組碼。卷積碼也是分組的,但它的監(jiān)督元不僅與本組的信息元有關,而且還與前若干組的信息元有關。卷積碼根據需要,有不同的結構及相應的糾錯能力,但都有類似的編碼規(guī)律。值得指出的是一種<2,1,N>卷積碼,其碼率為1/2,它的監(jiān)督位只有1位,編碼效率較高,也比較簡單。如使用較長的約束長度,則既可以糾正突發(fā)差錯,也可以糾正隨機差錯。2.2卷積碼編碼原理卷積碼一般表示為<n,k,N>的形式,即將k個信息比特編碼為n個比特的碼組,N為編碼約束長度,說明編碼過程中相互約束的碼段個數。卷積碼編碼后的n個碼元不僅與當前組的k個信息比特有關,還與前N-1個輸入組的信息比特有關。編碼過程中相互關聯的碼元有N*n個。R=k/n是編碼效率。編碼效率和約束長度是衡量卷積碼的兩個重要參數。典型的卷積碼一般選n,k較小,但N值可取較大<>10>,以獲得簡單而高性能的卷積碼。卷積碼的編碼描述方式有很多種:沖激響應描述法、生成矩陣描述法、多項式乘積描述法、狀態(tài)圖描述,樹圖描述,網格圖描述等。2.2.1卷積碼解析表示法卷積碼的解析表示發(fā)大致可以分為離散卷積法,生成矩陣法,碼多項式法。下面以離散卷積為例進行說明。卷積碼的編碼器一般比較簡單,為一個具有k個輸入端,n個輸出端,m級移位寄存器的有限狀態(tài)有記憶系統(tǒng)。下圖所示為<2,1,7>卷積碼的編碼器。圖2-1〔2,1,7卷積碼編碼器若輸入序列為u=<u0u1u2u3……>,則對應兩個碼字序列C1=<ca0ca1ca2ca3……>和C2=<cb0cb1cb2cb3……>相應的編碼方程可寫為P1=u?C1,P2=u?C2,P=<P1,P2>。"?"符號表示卷積運算,P1,P2表示編碼器的兩個沖激響應,即編碼器的輸出可以由輸入序列和編碼器的兩個沖擊響應卷積而得到,故稱為卷積碼。這里的沖激響應指:當輸入為[10000……]序列時,所觀察到的兩個輸出序列值。由于上圖N值為7,故沖激響應至多可持續(xù)到第7位,可寫為P1=[1111001],P2=[1011011]然后將兩個輸出端的碼字序列合并為一個碼字序列為C=<ca0cb0ca1cb1ca2cb2……>。若輸入信息序列為[1101];則P1=[1001010101],P2=[1111101111],C=[11010111011001110111]。如圖3-2所示為<2,1,3>卷積碼的編碼器,也是本次課程設計所研究的卷積碼編碼器,由于其生成沖激響應分別為[111]和[101],故被稱為<7,5>碼。ZZ-1Z-1++圖2-2〔2,1,3卷積碼編碼器2.2.2卷積碼圖形表示法除了用解析法描述卷積碼的編碼外,還可以使用比較形象的圖形法來表示卷積碼。比較常用的有狀態(tài)圖法,樹圖法和網格圖法。狀態(tài)圖法:由于卷積碼編碼器在下一時刻的輸出取決于編碼器的當前狀態(tài)和下一時刻的輸入,而編碼器當前狀態(tài)取決于編碼器當前各移位寄存器的存儲內容。稱編碼器當前各移位寄存器存儲內容<0或1>為編碼器在該時刻的狀態(tài)<此狀態(tài)代表記憶以前的輸入信息>。隨著信息序列的不斷輸入,編碼器不斷從一個狀態(tài)轉移到另外一個狀態(tài),并且輸出相應的編碼序列。編碼器的總可能狀態(tài)數為2mk個。對<7,5>碼的編碼器來說,n=2,k=1,N=3,m=2。共有四個可能狀態(tài),其狀態(tài)圖如圖2-3所示:0/00
0/00
001001111/101/011/000/100/010/111/11圖2-3卷積碼狀態(tài)圖圖中四個方塊表示狀態(tài),狀態(tài)間的連線與箭頭表示轉移方向,連線上的數字表示是狀態(tài)發(fā)生轉移的到來比特,斜杠后的數字由一個狀態(tài)到另一個狀態(tài)轉移時的輸出碼字。如當前狀態(tài)為11,輸入信息為0,則轉移到01狀態(tài)并輸出01碼字,若輸入信息為1,則依然為11狀態(tài),并輸出10碼字。樹圖法描述卷積碼的編碼過程除了用它的生成矩陣QUOTE外,還可以用半無限碼樹圖。卷積碼的樹圖表示是一種形象的表示卷積碼編碼過程的方法。卷積碼的各種距離度量與樹圖有密切關系。以<2,1,3>卷積碼為例,它的生成多項式矩陣和生成矩陣分別為:QUOTE<2-1><2-2>若輸入編碼器的信息序列M<D>=<m0,m1,m2…..>=<11011…..>,則由編碼器輸出碼序列C為C=M=<11,01,01,00,01,01,>=<C0,Cl,C2,C3,…><2-3>可以把這個編碼過程用如圖3-4所示的半無限碼樹圖來說明。設編碼器的初始狀態(tài)為0,碼樹中每個節(jié)點的下一級的上面的分支表示輸入為0,下面的分支表示輸入為l。每個分支上面的數字表示對應次分支的輸出。因此輸入不同的信息序列,編碼器就走不同的路徑,輸出不同的碼序列。按照上面的例子,則編碼過程對應碼樹中粗線表示的一條路徑。對該碼序列來說,樹圖上的這條路徑就是它的正確路徑。對于一般的二進制<n,k,N>編碼器來說,每次輸入的是k個信息元,有2k個可能的信息組,這對應于從碼樹每一個節(jié)點上分出的分支樹有2k條,相應于2kQUOTE個不同信息組的輸入,并且每條都有n個碼元,作為與此相應的輸出子碼。由以上討論可知,卷積碼編碼過程的實質,是在輸入信息序列的控制下,編碼器沿碼樹通過某一特定路徑的過程。顯然,譯碼過程就是根據接收序列和信道干擾的統(tǒng)計特性,譯碼器在原碼樹上力圖恢復原來編碼器所走的路徑,即尋找正確路徑的過程。其過程如圖2-4所示。000000S011S01100S0S010S20111S2011101SS000101100101100110101100S200110101100S2S2S301S301S000S000S01110S011101S1S2SS2110111S110111S100000000000101S3S3S310S310圖2-4<2,1,3>卷積碼的樹圖網格圖法:網格圖可以描述卷積碼的狀態(tài)隨時間推移而轉移的情況。該圖縱坐標表示所有狀態(tài),橫坐標表示時間。網格圖在卷積碼的概率譯碼,特別是Viterbi譯碼中非常重要,它綜合了狀態(tài)圖法直觀簡單和樹圖法時序關系清晰的特點。如圖2-5所示狀態(tài)狀態(tài)t1t2t3t4t5t621111111111102202002020211102010000111圖2-5譯碼器網格圖圖中實線表示輸入0時所走分支,虛線表示輸入1時所走分支,編碼時只需從起始狀態(tài)開始依次選擇路線并讀出輸出即可。假設從a狀態(tài)開始,輸入為[1011],則可由圖中讀出輸出為[11101001]。2.3卷積碼譯碼原理2.3.1卷積碼三種譯碼方式<1>代數譯碼代數譯碼是將卷積碼的一個編碼約束長度的碼段看作是[n0<m+1>,k0<m+1>]線性分組碼,每次根據<m+1>分支長接收數字,對相應的最早的那個分支上的信息數字進行估計,然后向前推進一個分支。如果假設輸入的信息序列為=<10111>,相應的編碼輸出序列為在未超出編碼約束長度的情況下,可以通過譯碼時將接受序列與所有可能的輸出編碼序列進行比較,通過比較可以得到最小距離,進而可以得到可能的最大概率。按同樣方法判決,將每一位進行比較,進行糾錯。若此時<2>維特比譯碼維特比譯碼是根據接收序列在碼的格圖上找出一條與接收序列距離〔或其他量度為最小的一種算法。它和運籌學中求最短路徑譯碼器從某個狀態(tài),例如從狀態(tài)ɑ出發(fā),每次向右延伸一個分支〔對于l<L,從每個節(jié)點出發(fā)都有2種可能的延伸,其中L是信息序列段數,對l≥L,只有一種可能,并與接收數字相應分支進行比較,計算它們之間的距離,然后將計算所得距離加到被延伸路徑的累積距離值中。對到達每個狀態(tài)的各條路徑〔有2條的距離累積值進行比較,保留距離值最小的一條路徑,稱為幸存路徑〔當有兩條以上取最小值時,可任取其中之一,譯碼過程如圖。圖中標出到達各級節(jié)點的幸存路徑的距離累積值。對給定R的估值序列為=<10111>。這種算法所保留的路徑與接收序列之間的似然概率為最大,所以又稱為最大似然譯碼。這種譯碼的譯碼約束長度常為編碼約束長度的數倍,因而可以糾正不多于<df/2>個錯誤。維特比譯碼器的復雜性隨m呈指數增大。實用中m不大于10。它在衛(wèi)星和深空通信中有廣泛的應用。在解決碼間串擾和數據壓縮中也可應用。〔3序貫譯碼序貫譯碼是根據接收序列和編碼規(guī)則,在整個碼樹中搜索〔既可以前進,也可以后退出一條與接收序列距離〔或其他量度最小的一種算法。由于它的譯碼器的復雜性隨m值增大而線性增長,在實用中可以選用較大的m值〔如20~40以保證更高的可靠性。許多深空和海事通信系統(tǒng)都采用序貫譯碼。2.3.2Viterbi譯碼原理卷積碼概率譯碼的基本思路是:以接收碼流為基礎,逐個計算它與其他所有可能出現的、連續(xù)的網格圖路徑的距離,選出其中可能性最大的一條作為譯碼估值輸出。概率最大在大多數場合可解釋為距離最小,這種最小距離譯碼體現的正是最大似然的準則。卷積碼的最大似然譯碼與分組碼的最大似然譯碼在原理上是一樣的,但實現方法上略有不同。主要區(qū)別在于:分組碼是孤立地求解單個碼組的相似度,而卷積碼是求碼字序列之間的相似度?;诰W格圖搜索的譯碼是實現最大似然判決的重要方法和途徑。用格圖描述時,由于路徑的匯聚消除了樹狀圖中的多余度,譯碼過程中只需考慮整個路徑集合中那些使似然函數最大的路徑。如果在某一點上發(fā)現某條路徑已不可能獲得最大對數似然函數,就放棄這條路徑,然后在剩下的"幸存"路徑中重新選擇路徑。這樣一直進行到最后第L級<L為發(fā)送序列的長度>。由于這種方法較早地丟棄了那些不可能的路徑,從而減輕了譯碼的工作量,Viterbi譯碼正是基于這種想法。對于<n,k,N>卷積碼,其網格圖中共2kL種狀態(tài)。由網格圖的前N-1條連續(xù)支路構成的路徑互不相交,即最初2k_1條路徑各不相同,當接收到第N條支路時,每條路徑都有2條支路延伸到第N級上,而第N級上的每兩條支路又都匯聚在一個節(jié)點上。在Viterbi譯碼算法中,把匯聚在每個節(jié)點上的兩條路徑的對數似然函數累加值進行比較,然后把具有較大對數似然函數累加值的路徑保存下來,而丟棄另一條路徑,經挑選后第N級只留下2N條幸存路徑。選出的路徑同它們的對數似然函數的累加值將一起被存儲起來。由于每個節(jié)點引出兩條支路,因此以后各級中路徑的延伸都增大一倍,但比較它們的似然函數累加值后,丟棄一半,結果留存下來的路徑總數保持常數。由此可見,上述譯碼過程中的基本操作是,"加-比-選",即每級求出對數似然函數的累加值,然后兩兩比較后作出選擇。有時會出現兩條路徑的對數似然函數累加值相等的情形,在這種情況下可以任意選擇其中一條作為"幸存"路徑。卷積碼的編碼器從全零狀態(tài)出發(fā),最后又回到全零狀態(tài)時所輸出的碼序列,稱為結尾卷積碼。因此,當序列發(fā)送完畢后,要在網格圖的終結處加上〔N-1個己知的信息作為結束信息。在結束信息到來時,由于每一狀態(tài)中只有與已知發(fā)送信息相符的那條支路被延伸,因而在每級比較后,幸存路徑減少一半。因此,在接收到〔N-1個己知信息后,在整個網格圖中就只有唯一的一條幸存路徑保留下來,這就是譯碼所得的路徑。也就是說,在己知接收到的序列的情況下,這條譯碼路徑和發(fā)送序列是最相似的。2.3.3維特比譯碼算法性能對于<n,k,N>卷積碼,其編碼存儲度<移位寄存器單元的數量>為N,幸存路徑有2N條。每條幸存路徑<或信息序列>存儲器單元數是n*D,其中,n是卷積碼碼組寬度,D是需要存儲的碼組的個數。D的取值一般考慮取m的整倍數,稱D為幸存路徑長度。編碼存儲度和幸存路徑長度的取值問題關系到芯片規(guī)格、傳輸時延等問題。若D很大,則譯碼器的存儲量太大而難以實用。一般情況下,當譯碼進行到第5級<每級包括m個時刻>以后,每個狀態(tài)幸存路徑的前幾個分支已基本重合在一起,這就是說每個路徑存儲器不必存儲D個很大的碼序列。譯碼時,當譯碼器接收并處理完第D個碼組后,譯碼器中的幸存路徑存儲器已全部存滿,當譯碼器開始處理第D+1個碼組時,他就對幸存路徑存儲器中的最頂端的碼組做出判決并輸出?!?適當增加幸存路徑的長度可以提高譯碼器的糾錯能力?!?幸存路徑的長度在增加到一定值時,譯碼器糾錯能力趨于穩(wěn)定。當N值增加到6以上,誤比特率降低幅度大為減小,曲線有合二為一的趨勢。因此,可以認為幸存路徑長度D取編碼存儲度的6倍以上就可以取得比較好的譯碼性能?!?選擇合適的延時。路徑量度<似然度>的累加選取和碼字延時判決輸出提高了譯碼的準確性,D越大越有利于判決的正確性,但是這又和通信的實時性背道而馳,一般D為卷積碼約束長度N的5~10倍即可,本文算法D取50?!?留存路徑的更新的描述。每個狀態(tài)的留存路徑選擇實際上是從當前時刻往前推的,例如,在時刻t,又假設到達狀態(tài)s2的路徑有兩個,分別為s4和s5,對應的輸出碼字分別是00和11,我們分別計算出兩條路經的分支量度BM,并累加它們對應的前狀態(tài)路徑量度PM_l,發(fā)現累加后s5-s2的PM值比s4-s2的大,所以保留s5所對應的留存路徑,并更新狀態(tài)s2所對應的留存路徑存儲器。對每一狀態(tài)都做如此比較,保存大的分支量度BM,然后再累加前一狀態(tài)路徑量度PM_l,最后完成所有狀態(tài)的選擇,比較當前所有狀態(tài)的路經量度PM,選擇最大路徑,如果延時超過D就判決輸出碼字。顯然此處判決的碼字要延時D時刻才能移位輸出。3.卷積碼編譯碼及MATLAB仿真在本次課題研究中,我們對整個通信過程進行了仿真,其過程如圖3-1:序列序列產生信道編碼BPSK
調制AWGN信道傳輸BPSK
解調Viterbi譯碼信息輸出圖3-1卷積碼編譯碼流程圖3.1Matlab概述計算機對科學技術的幾乎一切領域產成了極其深遠的影響。熟練掌握并利用計算機進行科學計算研究及工程應用已是廣大科研設計人員所必備的基本技能之一。從事科學研究和工程應用時候所遇到的最大的困擾大抵是我們在計算涉及矩陣運算或畫圖時,采用Fortran、C及C++等計算機語言進行程序設計是一項十分麻煩的工作,不僅需要對所利用的有關算法有深刻的了解,還需要掌握所用語言的語法及編程技巧。Matlab軟件由美國MathWorks公司于1984年推出,歷經十幾年的發(fā)展和競爭,現已成為通用科技計算和圖視交互系統(tǒng)的程序語言,是<IEEE>國際公認的最優(yōu)秀的科技應用軟件之一。它的指令表達與數學、工程中常用的習慣形式十分相似,從而使許多用C或Fortran實現起來十分復雜和費時的問題用Matlab就可以輕松地解決。Matlab的典型應用包括:數學計算、算法研究、數據分析和計算結果可視化、建模與仿真等。3.1.1Matlab的特點Matlab作為一種數值計算和與圖形處理工具軟件,其特點是語法結構簡明、數值計算高效、圖形處理完備、易學易用,它在矩陣代數數值計算、數字信號處理、震動理論、神經網絡控制、動態(tài)仿真等領域都有廣泛的應用。與C、C++、Fortran等高級語言相比,Matlab不但在數學語言的表達與解釋方面表現出人機交互的高度一致,而且具有優(yōu)秀高技術計算環(huán)境所不可缺少的如下特征:〔1高質量、高可靠的數值計算能力;〔2基于向量、數組和矩陣的高維設計語言;〔3高級圖形和可視化數據處理的能力;〔4廣泛解決各學科各專業(yè)領域內復雜問題的能力;〔5擁有一個強大的非線性系統(tǒng)仿真工具箱——Simulink;〔6支持科學和工程計算標準的開放式、可交互結構;〔7跨平臺兼容。3.1.2Matlab工具箱和內容目前Matlab已經成為國際上最流行的軟件之一,它除了傳統(tǒng)的交互式編程外,還提供了豐富可靠的矩陣運算。圖形繪制、數據處理、圖象處理、方便的Windows編程等便利工具。出現了各種以Matlab為基礎的使用工具箱,廣泛的應用于自動控制、圖像信號處理、生物醫(yī)學工程、語言處理、雷達工程、信號分析、震動理論、時序分析與建模、化學統(tǒng)計學、優(yōu)化設計等領域,并表現出一般高級語言難以比擬的優(yōu)勢。較為常見的工具箱主要包括:控制系統(tǒng)工具箱<Controlsystemstoolbox>、系統(tǒng)識別工具箱<Systemsidentificationtoolbox>、多變量頻率設計工具箱<Multivariablefrequencydesigntoolbox>、魯棒控制工具箱<Robustcontroltoolbox>、分析與綜合工具箱<analysisandsynthesistoolbox>、神經網絡工具箱<Neuralnetworktoolbox>、最優(yōu)化工具箱<Optimizationtoolbox>、信號處理工具箱<Signalprocessingtoolbox>、模糊推理數據工具箱<Fuzzyinferencesystemtoolbox>、小波分析工具箱<Wavelettoolbox>、通信工具箱<Communicationstoolbox>。3.2卷積碼編碼及仿真在程序設計中,我們沒有采用MATLAB自帶的編碼函數而是采用了自己的編碼函數codec對〔2,1,3卷積碼編碼,其參數m為輸入信息序列,g1,g2為兩個輸出端口的沖激響應序列。3.2.1編碼程序functioncod=codec<m,g1,g2>%g1,g2為兩輸出端口的沖激響應序列。m1=conv<m,g1>;%端口一輸出 m2=conv<m,g2>;%端口二輸出l=length<m1>;fori=1:l;cod<[2*i-1]>=rem<m1<[i]>,2>;%將端口一編碼輸出賦給cod奇數位置cod<[2*i]>=rem<m2<[i]>,2>;%將端口二編碼輸出賦給cod偶數位置end試運行編碼:clearallg1=[111];g2=[101];msg=[1101];cod=codec<msg,g1,g2>輸出為:仿真結果如下圖3-2。圖3-2〔2,1,3卷積碼編碼3.3信道傳輸過程仿真為了方便起見,我們采用了二相相移鍵控〔BPSK,也就是用二進制基帶信號〔0、1對載波進行二相調制。BPSK是最簡單的PSK形式,相移大小為180°,又可稱為2-PSK。當基帶信號為1時對應相位為π,而當基帶信號為0時,對應的相位為-π。根據這個理論,我們對BPSK的調制過程作了模擬仿真,用一個簡短的程序對BPSK的全過程進行了觀察。程序代碼如下:function[bpsk_output]=bpsk_1<g>;g=[110101001011];%卷積碼編碼輸出信號cp=[];bit=[];forn=1:length<g>;ifg<n>==0;die=-ones<1,100>;%使得信號在坐標為0到100皆為-1,生成圖線se=zeros<1,100>;elseg<n>==1;die=ones<1,100>;se=ones<1,100>;endcp=[cpdie];bit=[bitse];endsnr_db=35;%可以調整變化的信噪比同時考慮信道中可能存在的噪聲noise=randn<1,length<bpsk>>;%隨機噪聲sigma=sqrt<5>*10^<-<snr_db>/20>;recv=bpsk+3*sigma*noise;%產生的噪聲疊加在bpsk上仿真結果如圖3-3所示。在matlab運行時,我們對信道高斯白噪聲進行模擬,通過調節(jié)信噪比,我們可以清晰地觀察到噪聲對BPSK調制的影響,信噪比越大,傳輸的信號所受干擾越小,傳輸越準確。圖3-3模擬信道傳輸3.4維特比譯碼程序及仿真信號通過bpsk調制后在信道中傳輸,到達接收端時,先要進行解調,判決代碼為forj=1:length<recv>;ifrecv<j>>0;recv<j>=1;elserecv<j>=0;endend3.4.1維特比譯碼算法解析Viterbi算法是通過加-比較-選擇來實現的,狀態(tài)量度的計算方法如下:將前兩個狀態(tài)點上的狀態(tài)量度和相應分支量度相加,得到的兩個可能路徑量度作為新的狀態(tài)量度的候選項,送入邏輯單元中進行比較,將其中似然性最大<距離最小>的一個作為狀態(tài)的新狀態(tài)量度存儲,同時存儲的還有狀態(tài)新的路徑記錄,主要算法步驟為:<1>將接收到的序列分成每段長為n0的m組子序列。<2>對所研究的碼畫出深度為m級的網格圖。對該網格圖的最后<L-1>級僅畫出對應于全0輸入序列的路徑。<3>置s=1,并置初始全0狀態(tài)的度量等于0。<4>對網格圖中全部連接第s級狀態(tài)到<s+1>級狀態(tài)的支路求出該接收序列中的第s個子序列的距離。<5>將這些距離加到第s級各狀態(tài)的度量上去,得到對第<s+1>級狀態(tài)的度量候選者。對于第<s+1>級的每一狀態(tài),有QUOTE個候選度量,其中每一個都對應終止在那個狀態(tài)的一條支路。<6>對在第<s+1>級的每一狀態(tài),挑選出最小的候選度量,并將對應于這個最小值的支路標以留存支路,同時指定之歌候選度量的最小值作為第<s+1>級狀態(tài)的度量值。<7>若s=m,轉到下一步;否則將s增加1并轉到第4步。<8>在第<m+1>級以全0狀態(tài)開始,沿著留存支路通過網格圖往會到達初始全0狀態(tài),這條路徑就是最佳路徑,并且對應于這條路徑的輸入比特序列是最大似然解碼序列。為了得到有關這個輸入比特序列最好的推測,將最后<L-1>k0個0從該序列中除掉。根據算法繪出程序流程圖如圖3-4示:程序初始化,將路徑信息和當前累計度量值清零,統(tǒng)計碼長對前兩步進行漢明距度量并保存路徑信息程序初始化,將路徑信息和當前累計度量值清零,統(tǒng)計碼長對前兩步進行漢明距度量并保存路徑信息是否解碼完成計算能到達當前狀態(tài)的兩條路徑將兩條路徑a,b輸出與輸入比較漢明距,并累加到路徑度量a路徑累計度量是否小于b選a為當前點的最優(yōu)到達路徑選b為當前點的最優(yōu)到達路徑選取度量值最小路徑輸出是否否是圖3-4Viterbi譯碼流程圖從Viterbi算法中可以看到,對于一個長信息序列解碼時,解碼延時和所需要的存儲量都是無法接受的。直到整個序列全被接收,解碼才能開始,而且還不得不將總的留存路徑存儲起來。實際上,不會引起這些問題的次優(yōu)解倒是很希望的。一種稱為路徑存儲截斷的辦法是:在每一級編碼器在網格圖中僅往會搜索w級,而不回到網格圖的出發(fā)點。用這種辦法在第<w+1>級解碼器對相應于網格圖第1級的輸入比特作出判決,并且未來的接收比特不改變這個判決。這意味著解碼延時是k0w比特,需要保存的路徑只相應于最后W級的路徑。計算機仿真已經表明,如果W>5n,由于路徑存儲截斷造成的性能下降可忽略不計。3.4.2Viterbi譯碼程序Viterbi譯碼主要程序如下:forj=0:number_of_states-1form=0:M-1[next_state,memory_contents]=nxt_stat<j,m,N,k>;%調用nxt_stat函數input<j+1,next_state+1>=m;branch_output=rem<memory_contents*G',2>;% nextstate數組記錄了當前狀態(tài)j下輸入l時的下一個狀態(tài)nextstate<j+1,m+1>=next_state;% output數組記錄了當前狀態(tài)j下輸入l時的輸出〔十進制output<j+1,m+1>=bin2deci<branch_output>;endendstate_metric=zeros<number_of_states,2>;depth_of_trellis=length<channel_output>/n;channel_output_matrix=reshape<channel_output,n,depth_of_trellis>;survivor_state=zeros<number_of_states,depth_of_trellis+1>;fori=1:depth_of_trellis-N+1flag=zeros<1,number_of_states>;if<i<=N>step=2^<k*<N-i>>;elsestep=1;endforj=0:step:number_of_states-1form=0:M-1branch_metric=0;binary_output=deci2bin<output<j+1,m+1>,n>;forll=1:nbranch_metric=branch_metric+metric<channel_output_matrix<ll,i>,binary_output<ll>>;end%選擇碼間距較小的路徑,即當下一個狀態(tài)沒有被訪問時就直接賦值,否則,用比它小的將其覆蓋if<<state_metric<nextstate<j+1,m+1>+1,2>>state_metric<j+1,1>+branch_metric>|flag<nextstate<j+1,m+1>+1>==0>state_metric<nextstate<j+1,m+1>+1,2>=state_metric<j+1,1>+branch_metric;survivor_state<nextstate<j+1,m+1>+1,i+1>=j;flag<nextstate<j+1,m+1>+1>=1;endendendstate_metric=state_metric<:,2:-1:1>;endfori=depth_of_trellis-N+2:depth_of_trellisflag=zeros<1,number_of_states>;last_stop=number_of_states/<2^<k*<i-depth_of_trellis+N-2>>>;forj=0:last_stop-1branch_metric=0;binary_output=deci2bin<output<j+1,1>,n>;forll=1:nbranch_metric=branch_metric+metric<channel_output_matrix<ll,i>,binary_output<ll>>;endif<<state_metric<nextstate<j+1,1>+1,2>>state_metric<j+1,1>+branch_metric>|flag<nextstate<j+1,1>+1>==0>state_metric<nextstate<j+1,1>+1,2>=state_metric<j+1,1>+branch_metric;survivor_state<nextstate<j+1,1>+1,i+1>=j;flag<nextstate<j+1,1>+1>=1;endendstate_metric=state_metric<:,2:-1:1>;end%從最佳路徑中產生解碼,譯碼過程可從數組survivor_state的最后一個位置向前逐級譯碼state_sequence=zeros<1,depth_of_trellis+1>;state_sequence<1,depth_of_trellis>=survivor_state<1,depth_of_trellis+1>;fori=1:depth_of_trellisstate_sequence<1,depth_of_trellis-i+1>=survivor_state<<state_sequence<1,depth_of_trellis+2-i>+1>,depth_of_trellis-i+2>;enddecoder_output_matrix=zeros<k,depth_of_trellis-N+1>;fori=1:depth_of_trellis-N+1dec_output_deci=input<state_sequence<1,i>+1,state_sequence<1,i+1>+1>;dec_output_bin=deci2bin<dec_output_deci,k>;%將一次譯碼存入譯碼輸出矩陣decoder_output_matrix相應的位置decoder_output_matrix<:,i>=dec_output_bin<k:-1:1>';enddecoder_output=reshape<decoder_output_matrix,1,k*<depth_of_trellis-N+1>>;cumulated_metric=state_metric<1,1>;viterbi譯碼matlab仿真將程序在matlab中進行仿真,對于〔2,1,3譯碼,G=[111;101],channel_output=recv,此時令信噪比snr_db=12,得到仿真圖形如圖3-5所示:snr_db12snr_db12圖3-5信源編碼及viterbi譯碼輸出的是正確結果[1101],由理論分析知,信道編碼經過bpsk調制,由于信道噪聲的干擾,在信號解調后會產生一定的差錯,維特比譯碼雖然有具有糾錯功能,但是畢竟是有限的,所以信噪比對viterbi譯碼性能將產生影響,且信噪比越大,維特比譯碼越準確。為了驗證上述推論,將信噪比減小,令SNR=6。Matalb仿真結果如圖3-6所示:當信噪比降低到SNR=6時,譯碼輸出變?yōu)閇0111],產生了差錯。驗證了上述推論。snr_db=6snr_db=6圖3-6信道編碼及viterbi譯碼3.4.4信噪比對卷積碼譯碼性能的影響上述過程只是可以看出信噪比會影響維特比譯碼的性能,為了進一步得到兩者更加直觀的聯系,我們可以通過編程得到信噪比與誤碼率之間的函數關系,同時將沒有進行卷積碼的信號也計算其誤碼率。代碼如下:clearall;clc;snr_db=0:10;%信息源msg=randint<1,1e3>;ber0=zeros<1,length<snr_db>>;ber1=zeros<1,length<snr_db>>;%Trellisestrel=poly2trellis<3,[75]>;%Definetrellisforrate1/2code.forn=1:length<msg>/2;forx=1:length<snr_db>%Codewordscode=convenc<msg,trel>;%Encode.state=20;inter=randintrlv<code,state>;%BPSK調制s0=sign<msg-0.5>;s1=sign<inter-0.5>;%AWGNChanneladd_noise0=awgn<s0,snr_db<x>,'measured'>;add_noise1=awgn<s1,snr_db<x>,'measured'>;%Deinterleaverwithnoiseforsoftdecodingdeinter_noise=randdeintrlv<add_noise1,state>;%解調r_0=0.5*sign<add_noise0>+0.5;r_1=0.5*sign<add_noise1>+0.5;%Deinterleaverdeinter_1=randdeintrlv<r_1,state>;%Tracebacklengthtblen=5;%vitdec判決decoded1=vitdec<deinter_1,trel,tblen,'cont','hard'>;%vitdec判決%比較誤碼率[num0,rat0]=biterr<r_0,msg>;[num1,rat1]=biterr<double<decoded1<tblen+1:end>>,msg<1:end-tblen>>;ber0<n,x>=rat0;ber1<n,x>=rat1;endendber0=mean<ber0>;ber1=mean<ber1>;程序在matlab中運行,得到仿真圖如圖3-7所示,該圖直觀的反映了經過卷積碼編碼和沒有經過卷積碼編碼的誤碼率之間的區(qū)別。從圖中可以看出,當信噪比較小時,未編碼的誤碼率反而比采用編碼的誤碼率低,這是因為誤比特太多導致接收到的信息幾乎無效。但是當信噪比稍高后卷積碼編碼譯碼的誤碼率就大大降低了。卷積沒有卷積卷積沒有卷積圖3-7誤碼率比較圖形3.4.5碼率對卷積碼譯碼性能的影響卷積碼的碼率R=k/n,它是卷積碼的一個重要參數,當改變卷積碼的碼率時,系統(tǒng)的誤碼性能也將隨之發(fā)生變化,為了研究碼率對卷積碼誤碼性能的影響,我們以碼率為1/2的<2,1,3>卷積碼和碼率為1/3的<3,1,3>卷積碼作為仿真碼字。<2,1,3>卷積碼的trellis結構為poly2trellis<3,[75]>,<3,1,3>卷積碼的trellis結構為poly2trellis<3,[165]>。從圖3-8中的誤比特率曲線可以看出,當碼率一定時,隨著信道噪聲的逐漸減小,系統(tǒng)的誤比特率也逐漸減小,對比兩條曲線可清楚地得出<3,1,3>卷積碼的性能要比<2,1,3>卷積碼要好。于是可以得出如下結論:當改變系統(tǒng)碼率時,隨著卷積碼碼率的逐漸提高,系統(tǒng)的誤比特率也呈現出增大的趨勢,也就是說,碼率越低,系統(tǒng)的誤比特率就越小,誤碼性能就越好。<3,,1,3>〔2,1,3<3,,1,3>〔2,1,3圖3-8碼率對卷積碼性能的影響3.4.6約束長度對卷積碼誤碼性能的影響對于碼率一定的卷積碼,當約束長度N發(fā)生變化時,系統(tǒng)的誤碼性能也會隨之發(fā)生變化,我們以碼率R=1/2的<2,1,3>和<2,1,7>卷積碼為例展開分析。<2,1,7>卷積碼只需將trellis結構改成poly2trellis<7,[171133]>即可。圖3-9約束長度對卷積碼性能的影響從圖3-9中的誤比特率曲線可以清楚地看到,在低信噪比時,<2,1,3>卷積碼的的性能要好于<2,1,7>卷積碼的性能。然而當信噪比高于一定值后,<2,1,7>卷積碼的的性能要好于<2,1,3>卷積碼的性能,隨著約束長度的逐漸增加,系統(tǒng)的誤比特率明顯降低,所以說當碼率一定,信噪比高于一定值時,增加約束長度可以降低系統(tǒng)的誤比特率,但是隨著約束長度的增加,譯碼設備的復雜性也會隨之增加,所以對于碼率為1/2的卷積碼,我們在選取約束長度時一般為3~9。3.4.7回溯長度對卷積碼誤碼性能的影響回溯長度是在Viterbi譯碼過程中一個很重要的參數,它決定了維特比譯碼的精度,同時也影響著譯碼延遲〔即在輸出第一個解碼數據之前輸出的0的個數,隨著它的不斷變化誤碼性能也隨之改變。這里采用<2,1,3>卷積碼為例,將反饋深度分別取值為5,15和35。仿真結果如圖3-10所示。3515535155圖3-10回溯長度對卷積碼性能的影響從圖中的誤比特率曲線可以清楚地看到,當回溯長度一定時,隨著信道噪聲的逐漸減小,系統(tǒng)的誤比特率逐漸降低;當回溯長度逐漸增加,系統(tǒng)的誤比特率隨之逐漸降低,但是當回溯程度增加到5N時<N為編碼的約束長度>,誤比特率數值趨于穩(wěn)定,這里的<2,1,3>卷積碼在回溯長度達到15左右基本趨于穩(wěn)定。因此在確定回溯長度時既要考慮到隨著信噪比增加誤比特率隨之降低的趨勢,也要考慮到譯碼延遲會變大,在選取回溯長度時,通常取回溯長度為5N。3.4.8判決方式對卷積碼誤碼性能的影響采用軟判決即將信道輸出的編碼先不立即判決,而是進行量化,量化程序如下:functiono=quantization<s,l>;o=0;ifs>1;o=2^l;elseifs<-1;o=-2^l;elsec=abs<s>;fori=1:2^l;ifc>1/2^<l+1>+<i-1>/2^l;o=o+1;endendifs<0;o=-o;endendo=<o+2^l>/2^<l+1>;再進行維特比軟判決譯碼。從圖3-11可知,采用軟判決的誤碼率明顯低于硬判決,實際上軟判決譯碼算法的路徑度量采用"軟距離"而不是漢明距離。最常采用的是歐幾里德距離,也就是接收波形與可能的發(fā)送波形之間的幾何距離。在采用軟距離的情況下,路徑度量的值是模擬量,需要經過一些處理以便于相加和比較。因此,使計算復雜度有所提高。除了路徑度量以外,軟判決算法與硬判決算法在結構和過程上完全相同。一般而言,由于硬判決譯碼的判決過程損失了信道信息,軟判決譯碼比硬判決譯碼性能上要好約2dB。軟判決硬判決軟判決硬判決圖3-11不同判決方式對卷積碼性能的影響4.結論及展望4.1結論卷積碼是一種糾錯編碼,糾錯編碼己有五十幾年歷史,早在1948年,香農<Shannon>在他的開創(chuàng)性論文"通信的數學理論"中,首次闡明了在有擾信道中實現可靠通信的方法,提出了著名的有擾信道編碼定理,奠定了糾錯碼的基石。以后,糾錯碼受到了越來越多的通信和數學工作者,特別是數學家的重視,使糾錯碼無論在理論上還是在實際中都得到了飛速發(fā)展。本文首先從數字通信的一些基本概念和差錯控制編碼理論出發(fā),引入卷積碼的一些基本理論,接著討論了卷積碼的編譯碼基本原理,對卷積碼的表示方法和編譯碼算法做了簡單的介紹,再通過編寫卷積碼的編碼和解碼程序,并且用MATLAB仿真軟件進行仿真和糾錯驗證,并通過對不同碼率、不同約束長度、不同回溯長度,以及不同判決方式情況下誤碼率的分析,得出以下結論:〔1當編碼約束長度不大,當碼率一定時,隨著信道噪聲的逐漸減小,系統(tǒng)的誤比特率也逐漸減小?!?當改變系統(tǒng)碼率時,隨著卷積碼碼率的逐漸提高,系統(tǒng)的誤比特率也呈現出增大的趨勢,也就是說碼率越低,系統(tǒng)的誤比特率就越小,誤碼性能就越好。對于二進制對稱信道,當采用BPSK調制方式時,通常選取的碼率為1/2?!?對于碼率一定的卷積碼,當約束長度N發(fā)生變化時,系統(tǒng)的誤碼性能也會隨之發(fā)生變化,隨著約束長度的逐漸增加,系統(tǒng)的誤比特率明顯降低,所以說當碼率一定時,增加約束長度可以降低系統(tǒng)的誤比特率,但是,隨著約束長度的增加,譯碼設備的復雜性也會隨之增加。所以對于碼率為1/2的卷積碼,在選取約束長度時一般為3~9?!?對于碼率一定的卷積碼,當反饋深度發(fā)生變化時,系統(tǒng)的誤碼率也會發(fā)生一定的變化,隨著反饋深度的增加,系統(tǒng)的誤碼率呈下降趨勢,但是通常在反饋深度大于或者等于約束長度的五倍時,誤碼率幾乎不再發(fā)生變化,故常常取回溯長度為5N。〔5對于碼率一定的卷積碼,采用的譯碼判決方式不同,也會對系統(tǒng)的誤碼率產生影響,一般來說,軟判決譯碼性能要優(yōu)于硬判決譯碼性能,但這是以提高設備復雜性為代價的。4.2展望在本次卷積碼編譯碼算法研究過程中,我學到了許多關于卷積碼的知識,對卷積碼的糾錯性能有了較為深刻的認識。但是由于時間和個人能力等方面的不足,課題研究中還有些地方做的不到位,也有些領域沒有研究,值得進一步完善。如在信道傳輸過程中,本文只是考慮了BPSK信道編碼,而沒有采用較為復雜的QPSK編碼,所以沒能研究不同的信道編碼方式對卷積碼誤碼性能的影響。卷積碼的譯碼方法眾多,本文只對Viterbi譯碼算法做了初步的研究,對其它的譯碼方式,如代數譯碼和序貫譯碼,沒有進行詳細的研究和比較,所以沒能研究不同譯碼方式對卷積碼誤碼性能的影響。卷積碼自提出以來就受到人們的重視,并顯現出了巨大的優(yōu)越性,隨著通信技術的進步,卷積碼也將得到更大的發(fā)展,將提出更多形式的新型卷積碼,進一步優(yōu)化通信系統(tǒng)的性能。5.結束語剛開始拿到這個課題時,對卷積碼有一定地了解。當時一想還有六個月,就沒怎么上心。直到3月份的開題報告,意識到自己要認真著手了,但是由于準備不足,開題報告答辯時暴露了不少問題,也正是這些問題讓我明白了緊迫要學習的東西:matlab軟件知識、信道編碼理論、糾錯碼基本原理、卷積碼編譯碼原理。考慮到之前學過通信方面的課程,我重新看了樊昌信、曹麗娜著的《通信原理》以及郝建軍的《數字通信原理》,對信源編碼,信道編碼,卷積碼等有了一定的認識。但是光靠這些知識無法著手我的研究課題,于是陸續(xù)又借了其它書籍,由于沒有專門論述卷積碼的書籍,我發(fā)現除了加深對卷積碼基本知識的認識外,還是無法展開。這時,我開始在網上查找資料。網上的知識非常豐富,有些數據庫如萬方里面也有大量的卷積碼的知識,通過瀏覽諸多文獻,我慢慢摸著了方向,許多相近的課題也給了我許多啟發(fā)。我的課題也比較通暢的進行了,在課題推進中,對matlab編程語言的認識也發(fā)生了變化,從開始的幾乎不懂,到慢慢的寫出一些程序,再到子程序的調用和繪圖及編輯,認識到了matlab強大的數據處理功能。這次課題研究也讓我發(fā)現嚴謹思維的重要性,如編碼性能的好壞,需要從科學客觀的比較中得到,需要用到控制變量這個非常通用的方法,具體到卷積碼,也就是既要注意到卷積碼的優(yōu)越性,也要注意到相關前提和假設,這樣才能做出正確的判斷。相信這些收獲無論是在將來的學習還是工作當中,肯定裨益良多。參考文獻[1]郝建軍,桑林,劉丹譜,羅濤編著,《數字通信〔第2版》.北京郵電大學出版社.2010[2]張忠培,史治平,王傳丹編著.《現代編碼理論與應用》.北京:人民郵電出版社.2007[3]傅祖蕓,趙建中編著,《信息論與編碼》,電子工業(yè)出版社,2010[4]樊昌信,曹麗娜編著,《通信原理〔第6版》,國防工業(yè)出版社,2011[5]鄧華
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024水稻買賣合同
- 0×5=?(說課稿)-2024-2025學年三年級上冊數學北師大版
- 不動產融資租賃協(xié)議范本(2024版)版B版
- 2024年簡化版借款合同范本版B版
- 2024美容院連鎖店員工薪酬及福利待遇合同范本3篇
- 個人消費微貸合同范本(2024年版)版
- 福建省南平市塔前中學高一數學理下學期期末試卷含解析
- 2024月子中心消防設施節(jié)能改造與優(yōu)化合同3篇
- 多地取還車協(xié)議書(2篇)
- 個人房產抵押借款合同范本2024年版版B版
- 初三九年級英語英語英語語法填空附答案附解析
- 呆滯品管理制度范本(3篇)
- GB/T 42623-2023安裝于辦公、旅館和住宅建筑的乘客電梯的配置和選擇
- 夸美紐斯《大教學論》
- PMC主管工作計劃工作總結述職報告PPT模板下載
- 放射治療技術常用放射治療設備課件
- 《計算機組成原理》武漢大學2023級期末考試試題答案
- 廣東廣州白云區(qū)2021學年第二學期期末學生學業(yè)質量診斷調研六年級語文(含答案)
- 食品欺詐預防控制程序分享
- 員工辭職報告下載(6篇)
- 建筑節(jié)能PPT 課件
評論
0/150
提交評論