基于MATLAB的卷積碼編譯碼器設計_第1頁
基于MATLAB的卷積碼編譯碼器設計_第2頁
基于MATLAB的卷積碼編譯碼器設計_第3頁
基于MATLAB的卷積碼編譯碼器設計_第4頁
基于MATLAB的卷積碼編譯碼器設計_第5頁
已閱讀5頁,還剩87頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

┊┊┊┊┊┊┊┊┊┊┊┊┊裝┊┊┊┊┊訂┊┊┊┊┊線┊┊┊┊┊┊┊┊┊┊┊┊┊基于MATLAB的卷積碼編譯碼器設計基于MATLAB的卷積碼編譯碼器設計第第頁第一章緒論1.1引言1.1.1卷積碼發展背景概述卷積碼又稱連環碼,最早于1955年由Elias等人提出。而后1957年Wozencraft提出了一種有效的譯碼方法即序列譯碼。1963年Messey提出了一種性能稍差但比較實用的大數邏輯譯碼即門限譯碼,使卷積碼開始應用與實際。1967年Viterbi提出了最大似然譯碼算法,被稱為Viterbi譯碼。Viterbi譯碼作為最優譯碼算法,有如下特點:(1)維特比算法是最大似然的序列譯碼算法(2)譯碼復雜度與信道質量無關(3)運算量與碼長呈線性關系(4)存貯量與碼長呈線性關系(5)運算量和存貯量都與狀態數呈線性關系(6)狀態數隨分組大小k及編碼深度m呈指數關系卷積碼在現代通信中已被廣泛應用。1.1.2本課題意義在移動通信系統中,數字信號在無線信道中傳輸時,由于信道自身條件特性的不理想,會受到諸多噪聲干擾的影響,因而產生誤碼。為了在已知信噪比的情況下達到一定的誤碼率指標,除在合理設計基帶信號,選擇調制解調方式,并采用信道均衡,分集等措施的基礎上,還應使用信道編碼與交織,使誤碼率進一步的降低。差錯控制編碼已經十分成熟的應用于信道編碼技術之中。卷積碼和分組碼是差錯控制編碼的兩種主要形式,在編碼器復雜度相同的情況下,卷積碼的性能優于分組碼,因此卷積碼幾乎被應用在所有無線通信的標準之中。如:(1)低碼率卷積碼應用于擴頻通信系統(2)VD及VLSI的實現(3)卷積碼UEP方案用于分等級傳輸(4)語音壓縮(5)卷積碼糾錯用于多媒體廣播系統1.2本課題主要研究內容熟練掌握卷積碼的編碼及Viterbi譯碼原理:編碼原理:卷積碼在編碼時將k比特的信息段編成n個比特的碼組,監督碼元不僅和當前的k比特信息段有關,而且還同前面m=(N-1)個信息段有關。通常將N稱為編碼約束長度,表示編碼過程中相互約束的碼段個數。編碼過程中相互關聯的碼元有n*N個。R=k/n為編碼效率。約束長度和編碼效率是衡量卷積碼的兩個重要參數。一般來說,卷積碼中k和n的值是比較小的整數,而N可取較大。將卷積碼記作(n,k,N)。維特比譯碼算法基本原理是:將接收到的信號序列和所有可能的發送信號序列比較,選擇其中漢明距離最小的序列認為是當前發送序列。在此基礎上運用MATLAB對卷積碼的編譯碼進行仿真并分析其性能。卷積碼的相關概念2.1信道編碼2.1.1信道編碼的原理信道編碼是為了與信道的統計特性相匹配,并區分通路和提高通信的可靠性,而在信源編碼的基礎上,按一定規律加入一些新的監督碼元,以實現糾錯的編碼。信道編碼大致分為兩類:①信道編碼定理,從理論上解決理想編碼器、譯碼器的存在性問題,也就是解決信道能傳送的最大信息率的可能性和超過這個最大值時的傳輸問題。②構造性的編碼方法以及這些方法能達到的性能界限。編碼定理的證明,從離散信道發展到連續信道,從無記憶信道到有記憶信道,從單用戶信道到多用戶信道,從證明差錯概率可接近于零到以指數規律逼近于零,正在不斷完善。編碼方法,在離散信道中一般用代數碼形式,其類型有較大發展,各種界限也不斷有人提出,但尚未達到編碼定理所啟示的限度,尤其是關于多用戶信道,更顯得不足。在連續信道中常采用正交函數系來代表消息,這在極限情況下可達到編碼定理的限度。不是所有信道的編碼定理都已被證明。只有無記憶單用戶信道和多用戶信道中的特殊情況的編碼定理已有嚴格的證明;其他信道也有一些結果,但尚不完善。信道編碼還有以下幾類方式:按字碼的功能分為糾錯碼和檢錯碼;按監督碼元與信息碼元分為線性碼和非線性碼;按照對信息碼元和監督碼元的約束關系的不同又分為分組碼和卷積碼,按照信息碼元在編碼后是否保持原來的形式分類,有系統碼和非系統碼。線性分組碼是差錯控制碼,由于認識此種碼的思路與概念直觀而條理清晰,并對編碼中的一些重要參量和糾錯能力提供一系列明確的概念,從而也為介紹其它差控碼奠定有力基礎。分組碼是一組固定長度的碼組,可表示為(n,k),通常它用于前向糾錯。在分組碼中,監督位被加到信息位之后,形成新的碼。在編碼時,k個信息位被編為n位碼組長度,而n-k個監督位的作用就是實現檢錯與糾錯。當分組碼的信息碼元與監督碼元之間的關系為線性關系時,這種分組碼就稱為線性分組碼。對于長度為n的二進制線性分組碼,它有種可能的碼組,從種碼組中,可以選擇M=個碼組(k<n)組成一種碼。這樣,一個k比特信息的線性分組碼可以映射到一個長度為n碼組上,該碼組是從M=個碼組構成的碼集中選出來的,這樣剩下的碼組就可以對這個分組碼進行檢錯或糾錯。線性分組碼是建立在代數群論基礎之上的,各許用碼的集合構成了代數學中的群,它們的主要性質如下:(1)任意兩許用碼之和(對于二進制碼這個和的含義是模二和)仍為一許用碼,也就是說,線性分組碼具有封閉性;(2)碼組間的最小碼距等于非零碼的最小碼重。RS碼即里德-所羅門碼,它是能夠糾正多個錯誤的糾錯碼。前向糾錯碼(FEC)的碼字是具有一定糾錯能力的碼型,它在接收端解碼后,不僅可以發現錯誤,而且能夠判斷錯誤碼元所在的位置,并自動糾錯。這種糾錯碼信息不需要儲存,不需要反饋,實時性好。所以在廣播系統(單向傳輸系統)都采用這種信道編碼方式。RS碼為(204,188,t=8),其中t是可抗長度字節數,對應的188符號,監督段為16字節(開銷字節段)。實際中實施(255,239,t=8)的RS編碼,即在204字節(包括同步字節)前添加51個全“0”字節,產生RS碼后丟棄前面51個空字節,形成截短的(204,188)RS碼。RS的編碼效率是:188/204。卷積碼非常適用于糾正隨機錯誤,但是,解碼算法本身的特性卻是:如果在解碼過程中發生錯誤,解碼器可能會導致突發性錯誤。為此在卷積碼的上部采用RS碼塊,RS碼適用于檢測和校正那些由解碼器產生的突發性錯誤。所以卷積碼和RS碼結合在一起可以起到相互補償的作用。卷積碼分為兩種:(1)基本卷積碼:基本卷積碼編碼效率為,η=1/2,編碼效率較低,優點是糾錯能力強。(2)收縮卷積碼:如果傳輸信道質量較好,為提高編碼效率,可以采樣收縮截短卷積碼。有編碼效率為:η=1/2、2/3、3/4、5/6、7/8這幾種編碼效率的收縮卷積碼。編碼效率高,一定帶寬內可傳輸的有效比特率增大,但糾錯能力越減弱。1993年誕生的Turbo碼,單片Turbo碼的編碼/解碼器,運行速率達40Mb/s。該芯片集成了一個32×32交織器,其性能和傳統的RS外碼和卷積內碼的級聯一樣好。所以Turbo碼是一種先進的信道編碼技術,由于其不需要進行兩次編碼,所以其編碼效率比傳統的RS+卷積碼要好。2.1.2信道編碼的分類信道編碼有多種分類方式,主要有按照關系、范圍及用途三種。(1)根據糾錯碼各碼組信息元和監督元的函數關系,可分為線性碼和非線性碼。如果函數關系是線性的,即滿足一組線性方程式,則稱為線性碼,否則為非線性碼。(2)根據上述關系涉及的范圍,可分為分組碼和卷積碼。分組碼的各碼元僅與本組的信息元有關;卷積碼中的碼元不僅與本組的信息元有關,而且還與前面若干組的信息元有關。(3)根據碼的用途,可分為檢錯碼和糾錯碼。檢錯碼以檢錯為目的,不一定能糾錯;而糾錯碼以糾錯為目的,一定能檢錯。2.2差錯控制編碼2.2.1差錯控制碼的基本概念和分類在實際信道上傳輸數字信號時,由于信道傳輸特性不理想和噪聲的影響,所收到的數字信號不可避免地會發生錯誤。可以通過合理設計基帶信號、加大發送功率、選擇合適的調制解調方式、采用均衡等措施,來降低碼元的誤碼率。若仍難以滿足要求,則需考慮采用差錯控制編碼技術。差錯控制編碼屬于信道編碼,其目的是用信道編碼的方法檢測和糾正誤碼,降低誤碼率。從差錯控制角度來看,根據加性干擾引起的錯碼分布規律的不同,信道可以分為隨機信道、突發信道和混合信道三類。隨機信道:信道中錯碼的出現是隨機的,且錯碼之間是統計獨立的。突發信道:信道中錯碼是成串集中出現的。混合信道:信道中既存在隨機錯碼、又存在突發錯碼。對于不同類型的信道,應采用不同的差錯控制技術。常用的差錯控制方式:1、檢錯重發(ARQ)接收端按一定規則對收到的碼組進行有無錯誤的判別。若發現有錯,則通知發送端重發,直到正確收到為止。2、前向糾錯(FEC)發送端將信息序列編碼成能夠糾正錯誤的碼,接收端根據編碼規則進行檢查,如果有錯自動糾正。3、混合糾錯檢錯(HEC)是檢錯重發和前向糾錯的結合。發端發出同時具有檢錯和糾錯能力的碼,收端收到后,檢查錯誤情況:如果錯誤在糾錯能力之內,則自動糾正;若超出糾錯能力,但在檢錯能力之內,則經反向信道要求重發。4、信息反饋(IRQ)又叫反饋校驗方式。收端把收到的數據序列全部經反向信道送回發端,發端比較發出和送回的數據序列,從而發現有否錯誤,并把有錯誤的數據序列再次傳送,直到發端沒有發現錯誤。差錯控制編碼分類:根據分類依據的不同,差錯控制編碼可劃分如下:按監督碼元和信息碼元關系:線性碼、非線性碼按監督碼元和信息碼元之間的約束關系:分組碼、卷積碼按差錯控制編碼的功能:檢錯碼、糾錯碼、糾刪碼按糾正錯誤的類型:糾隨機錯誤的碼、糾突發錯誤的碼按編碼的數學方式不同:代數碼、幾何碼、算術碼2.2.2線性分組碼及循環碼的簡單介紹線性分組碼線性分組碼中的線性是指碼組中碼元間的約束關系是線性的,而分組則是對編碼方法而言,即編碼時將每k個信息位分為一組進行獨立處理,變換成長度為n(n>k)的二進制碼組。線性分組碼的編碼過程可以簡單描述成一個矢量和一個矩陣相乘的結果,即C=mG,其中C是經過編碼后得到的n維編碼輸出{c0,c1,…,cn-1},m是信息序列分組{m0,m1,…,mk-1},G是由k個n維矢量{g0,g1,…,gk-1}構成的矩陣。線性分組碼編碼問題的核心就是如何在n維線性空間Vn中找出滿足一定要求的、由2k個矢量組成的k維線性子空間,也就是說,在滿足給定碼字最小距離或編碼速率的前提下,如何根據已知的k個信息比特求得r=n-k個校驗比特。通過對碼字生成矩陣G的初等變換,可以得到惟一的行簡化梯形矩陣,再經過列交換可以得到如下形式的生成矩陣。(2.1)其中P是k×(n-k)的矩陣。這種形式的生成矩陣G稱為標準生成矩陣,按照標準矩陣生成的碼字為(2.2)其中前n-k-1個比特為校驗比特,其值為(2.3)后面k個比特就是信息比特。這種在生成碼字中包含信息序列的編碼碼字稱為線性系統分組碼,簡稱為系統碼。系統碼的編碼結構相當簡單,以系統(7,4)為例,其生成矩陣為:(2.4)系統碼的編碼結構非常簡單,比如對系統(7,4)碼,根據上面的生成矩陣G,只要在輸入編碼器的每組k個數字的后面,附加上(n-k)個監督碼元就可得到所編出的n個碼字。系統(7,4)碼對應的監督矩陣為(2.5)假如發送的碼字為c=(1001011),而接收到的碼字為Y=(1001001),信道傳輸中產生的錯誤為e=(0000010)。由S=y·HT可求出S=(1,1,1)。循環碼循環碼是線性分組碼中最重要的一類,循環碼是指碼集合中的任一碼字經過循環移位后得到的碼字仍然是碼集合中的碼字。循環碼的碼字可以用矢量的形式表示,即:(2.6)也可用碼多項式表示,即:(2.7)循環碼c向右移一位的碼字可由下式得出(2.8)循環碼可由它的生成多項式(2.9)唯一確定。信息序列也可以表示成多項式(2.10)那么生成碼字可表示成(2.11)由于多項式乘法等價于多項式系數的卷積,故(2.12)循環碼編碼則可以通過移位寄存器組成的乘法電路結構實現。由數論知識可知,(n,k)循環碼的生成多項式g(x)一定是xn-1的n-k次因式:(2.13)反之,若g(x)為n-k次多項式,且xn-1能被g(x)整除,則g(x)一定能生成一個(n,k)循環碼。以g(x)為生成多項式所構成的(n,k)循環碼中g(x),xg(x),…,xk-1g(x)(2.14)等七個多項式必定是線性無關,則循環碼的生成矩陣G為(2.15)循環碼的編碼也可以通過移位寄存器組成的除法電路結構實現。以(7,4)循環碼為例,選(7,4)碼生成矩陣g(x)=g3(x)=1+x+x3(2.16)它除盡1+x7,若輸入信息碼元為m(x)=1+x3則由(2.17)因此,碼多項式為(2.18)對應的碼字為C=(0111001)其中最右邊的4位是信息元,詳細的編碼過程如下:三級移位寄存器初始狀態為000,此時門打開,信息組以(2.19)即1001次序分兩路進入編碼器:一路直接輸出;另一路送入g(x)除法電路。經4次移位后,信息組1001全部輸出,它就是系統碼的4個信息元;另一路則將全部信息元送入g(x)除法電路,并完成除法運算,這時移位寄存器中的狀態就是余式r(x)系數,即為碼的監督元(c0c1c2)。輸出開關倒向上面2,經3次移位,移位器由監督元(c0c1c2),跟在信息元(c3c4c5c6)后面依次輸出為C=(c0c1c2c3c4c5c6)=(0111001)。送入第二組信息元,重復上述過程。該碼最小距離為3,它能糾正7個碼元一組中任何單個錯誤,這7種錯誤圖樣和全零矢量一起組成譯碼表的陪集首,它組成了所有可能糾正的圖樣。現假設接收的多項式為(2.20)即Y=(1111001)。譯碼器工作步驟如下:將移位寄存器清零。(2)輸入Y分兩路進入譯碼器:一路進入緩存器;另一路經門1進入伴隨式計算電路與寄存器,并分別計算S0、S1、S2值。(3)在輸出Y的同時,S0、S1、S2依次循環移位。無錯誤時,錯誤檢測電路無輸出,最后輸出的碼字C的碼元與Y相對應碼元一致,有錯誤時,S0=S2=1,S1=0,錯誤檢測電路輸出為“1”,它正好與Y中錯誤位在輸出端的模2加中相遇,并予以糾正后再輸出。2.3卷積碼2.3.1卷積碼的基本概念卷積碼(convolutionalcode)是由伊利亞斯(P·Elias)發明的一種非分組碼。它與前面一節所討論的分組碼不同,是一種非分組碼。通常它更適用于前向糾錯,因為對于許多實際情況它的性能優于分組碼,而且運算簡單。在分組碼中,編譯器產生的n個碼元的一個碼組,完全取決于這段時間中k比特輸入信息。這個碼組中的監督位僅監督本碼組中的k個信息位。卷積碼則不同。卷積碼在編碼時雖然也是把k個比特的信息段編成n個比特的碼組,但是監督碼元不僅和當前的k比特信息段有關,還與前面m=(N-1)個信息段有關。所以一個碼組中的監督碼元監督著N個信息段。通常將N稱為編碼約束度,并將nN稱為編碼約束長度。一般說來,對于卷積碼,k和n的值是比較小的整數。我們將卷積碼記作(n,k,N)。碼率則仍定義為k/n。卷積碼是一種性能優越的信道編碼,它的編碼器和解碼器都比較易于實現,同時還具有較強的糾錯能力,這使得它的使用越來越廣泛。我們在一些資料上可以找到關于分組碼的一些介紹,分組碼的實現是將編碼信息分組單獨進行編碼,因此無論是在編碼還是譯碼的過程中不同碼組之間的碼元無關。卷積碼和分組碼的根本區別在于,它不是把信息序列分組后再進行單獨編碼,而是由連續輸入的信息序列得到連續輸出的已編碼序列。即進行分組編碼時,其本組中的n-k個校驗元僅與本組的k個信息元有關,而與其它各組信息無關;但在卷積碼中,其編碼器將k個信息碼元編為n個碼元時,這n個碼元不僅與當前段的k個信息有關,而且與前面的(N-1)段信息有關(N為編碼的約束長度)。同樣,在卷積碼譯碼過程中,不僅從此時刻收到的碼組中提取譯碼信息,而且還要利用以前或以后各時刻收到的碼組中提取有關信息。而且卷積碼的糾錯能力隨約束長度的增加而增強,差錯率則隨著約束長度增加而呈指數下降。卷積碼(n,k,N)主要用來糾隨機錯誤,它的碼元與前后碼元有一定的約束關系,編碼復雜度可用編碼約束長度N*n來表示。一般地,最小距離d表明了卷積碼在連續N段以內的距離特性,該碼可以在N個連續碼流內糾正(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的增加而增大,在編碼器復雜程度相同的情況下,卷段積碼的性能優于分組碼。卷積碼也是分組的,但它的監督元不僅與本組的信息元有關,而且還與前若干組的信息元有關。卷積碼根據需要,有不同的結構及相應的糾錯能力,但都有類似的編碼規律。值得指出的是一種(2,1,N)卷積碼,其碼率為1/2,它的監督位只有1位,編碼效率較高,也比較簡單。如使用較長的約束長度,則既可以糾正突發差錯,也可以糾正隨機差錯。2.3.2卷積碼的基本原理卷積碼的圖形描述圖2-1卷積碼編碼器以圖2-1的(3,1,3)卷積碼編碼器為例說明卷積碼編碼器的工作過程:圖2-1卷積碼編碼器S輸出序列m1,m2,…mj,…y1,jy2,j輸入序列y3,j3觸點轉換開關和一組3位移存器及模2加法器組成每輸入一個信息比特,經該編碼器后產生3個輸出比特。為方便起見,先假設該移位寄存器的起始狀態全為零,當第一個輸人比特為”0”時,輸出比特為OO0;若第一個輸人比特為I時,則輸出比特為111當輸人第二比特時,第一比特右移一位。此時的輸出比特顯然與“當前輸人比特和前一輸人比特”有關當輸人第成比特時,第一和第二比特皆右移一位,可看到此時的輸出比特與“當前輸入比特和前二位愉人比特”有關。當第四比特輸人時,原第一輸人比特已移出移位寄存器而消失,即第一輸人比特已不再影響當前的輸人比特,如圖2-2所示,以上編碼器在移位過程中可能產生的各種序列,可用樹狀圖、網格圖或狀態圖來描述。tt輸出輸入t圖2-2編碼器輸入-輸出關系碼樹圖圖2-3給出了(3,1,3)卷積碼的樹狀圖。按照習慣的做法。碼樹的起始節點位于左邊;移位寄存器的初始狀態取00,取M1M2=00,用a來表示,并把該a標注于起始節點處。當輸人碼元是0時,則由節點出發走上支路;當輸人碼元是1時.則由節點出發走下支路。例如,當該編碼器第一輸入比特為0時,則走上支路,此時移存器的輸出碼“000”就寫在上支杈ddcbbaa000a011110001110001000111000111111000100101010ababccddadcbbaa111a01111010110001001110000111100011100101010ababccdd圖2-3(3,1,3)卷積碼的樹狀圖的上方;當該編碼器第一輸人比特為1時,則走下支路,此時移存器的輸出碼“111”就寫在圖中下支杈的上方。在輸人第二比特時,移位寄存器右移一位,此時上支路情況下的移位寄存器的狀態為00,即a,并標注于上支路節點處;此時下支路情況下的移位寄存器狀態為O1,即b,并標注于下支路節點處;同時上下支路都將分兩杈。以后每一個新輸人比特都會使上下支路各分兩杈。經過4個輸人比特后,得到的該編碼器的樹狀圖如圖2-3所示。樹狀圖中,節點上標注的a表示M1M2=00,b表示M1M2=O1,。C表示M1M2=10,d表示M1M2=11。狀態圖當網格圖達到穩定狀態后,取出兩個節點間的一段網格圖,即得到圖2-4(a)的狀態轉移圖。此后,再把目前狀態與下一節拍狀態合并起來,即可得到圖2-4(b)的最簡的狀態轉移圖,稱之為卷積碼狀態圖。bbdcabdca100011110001010101111000a000adcb111100011010110110101b圖2-4(3,1,3)卷積碼狀態圖3)網格圖由樹狀圖看到,對于第j個輸人信息比特,相應出現有條支路,且在時樹狀圖出現節點,自上而下重復取4種狀態。又看到,當j變大時,圖的縱向尺寸越來越大。于是提出一種網格圖,注意到碼樹狀態的重復性,使圖形變得緊湊。上例(3,1,3)碼的網格圖示于圖2-5。網格圖中,把碼樹中具有相同狀態的節點合并在一起;碼樹中的上支路用實線表示,下支路用虛線表示;支路上標注的碼元為輸出比特;自上而下的4行節點分別表示a,b,c,d的四種狀態。網格圖中的狀態,通常有種狀態。從第N個節點開始.圖形開始重復,且完全相同。aabcd000000000000000111111111111111011001001110010010010010010010110110110011011011011100圖2-5(3,1,3)卷積碼網格圖卷積碼的解析表述一個二元(2,1,4)卷積碼的編碼器,它是由k=1,即一個輸入位(端),n=2,即兩個輸出位(端),K=4,m=3即三級移位寄存器所組成的有限狀態的有記憶系統。(1)離散卷積若輸入信息序列為(這里的卷積碼是u0首先輸入)(2.21)則對應輸出為兩個碼字序列(2.22)其相應編碼方程可寫為(2.23)其中“*”表示卷積運算,g①、g②表示編碼器的兩個脈沖沖擊響應,即編碼可由輸入信息序列u和編碼器的兩個沖擊響應的卷積得到,故稱為卷積碼[7]。這里的脈沖沖擊響應是指,當輸入信息為u=(100…)時,所觀察到的兩個輸出序列值。由于編碼器有m=3級寄存器,故沖激響應至多可持續到K=m+1=3+1=4位,且可寫成:(2.24)在一般情況下有:(2.25)經編碼器后,兩個輸出序列合并為一個輸出碼字序列為:(2.26)若輸入信息序列為:(2.27)則有:(2.28)(2.29)最后輸出的碼字為:(2.30)(2)生成矩陣上述沖激響應g①g②又稱為生成序列,若將該生成序列g①g②按如下方法排列,構成如下生成矩陣(當K=4,m=3時):(2.31)上述矩陣中,其中空白部分均為0。則上述編碼方程可改為矩陣形式(2.32)G為卷積碼的生成矩陣,若輸入信息序列為一無限序列時,即u=(10111…),生成矩陣則為一個半無限矩陣,即有起點無終點,因此稱它為半無限。若:(2.33)則:(2.34)(3)碼多項式若將生成序列表達成多項式形式,有(2.35)輸入信息序列也可表達為多項式形式(2.36)則卷積碼可以用下列碼多項式形式表達(2.37)(2.38)2.3.3卷積碼的譯碼卷積碼的譯碼方式可以分為兩類:代數譯碼和概率譯碼。代數譯碼是利用編碼本身的代數結構進行譯碼,不考慮信道的統計特性。大數邏輯譯碼,又稱門限譯碼,是卷積碼代數譯碼的最主要一種方法,也可以應用于循環碼的譯碼。大數邏輯譯碼對于約束長度較短的卷積碼最為有效,而且設備較簡單。概率譯碼(又稱最大似然譯碼)則是基于信道的統計特性和卷積碼的特點進行計算。首先由沃曾克拉夫特針對無記憶信道提出的序貫譯碼就是概率譯碼方法之一;另一種概率譯碼方法是維特比(Viterbi)算法。當碼的約束長度較短時,它比序貫譯碼算法的效率更高、速度更快,目前得到廣泛的應用。維特比譯碼算法是維特比于1967年提出的。這種算法的基本原理是將接收到的信號序列和所有可能的發送信號序列比較,選擇其中漢明距離最小的序列認為是當前發送信號序列。若發送一個k位序列,則有2k種可能的發送序列。當K較大時,存儲量太大,使實用受到限制。維特比算法對此作了簡化,使之能夠實用。設發送信息位為:1101,為了使圖2-1中移存器的信息位全部移出,需要在信息位后面加入三個“0”,故經過編碼后的發送序列為111110010100001011000,并且假設接收序列為111010010110001011000,其中第4和第11個碼元為錯碼。由于這是一個(n,k,N)=(3,1,3)卷積碼,發送序列的約束度N=3,所以首先需要考察nN=9。第一步考察接收序列前9位“111010010”。由此碼的網格圖2-6可見,沿路徑每一級有4種狀態a,b,c,d。每種狀態只有兩條路徑可以到達。故4種狀態有8條到達路徑。現在比較網格圖中的這8條路徑和接收序列之間的漢明距離。例如,由出發點狀態a經過三級路徑后到達狀態a的兩條路徑中上面一條為“000000000”。它和接收序列“111010010”的漢明距離等于5;下面一條為“111001011”,它和接收序列的漢明距離等于3。同樣,由出發點狀態a經過三級路徑后到達狀態b,c,d的路徑分別都有兩條,故總共有8條路徑。在表2.1中列出了這8條路徑和漢明距離。a111a111001100b110c010d圖2-6(3,1,3)卷積碼編碼路徑舉例序號路徑對應序列漢明距離幸存否1aaaa0000000005否2abca1110010113是3aaab0000001116否4abcb1110011004是5aabc0001110017否6abdc1111100101是7aabd0001111106否8abdd1111101014是表2.1現在將到達每個狀態的兩條路徑的漢明距離作比較,將距離小的一條路徑保留,稱為幸存路徑。若兩條路徑的漢明距離相同,則可以任意保存一條。這樣就剩下4條路徑了,即表中第2,4,6和8條路徑。第二步將繼續考察接收序列中的后繼3位“110”。現在計算4條幸存路徑上增加一級后的8條可能路徑的漢明距離。計算結果列于表2.2中。序號路徑原幸存路徑的距離新增路徑段新增距離總距離幸存否1abca+a3aa25否2abdc+a1ca23是3abca+b3ab14否4abdc+b1cb12是5abcb+c4bc37否6abdd+c4dc15是7abcb+d4bd04是8abdd+d4dd26否表2.2維特比算法解碼第二步計算結果表2.2中最小的總距離等于2,其路徑是abdc+b,相應序列為111110010100。它和發送序列相同,故對應發送信息位1101。按照表2.2中的幸存路徑畫出的網格圖示于圖2-7中。圖中粗線路徑是漢明距離最小(等于2)的路徑。aa111b100011100001c110010110d010101010圖2-7對應信息位“1101”的幸存路徑網格圖為了使輸入的信息位全部通過編碼器的移存器,使移存器回到初始狀態,在信息位1101后面加了三個“0”。若把這三個“0”仍看作是信息位,則可以按照上述算法繼續解碼。這樣得到的幸存路徑網格圖示于圖2-8中,圖中的粗線仍然是漢明距離最小的路徑,但是,若已知這三個碼元是(為結尾而補充的)“0”。則在解碼計算時就預先知道在接收這三個“0”碼元后,路徑必然應該回到狀態a。而由圖可見,只有兩條路徑可以回到a狀態。所以,這時圖2-8可以簡化成圖2-9。aa000000111011011011001100100001001110010010101101101b000000111011011011001100100001001110010010101101101bccdd圖2-8對應信息位“1101000”的幸存路徑網格圖000000000000111011011011001100100001001110010010101101abcd圖2-9對應信息位“1101”及以“000”結束的幸存路徑網格圖MATLAB基礎與其在通信系統中的應用3.1MATLAB簡介MATLAB是matrix&laboratory兩個詞的組合,意為矩陣工廠(矩陣實驗室)。MATLAB工作界面是由美國mathworks公司發布的主要面對科學計算、可視化以及交互式程序設計的高科技計算環境。它將數值分析、矩陣計算、科學數據可視化以及非線性動態系統的建模和仿真等諸多強大功能集成在一個易于使用的視窗環境中,為科學研究、工程設計以及必須進行有效數值計算的眾多科學領域提供了一種全面的解決方案,并在很大程度上擺脫了傳統非交互式程序設計語言(如C、Fortran)的編輯模式,代表了當今國際科學計算軟件的先進水平。MATLAB和Mathematica、Maple并稱為三大數學軟件。它在數學類科技應用軟件中在數值計算方面首屈一指。MATLAB可以進行矩陣運算、繪制函數和數據、實現算法、創建用戶界面、連接其他編程語言的程序等,主要應用于工程計算、控制設計、信號處理與通訊、圖像處理、信號檢測、金融建模設計與分析等領域。MATLAB的基本數據單位是矩陣,它的指令表達式與數學、工程中常用的形式十分相似,故用MATLAB來解算問題要比用C,FORTRAN等語言完成相同的事情簡捷得多,并且MATLAB也吸收了像Maple等軟件的優點,使MATLAB成為一個強大的數學軟件。在新的版本中也加入了對C,FORTRAN,C++,JAVA的支持。可以直接調用,用戶也可以將自己編寫的實用程序導入到MATLAB函數庫中方便自己以后調用,此外許多的MATLAB愛好者都編寫了一些經典的程序,用戶直接進行下載就可以用。MATLAB主要功能有:數值分析、數值和符號計算、工程與科學繪圖、控制系統的設計與仿真、數字圖像處理、數字信號處理、通訊系統設計與仿真、財務與金融工程等。3.2MATLAB程序設計隨機計算技術的發展,各種各樣的應用軟件越來越多,比如能夠支持數學計算的軟件就有多種:MATLAB、Mathmatica、Scilab等。MATLAB以其強大的矩陣計算能力使它在科學計算與工程設計中更具備競爭力,MATLAB集成了眾多基本的數據處理功能,可以完美支持數值與非數值運算,本小節學習基于MATLAB的基本編程語法。由MATLAB語句構成的程序通常作為文件保存在后綴為.m的文件中,稱為M文件,可以使用任何一種文本編輯器來編寫M文件。M文件的文件名不能用漢字,也不能用數字開頭,只能用英文字符開頭,后綴數字等,長度可達255個字符。M文件一般有兩種類型:script文件(稱為正本文件)與function文件(稱為函數文件)。正本文件: 正本文件是由用戶編寫的一個包含一系列MATLAB正本的文本文件,在MATLAB工作空間的命令行提示符“>>”后敲入這個M文件的文件名就可以依次執行這個M文件中的每條語句。當需要從命令行中執行多條命令時可以使用script文件,為此你只需要將希望執行的命令逐行寫入script文件中,并保存在MATLAB工作目錄下。概括起來正本文件有如下特點:不需要任何實參代入,也不能返回任何輸出參數;其中的變量作用于整個工作空間;使用工作空間中的數據;不需要用到任何MATLAB關鍵字,直接在其中寫可以執行的MATLAB語句;可以利用百分號作注釋。不能包含任何自定義函數。函數文件 可以利用MATLAB系統中的關鍵字與內部函數來構造用戶自己的函數即自定義函數,并將這個函數保存在一個function文件中,它也以.m為擴展名,但要求文件名與函數名相同。概括起來function文件有如下特點:(1)文件第一行必須由關鍵字function開頭,后面緊跟函數原型:function[返回變量表]=函數名(形式參數表)比如二分法求非線性方程根,函數定義語句為function[x,abx]=cbisectionrule(f,interval,epsilon,N)其中function是關鍵字,返回變量多于兩個時要用方括號,這里有兩個返回變量x,abx;函數名為cbisection_rule;形式參數為:f,interval,epsilon,N共四個。(2)函數體可以由任何MATLAB語句構成;(3)被包括在函數文件中的變量只能作用在這個函數文件內部,不能被外部訪問,在MATLAB工作空間中用whos命令無法顯示函數文件中的變量,這與scripts文件不同。(4)同一個function文件中可以定義多個自定義函數,第一個function定義的函數稱為主函數,它的名字應當和文件同名,第二個function及以后各個function定義的函數稱為子函數,它們只能被主函數調用,不能從文件外部訪問,但主函數可以被外部訪問。(5)有些函數文件可以直接在MATLAB命令行中通過敲入文件名來直接執行;但是一些只包含形式參數的函數文件只能被其它函數文件調用。變量 MATLAB編程過程中必然要用到變量,使用MATLAB變量時要注意如下特點:(1)使用時不必預先聲明它的類型,而是直接對它進行賦值,這與C語言不同。變量的類型由表達式運算結果類型決定。(2)變量名必須以字母開頭,后綴任何字母、數字、下畫線,長度最多可達63個字符。(3)變量名中大小寫是有區別的,比如:Ab、aB,AB,ab是完全不同的四個變量。(4)用戶可以使用函數isvarname()來確定用戶給出的變量名是否合法,如果合法就返回1否則返回0。比如:8th_column就不是一個合法的函數名。(5)不要用MATLAB內部的名字來命名自定義變量,比如MATLAB的缺省變量名、內部函數名、關鍵字等。(6)每一個變量都有自己的作用域范圍,因此就有局部變量與全局變量之分,但是要盡量少用或不用全局變量,將每個變量的作用域限制在較小范圍之內,變量之間的數據交換使用子函數來進行,這樣也使得程序的模塊性更強,便于閱讀與分析。(7)MATLAB中的幾個特殊變量可以返回幾個重要特殊數值,可以直接在MATLAB語句中調用它們。3.3通信系統仿真3.3.1通信仿真的概念現代的通信系統越來越復雜,對這個系統做出的任何改變,如改變某個參數的設置或系統結構等都可能影響整個系統的性能和穩定。因此,在對原有的通信系統做出改進或建立一個新系統前,通常需要對這個系統進行建模和仿真,通過仿真結果衡量方案的可行性,從中選擇最合理的系統配置和參數設置,然后再應用于實際系統中。這個過程就是通信仿真。通信系統的仿真往往涉及較多的研究領域,包括通信原理、數字信號處理、概率論、信號檢測與估計、隨機過程理論、信號系統理論等等。掌握通信原理是通信系統仿真的關鍵,而數字信號處理是用于開發構成通信系統仿真模型的算法,現代通信系統的許多新技術都涉及算法,如多天線系統中波束成形算法、信道均衡中的算法等。通信系統的性能指標通常以概率形式表示,如比特差錯概率。在許多情況下,仿真要處理的信號和噪聲均是隨機過程的一個樣本,而且,對于無線信道的描述也需要隨機過程理論。3.3.2通信仿真的基本方法從本質上講,仿真方法論是很難系統化的,但除了最簡單的情況外,所有仿真問題都要涉及一些基本步驟:將給定問題映射為仿真模型;把整個問題分解為一組子問題;選擇合適的建模、仿真和估計方法,并將其用于解決這些子問題;綜合各子問題的解決結果以提供對整個問題的解決方案。對整個通信系統的仿真是一個復雜的問題,往往需要把問題進行分層,不同層次的仿真,其方法與目的不同。可以把仿真分為四個層次:系統級仿真、子系統級仿真、原件級仿真和電路級仿真。越高層次的仿真,抽象越多,涉及的模型細節越少;越低層次的仿真,越與實際硬件相近,涉及的硬件細節和參數越多。對于電路級仿真,人們更多的使用硬件原型來進行驗證和測試,在通信系統波形級仿真,很少涉及這一層次。通常情況下,人們盡可能高的抽象程度來仿真。因為越高的抽象意味著越少的參數和越高效的仿真。3.3.3仿真通信系統模型為了模擬實際通信系統,需要建立通信系統模型,仿真通信系統框圖如圖3-1所示,其中序列為隨機輸入的二進制碼元,卷積編碼即是通過MATLAB仿真的部分。信道為簡單的加性高斯白噪聲信道,即產生誤碼的原因。調制方式為BPSK調制,譯碼方式采用了Viterbi算法的卷積碼譯碼,也是通過MATLAB仿真的部分。最終的信息輸出即為接收端。序列序列產生信道編碼BPSK

調制AWGN信道傳輸BPSK

解調Viterbi譯碼信息輸出圖3-1仿真通信系統框圖模型第四章卷積碼編譯碼的MATLAB仿真4.1卷積碼的編碼仿真在程序設計中,我們沒有采用MATLAB自帶的編碼函數而是采用了自己的編碼函數codec對(2,1,3)卷積碼編碼,其參數m為輸入信息序列,g1,g2為兩個輸出端口的沖激響應序列。編碼程序如下: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)輸出為:cod=[110101001011]仿真結果如圖4-1圖4-1(2,1,3)卷積碼編碼4.2卷積碼的譯碼仿真Viterbi算法是通過加-比較-選擇來實現的,狀態量度的計算方法如下:將前兩個狀態點上的狀態量度和相應分支量度相加,得到的兩個可能路徑量度作為新的狀態量度的候選項,送入邏輯單元中進行比較,將其中似然性最大(距離最小)的一個作為狀態的新狀態量度存儲,同時存儲的還有狀態新的路徑記錄,主要算法步驟為:(1)將接收到的序列分成每段長為n0的m組子序列。(2)對所研究的碼畫出深度為m級的網格圖。對該網格圖的最后(L-1)級僅畫出對應于全0輸入序列的路徑。(3)置s=1,并置初始全0狀態的度量等于0。(4)對網格圖中全部連接第s級狀態到(s+1)級狀態的支路求出該接收序列中的第s個子序列的距離。(5)將這些距離加到第s級各狀態的度量上去,得到對第(s+1)級狀態的度量候選者。對于第(s+1)級的每一狀態,有QUOTE個候選度量,其中每一個都對應終止在那個狀態的一條支路。(6)對在第(s+1)級的每一狀態,挑選出最小的候選度量,并將對應于這個最小值的支路標以留存支路,同時指定之歌候選度量的最小值作為第(s+1)級狀態的度量值。(7)若s=m,轉到下一步;否則將s增加1并轉到第4步。(8)在第(m+1)級以全0狀態開始,沿著留存支路通過網格圖往會到達初始全0狀態,這條路徑就是最佳路徑,并且對應于這條路徑的輸入比特序列是最大似然解碼序列。為了得到有關這個輸入比特序列最好的推測,將最后(L-1)k0個0從該序列中除掉。根據算法繪出程序流程圖如圖4-2示:程序初始化,將路徑信息和當前累計度量值清零,統計碼長程序初始化,將路徑信息和當前累計度量值清零,統計碼長對前兩步進行漢明距度量并保存路徑信息是否解碼完成計算能到達當前狀態的兩條路徑將兩條路徑a,b輸出與輸入比較漢明距,并累加到路徑度量a路徑累計度量是否小于b選a為當前點的最優到達路徑選b為當前點的最優到達路徑選取度量值最小路徑輸出是否否是圖4-2Viterbi譯碼流程圖從Viterbi算法中可以看到,對于一個長信息序列解碼時,解碼延時和所需要的存儲量都是無法接受的。直到整個序列全被接收,解碼才能開始,而且還不得不將總的留存路徑存儲起來。實際上,不會引起這些問題的次優解倒是很希望的。一種稱為路徑存儲截斷的辦法是:在每一級編碼器在網格圖中僅往會搜索w級,而不回到網格圖的出發點。用這種辦法在第(w+1)級解碼器對相應于網格圖第1級的輸入比特作出判決,并且未來的接收比特不改變這個判決。這意味著解碼延時是k0w比特,需要保存的路徑只相應于最后W級的路徑。計算機仿真已經表明,如果W>5n,由于路徑存儲截斷造成的性能下降可忽略不計。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數組記錄了當前狀態j下輸入l時的下一個狀態nextstate(j+1,m+1)=next_state;% output數組記錄了當前狀態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%選擇碼間距較小的路徑,即當下一個狀態沒有被訪問時就直接賦值,否則,用比它小的將其覆蓋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);將程序在matlab中進行仿真,對于(2,1,3)譯碼,G=[111;101],channel_output=recv,此時令信噪比snr_db=12,得到仿真圖形如圖4-3所示:圖4-3viterbi譯碼輸出的是正確結果[1101],由理論分析知,信道編碼經過bpsk調制,由于信道噪聲的干擾,在信號解調后會產生一定的差錯,維特比譯碼雖然有具有糾錯功能,但是畢竟是有限的,所以信噪比對viterbi譯碼性能將產生影響,且信噪比越大,維特比譯碼越準確。為了驗證上述推論,將信噪比減小,令SNR=6。MATLAB仿真結果如圖4-4所示:當信噪比降低到SNR=6時,譯碼輸出變為[0111],產生了差錯。驗證了上述推論。圖4-4調整信噪比后的譯碼結果卷積碼的性能分析5.1信噪比對卷積碼譯碼性能的影響上述過程只是可以看出信噪比會影響維特比譯碼的性能,為了進一步得到兩者更加直觀的聯系,我們可以通過編程得到信噪比與誤碼率之間的函數關系,同時將沒有進行卷積碼的信號也計算其誤碼率。代碼如下: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中運行,得到仿真圖如圖5-1所示,該圖直觀的反映了經過卷積碼編碼和沒有經過卷積碼編碼的誤碼率之間的區別。從圖中可以看出,當信噪比較小時,未編碼的誤碼率反而比采用編碼的誤碼率低,這是因為誤比特太多導致接收到的信息幾乎無效。但是當信噪比稍高后卷積碼編碼譯碼的誤碼率就大大降低了。圖5-1信噪比對誤碼率的影響5.2碼率對卷積碼譯碼性能的影響卷積碼的碼率R=k/n,它是卷積碼的一個重要參數,當改變卷積碼的碼率時,系統的誤碼性能也將隨之發生變化,為了研究碼率對卷積碼誤碼性能的影響,我們以碼率為1/2的(2,1,3)卷積碼和碼率為1/3的(3,1,3)卷積碼作為仿真碼字。(2,1,3)卷積碼的trellis結構為poly2trellis(3,[75]),(3,1,3)卷積碼的trellis結構為poly2trellis(3,[165])。從圖5-2中的誤比特率曲線可以看出,當碼率一定時,隨著信道噪聲的逐漸減小,系統的誤比特率也逐漸減小,對比兩條曲線可清楚地得出(3,1,3)卷積碼的性能要比(2,1,3)卷積碼要好。于是可以得出如下結論:當改變系統碼率時,隨著卷積碼碼率的逐漸提高,系統的誤比特率也呈現出增大的趨勢,也就是說,碼率越低,系統的誤比特率就越小,誤碼性能就越好。圖5-2碼率對卷積碼性能的影響5.3約束長度對卷積碼性能的影響對于碼率一定的卷積碼,當約束長度N發生變化時,系統的誤碼性能也會隨之發生變化,我們以碼率R=1/2的(2,1,3)和(2,1,7)卷積碼為例展開分析。(2,1,7)卷積碼只需將trellis結構改成poly2trellis(7,[171133])即可。從下圖5-3中的誤比特率曲線可以清楚地看到,在低信噪比時,(2,1,3)卷積碼的的性能要好于(2,1,7)卷積碼的性能。然而當信噪比高于一定值后,(2,1,7)卷積碼的的性能要好于(2,1,3)卷積碼的性能,隨著約束長度的逐漸增加,系統的誤比特率明顯降低,所以說當碼率一定,信噪比高于一定值時,增加約束長度可以降低系統的誤比特率,但是隨著約束長度的增加,譯碼設備的復雜性也會隨之增加,所以對于碼率為1/2的卷積碼,我們在選取約束長度時一般為3~9。圖5-3約束長度對卷積碼性能的影響5.4回溯長度對卷積碼性能的影響回溯長度是在Viterbi譯碼過程中一個很重要的參數,它決定了維特比譯碼的精度,同時也影響著譯碼延遲(即在輸出第一個解碼數據之前輸出的0的個數),隨著它的不斷變化誤碼性能也隨之改變。這里采用(2,1,3)卷積碼為例,將反饋深度分別取值為5,15和35。仿真結果如圖5-4。圖5-4回溯長度對卷積碼性能的影響從圖中的誤比特率曲線可以清楚地看到,當回溯長度一定時,隨著信道噪聲的逐漸減小,系統的誤比特率逐漸降低;當回溯長度逐漸增加,系統的誤比特率隨之逐漸降低,但是當回溯程度增加到5N時(N為編碼的約束長度),誤比特率數值趨于穩定,這里的(2,1,3)卷積碼在回溯長度達到15左右基本趨于穩定。因此在確定回溯長度時既要考慮到隨著信噪比增加誤比特率隨之降低的趨勢,也要考慮到譯碼延遲會變大,在選取回溯長度時,通常取回溯長度為5N。5.5判決方式對卷積碼性能的影響采用軟判決即將信道輸出的編碼先不立即判決,而是進行量化,量化程序如下: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);再進行維特比軟判決譯碼。從圖5-5可知,采用軟判決的誤碼率明顯低于硬判決,實際上軟判決譯碼算法的路徑度量采用“軟距離”而不是漢明距離。最常采用的是歐幾里德距離,也就是接收波形與可能的發送波形之間的幾何距離。在采用軟距離的情況下,路徑度量的值是模擬量,需要經過一些處理以便于相加和比較。因此,使計算復雜度有所提高。除了路徑度量以外,軟判決算法與硬判決算法在結構和過程上完全相同。一般而言,由于硬判決譯碼的判決過程損失了信道信息,軟判決譯碼比硬判決譯碼性能上要好約2dB。圖5-5判決方式對卷積碼性能的影響結論卷積碼是一種糾錯編碼,糾錯編碼己有五十幾年歷史,早在1948年,香農(Shannon)在他的開創性論文“通信的數學理論”中,首次闡明了在有擾信道中實現可靠通信的方法,提出了著名的有擾信道編碼定理,奠定了糾錯碼的基石。以后,糾錯碼受到了越來越多的通信和數學工作者,特別是數學家的重視,使糾錯碼無論在理論上還是在實際中都得到了飛速發展。本文首先從數字通信的一些基本概念和差錯控制編碼理論出發,引入卷積碼的一些基本理論,接著討論了卷積碼的編譯碼基本原理,對卷積碼的表示方法和編譯碼算法做了簡單的介紹,再通過編寫卷積碼的編碼和解碼程序,并且用MATLAB仿真軟件進行仿真和糾錯驗證,并通過對不同碼率、不同約束長度、不同回溯長度,以及不同判決方式情況下誤碼率的分析,得出以下結論:(1)當編碼約束長度不大,當碼率一定時,隨著信道噪聲的逐漸減小,系統的誤比特率也逐漸減小。(2)當改變系統碼率時,隨著卷積碼碼率的逐漸提高,系統的誤比特率也呈現出增大的趨勢,也就是說碼率越低,系統的誤比特率就越小,誤碼性能就越好。對于二進制對稱信道,當采用BPSK調制方式時,通常選取的碼率為1/2。(3)對于碼率一定的卷積碼,當約束長度N發生變化時,系統的誤碼性能也會隨之發生變化,隨著約束長度的逐漸增加,系統的誤比特率明顯降低,所以說當碼率一定時,增加約束長度可以降低系統的誤比特率,但是,隨著約束長度的增加,譯碼設備的復雜性也會隨之增加。所以對于碼率為1/2的卷積碼,在選取約束長度時一般為3~9。(4)對于碼率一定的卷積碼,當反饋深度發生變化時,系統的誤碼率也會發生一定的變化,隨著反饋深度的增加,系統的誤碼率呈下降趨勢,但是通常在反饋深度大于或者等于約束長度的五倍時,誤碼率幾乎不再發生變化,故常常取回溯長度為5N。(5)對于碼率一定的卷積碼,采用的譯碼判決方式不同,也會對系統的誤碼率產生影響,一般來說,軟判決譯碼性能要優于硬判決譯碼性能,但這是以提高設備復雜性為代價的。在本次卷積碼編譯碼算法研究過程中,我學到了許多關于卷積碼的知識,對卷積碼的糾錯性能有了較為深刻的認識。但是由于時間和個人能力等方面的不足,課題研究中還有些地方做的不到位,也有些領域沒有研究,值得進一步完善。如在信道傳輸過程中,本文只是考慮了BPSK信道編碼,而沒有采用較為復雜的QPSK編碼,所以沒能研究不同的信道編碼方式對卷積碼誤碼性能的影響。卷積碼的譯碼方法眾多,本文只對Viterbi譯碼算法做了初步的研究,對其它的譯碼方式,如代數譯碼和序貫譯碼,沒有進行詳細的研究和比較,所以沒能研究不同譯碼方式對卷積碼誤碼性能的影響。卷積碼自提出以來就受到人們的重視,并顯現出了巨大的優越性,隨著通信技術的進步,卷積碼也將得到更大的發展,將提出更多形式的新型卷積碼,進一步優化通信系統的性能。致謝時間如梭,轉眼畢業在即。回想在大學求學的四年,心中充滿無限感激和留戀之情。感謝母校為我們提供的良好學習環境,使我們能夠在此專心學習,陶冶情操。謹向我的論文指導老師王副教授致以最誠摯的謝意!王老師不僅在學業上言傳身教,而且以其高尚的品格給我以情操上的熏陶。本文的寫作更是直接得益于他的悉心指點,從論文的選題到體系的安排,從觀點推敲到字句斟酌,無不凝聚著他的心血。滴水之恩,當以涌泉相報,師恩重于山,師恩難報。我只有在今后的學習、工作中,以鍥而不舍的精神,努力做出點成績,以博恩師一笑。

另外,我必須感謝我的父母。焉得諼草,言樹之背,養育之恩,無以回報。作為他們的孩子,我秉承了他們樸實、堅韌的性格,也因此我有足夠的信心和能力戰勝前進路上的艱難險阻;也因為他們的日夜辛勞,我才有機會如愿完成自己的大學學業,進而取得進一步發展的機會。

最后,我必須感謝我的朋友們,四年時光有如白駒過隙,剛入學時的情景仿佛發生在昨天,歷歷在目。感謝四年中有他們的陪伴,并且在學習與生活中幫助我,與我分享喜悅,承擔痛苦。參考書目[1]郝建軍,桑林,劉丹譜,羅濤編著,《數字通信(第2版)》.北京郵電大學出版社.2010[2]張忠培,史治平,王傳丹編著.《現代編碼理論與應用》.北京:人民郵電出版社.2007[3]傅祖蕓,趙建中編著,《信息論與編碼》,電子工業出版社,2010[4]樊昌信,曹麗娜編著,《通信原理(第6版)》,國防工業出版社,2011[5]鄧華.Matlab通信仿真及應用[M].北京:人民郵電出版社,2000.[6]王新梅,肖國鎮.糾錯碼一原理與方法.西安,西安電子科技大學出版社,2001,4[7]孟夏,申敏,王飛.TD-SCDMA中(2,1,9)卷積編碼及其VITERBI譯碼算法的SIMULINKS-FUNCTION實現[J].通信技術,2008,41(8):26-30.[8]徐文燕.通信原理[M].北京:北京郵電學院出版社,2008[9]張忠培,史治平,王傳丹編著.現代編碼理論與應用.北京:人民郵電出版社.2007[10](美)S.LinandD.J.Costello著.晏堅,何元智,潘亞漢等譯.差錯控制編碼.[11]張忠培,史治平,王傳丹編著.現代編碼理論與應用.北京:人民郵電出版社.2007[12]仇佩亮.《信息論與編碼》高等教育出版社.[13]徐文燕.通信原理[M].北京:北京郵電學院出版社,2008[14]C.E.Shannon.“Amathematicaltheoryofcommunication”.BellSystemsTechnicalJournal,vol.27,pp.379-423,July1948.[15]C.Berrou,A.Glavieux,andP.Thitimajshima.“Nearshannonlimiterr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論