1.1 引言
卷積碼是1955年由Elias等人提出的,是一種非常有前途的編碼方法,我們在一些資料上可以找到關于分組碼的一些介紹,分組碼的實作是將編碼資訊分組單獨進行編碼,因此無論是在編碼還是譯碼的程序中不同碼組之間的碼元無關,卷積碼和分組碼的根本區別在于,它不是把資訊序列分組后再進行單獨編碼,而是由連續輸入的資訊序列得到連續輸出的已編碼序列,即進行分組編碼時,其本組中的n-k個校驗元僅與本組的k個資訊元有關,而與其它各組資訊無關;但在卷積碼中,其編碼器將k個資訊碼元編為n個碼元時,這n個碼元不僅與當前段的k個資訊有關,而且與前面的段資訊有關,同樣,在卷積碼譯碼程序中,不僅從此時刻收到的碼組中提取譯碼資訊,而且還要利用以前或以后各時刻收到的碼組中提取有關資訊,而且卷積碼的糾錯能力隨約束長度的增加而增強,差錯率則隨著約束長度增加而呈指數下降,卷積碼(n,k,m)主要用來糾隨機錯誤,它的碼元與前后碼元有一定的約束關系,編碼復雜度可用編碼約束長度mn來表示,一般地,最小距離d表明了卷積碼在連續m段以內的距離特性,該碼可以在m個連續碼流內糾正(d-1)/2個錯誤,卷積碼的糾錯能力不僅與約束長度有關,還與采用的譯碼方式有關,總之,由于n,k較小,且利用了各組之間的相關性,在同樣的碼率和設備的復雜性條件下,無論理論上還是實踐上都證實:卷積碼的性能至少不比分組碼差,
1.2 卷積編碼原理
卷積碼在一個二進制分組碼(n,k)當中,包含k個資訊位,碼組長度為n,每個碼組的(n-k)個校驗位僅與本碼組的k個資訊位有關,而與其它碼組無關,為了達到一定的糾錯能力和編碼效率( =k/n),分組碼的碼組長度n通常都比較大,編譯碼時必須把整個資訊碼組存盤起來,由此產生的延時隨著n的增加而線性增加, 為了減少這個延遲,人們提出了各種解決方案,其中卷積碼就是一種較好的信道編碼方式,這種編碼方式同樣是把k個資訊位元編成n個位元,但k和n通常很小,特別適宜于以串行形式傳輸資訊,減小了編碼延時, 與分組碼不同,卷積碼中編碼后的n個碼元不僅與當前段的k個資訊有關,而且也與前面(N-1)段的資訊有關,編碼程序中相互關聯的碼元為nN個,因此,這N時間內的碼元數目nN通常被稱為這種碼的約束長度,卷積碼的糾錯能力隨著N的增加而增大,在編碼器復雜程度相同的情況下,卷段積碼的性能優于分組碼,另一點不同的是:分組碼有嚴格的代數結構,但卷積碼至今尚未找到如此嚴密的數學手段,把糾錯性能與碼的結構十分有規律地聯系起來,目前大都采用計算機來搜索好碼,
下面通過一個例子來簡要說明卷積碼的編碼作業原理,正如前面已經指出的那樣,卷積碼編碼器在一段時間內輸出的n位碼,不僅與本段時間內的k位資訊位有關,而且還與前面m段規定時間內的資訊位有關,這里的m=N-1通常用(n,k,m)表示卷積碼(注意:有些文獻中也用(n,k,N)來表示卷積碼),圖1就是一個卷積碼的編碼器,該卷積碼的n = 2,k = 1,m = 2,因此,它的約束長度nN = n×(m+1) = 2×3 = 6,
假如輸入的資訊為D = [11010],為了使資訊D全部通過移位暫存器,還必須在資訊位后面加3個零,表1列出了對資訊D進行卷積編碼時的狀態,
表1 資訊D進行卷積編碼時的狀態
| 輸入資訊D | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 |
| B3b2 | 00 | 0 1 | 1 1 | 1 0 | 0 1 | 1 0 | 0 0 | 0 0 |
| 輸出C1C2 | 1 1 | 0 1 | 0 1 | 0 0 | 1 0 | 1 1 | 0 0 | 0 0 |
描述卷積碼的方法有兩類,也就是圖解表示和決議表示,決議表示較為抽象難懂,而用圖解表示法來描述卷積碼簡單明了,常用的圖解描述法包括樹狀圖、網格圖和狀態圖等,
卷積碼的譯碼方法可分為代數譯碼和概率譯碼兩大類,代數譯碼方法完全基于它的代數結構,也就是利用生成矩陣和監督矩陣來譯碼,在代數譯碼中最主要的方法就是大數邏輯譯碼,概率譯碼比較常用的有兩種,一種叫序列譯碼,另一種叫維特比譯碼法,雖然代數譯碼所要求的設備簡單,運算量小,但其譯碼性能(誤碼)要比概率譯碼方法差多
因此,目前在數字通信的前向糾錯中廣泛使用的是概率譯碼方法
1.3 卷積碼的編碼演算法
卷積碼的編碼描述方法有 5 種:沖激回應描述法、生成矩陣描述法、多項式乘積描述法、 狀態圖描述法和網格圖描述法[2],本文采用的是沖擊回應描述法編碼思想,下面以n=2,k=1,N=3,(2,1,3)卷積碼為例展開研究,其編碼方式如圖1 所示,

圖 2 卷積碼編碼器(編碼效率 1/ 2 , N = 3)
沖激回應,就是編碼器對移入的單個 “1” 位元的回應(假設暫存器初始狀態為0 0 0) ,當一位1 通過圖三 的暫存器時,暫存器的內容為:
表2 卷積碼暫存器內容
|
暫存器內容
| 分支字 | |
| 1 | Q | |
| 100 | 1 | 1 |
| 010 | 1 | 0 |
| 001 | 1 | 1 |
輸入序列:1 0 0
輸出序列:1 1 1 0 1 1
輸入 “1” 所對應的輸出序列就是這個編碼的回應,輸入序列 m = 101 時,對應的輸出可按如下方式線性疊加時移輸入 “脈沖” 得到,由于可以通過將按時間移位的脈沖進行線性疊加,或者將輸入序列和編碼器的脈沖回應相卷積,來產生輸出編碼,因此這種編碼器稱為卷積編碼器,
輸入序列:1 0 0
輸出序列:1 1 1 0 1 1
輸入 “1” 所對應的輸出序列就是這個編碼的回應,輸入序列 m = 101 時,對應的輸出可按如下方式線性疊加時移輸入 “脈沖” 得到,由于可以通過將按時間移位的脈沖進行線性疊加,或者將輸入序列和編碼器的脈沖回應相卷積,來產生輸出編碼,因此這種編碼器稱為卷積編碼器,
1.4 卷積碼的結構和描述方法
卷積碼的一般結構:


圖3 卷積碼編碼結構
由上圖可以看到,n個輸出位元不僅與當前的k個輸入資訊有關,還與前(N-1)k個資訊有關,通常將N稱為約束長度,(有的書的約束長度Nn),常把卷積碼記為:(n,k,N)
其編碼效率為k/n卷積碼編碼器的實體方框圖:
(n,K,N)=(3,1,3)
- 從樹狀圖看到,對于第j個輸入資訊位元,相應出現有 條支路,且在 時樹狀圖出現節點,自上而下重復取4種狀態;當j變大時圖的縱向尺寸越來越大,
- 提出一種網格圖,注意到碼樹狀態的重復性,使圖形變得緊湊,
(二) 狀態圖描述法
當網格圖達到穩定狀態后,取出兩個節點之間的一段網格圖,得到狀態轉移圖,此后,再把目前狀態與下一節拍狀態合并起來,即可得到最簡的狀態轉移圖,稱之為卷積碼狀態圖,(3,1,3)卷積碼的狀態圖,隨著資訊序列不斷輸入,編碼器就不斷從一個狀態轉移到另一個狀態并同時輸出相應的碼序列,所以圖3所示狀態圖可以簡單直觀的描述編碼器的編碼程序,因此通過狀態圖很輕易給出輸入資訊序列的編碼結果,假定輸入序列為110100,首先從零狀態開始即圖示a狀態,由于輸入資訊為“1”,所以下一狀態為c并輸出“11”,繼續輸入資訊“1”,由圖知下一狀態為d、輸出“01”……其它輸入資訊依次類推,按照狀態轉移路徑a->c->d->b->c->b->a輸出其對應的編碼結果“110101001011”,
狀態圖可以完整的描述編碼器的作業程序,但是其只能顯示狀態轉移的程序而不能顯示狀態轉移發生的時刻,由此引出用來表示卷積碼的另一種常用方法——網格圖,網格圖就是時間與對應狀態的轉移圖,在網格圖中每一個點表示該時刻的狀態,狀態之間的連線表示狀態轉移,通過觀察網格圖可以發現在網格圖中輸入資訊x并沒有標出,但如觀察到轉移后的狀態表示,x)就可以發現輸入資訊已經隱含在轉移后的狀態中,在圖4中還可以發現兩個網格圖不同主要集中在轉移后狀態位置不同,重新排序結構是為了優化運算而設計的,因為其中蝶型與蝶型之間是相互獨立的,
下面就讓我們來看看網格圖是如何描述卷積編碼程序的:仍以(2,1,2)為例,假定輸入序列為1011010100,起始狀態為狀態a,第一個有效時鐘沿來臨后,編碼器接收到輸入資訊“1”,根據圖4所示網格圖知該時刻狀態為c,并輸出其對應的編碼結果“11”,同樣在下一個時刻接收到輸入資訊“0”,狀態變為b并輸出“10”,接下來的輸入資料依次類推……,由此我們可以用網格圖作出該例子的卷積編碼程序,如圖5所示,其中兩個狀態連線之間的資訊為輸出結果圖5網格圖描述卷積編碼程序由圖可以看出網格圖非常明了地描述了卷積碼的編碼程序,

多項式法就是由卷積碼的生成多項式直接得出其編碼器的結構圖,如上面例子中的(2,1,2)卷積碼的生成多項式矩陣為:
G=1+D+D2,1+D2
其中,D是延遲算子,生成多項式的第一項為1+D+D2,表示輸出編碼的第一個碼元等于輸入碼元x與前兩個時刻輸入的碼元x、x的模2和,同理第二項類似,
為了更好地理解卷積碼生成多項式矩陣和編碼器之間的關系,下面再舉一個k>1的例子:卷積碼的生成多項式矩陣為:

2.1 Matlab程式及結果
我們采用matlab來驗證模塊設計的正確性,在matlab6.5里有卷積編碼函式convenc可呼叫,在本例中涉及到的引數分別設定為IG=171、QG=133、K=7,所以將上述引數代入卷積編碼多項式轉換成網格描述的函式poly2trellis中即可完成convenc函式所需的必要轉換,即trellis=poly2trellis(K,IG,QG);這樣就可以使用convenc函式進行卷積編碼,msg_con=convenc(msg_bit,trellis),其中msg_bit為輸入資訊序列,
假定msg_bit=10110101000000,則matlab輸出結果:msg_con=1110001001101001110010110111;為了和matlab輸出結果比較方便將msg_con用I、Q兩路表示,則msg_i=11010110101101,msg_q=10001001100111
函式卷積碼M檔案:
function output = cnv_encd(g,k0,input)
if rem(length(input),k0)>0 %看填充0是否為必須,
input=[input,zeros(size(1:k0-rem(length(input),k0)))];
end
n=length(input)/k0; %把輸出的位元按全0分組,n為所得的組數,
if rem(size(g,2),k0)>0 %檢查矩陣的大小
error('Error, g is not of the right size.')
end
l=size(g,2)/k0; %暫存器的數+1,也就是通常所說的約束長度
n0=size(g,1); %編碼后的并行輸出埠數
u=[zeros(size(1:(l-1)*k0)),input,zeros(size(1:(l-1)*k0 ))]; %保證編碼器從全0 開始,并回到全0狀態
ul=u(l*k0:-1:1);
for i=1:n+l-2
ul=[ul,u((i+l)*k0:-1:(i*k0+1) )];
end
uu=reshape(ul,l*k0,n+l-1);
output=reshape(rem(g*uu,2),1,n0*(l+n-1));
主程式
k0=2;%輸入埠數,為2,
g=[0 0 1 0 1 0 0 1;0 0 0 0 0 0 0 1;1 0 0 0 0 0 0 1]; %編碼矩陣,幾行就代表幾個輸出口,%列的最右邊暫存器的連接狀態
input=[1 0 0 1 1 1 0 0 1 1 0 0 0 0 1 1 1];%輸入的二進制序列
output=cnv_encd(g,k0,input);%編碼輸出
當輸入為當資訊序列為 1 0 0 1 1 1 0 0 1 1 0 0 0 0 1 1 1,其輸出結果如下圖所示,

圖8 matlab程式結果圖
2.3 卷積碼性能分析
(1) 碼率對誤碼性能的影響
卷積碼的碼率 R = k/ n,他是卷積碼的一個重要引數,當改變卷積碼的碼率時,系統的誤碼性能也將隨之發生變化,從圖4 中的誤位元率曲線可以看出,當碼率一定時,隨著信道噪聲的逐漸減小,系統的誤位元率也逐漸減小,當改變系統碼率時,隨著卷積碼碼率的逐漸提高,系統的誤位元率也呈現出增大的趨勢,也就是說碼率越低,系統的誤位元率就越小,誤碼性能就越好,仿真表明[4 ],當系統碼率從2/ 3 降至1/ 3 時,可以使誤位元率減小0125 dB ,然而,信道帶寬和譯碼器的復雜性也將相應地增加,因此,對于二進制對稱信道,當采用BPSK調制方式時,通常選取的碼率為1/ 2,
(2) 約束長度對誤碼性能的影響
對于碼率一定的卷積碼,當約束長度 N 發生變化時,系統的誤碼性能也會隨之發生變化,我們以碼率 R = 1/ 2的(2 ,1 ,3)卷積碼為例展開分析,從圖5 中的誤位元率曲線可以清楚地看到,隨著約束長度的逐漸增加,系統的誤位元率明顯降低,所以說當碼
(3) 回溯長度對卷積碼性能的影響
回溯長度是在 Viterbi 譯碼程序中一個很重要的引數,他決定了譯碼延遲,隨著他的不斷變化,誤碼性能也隨從圖6 中的誤位元率曲線可以清楚地看到,當回溯長度一定時,隨著信道噪聲的逐漸減小,系統的誤位元率逐漸降低;當回溯長度逐漸增加,系統的誤位元率隨之逐漸降低,但是當回溯程度τ增加到τ≥ 5 N 時( N 為編碼的約束長度) ,誤位元率數值趨于穩定,因此,在確定回溯長度時既要考慮到隨著τ的增加誤位元率隨之降低的趨勢,也要考慮到譯碼延遲會變大,在選取回溯長度時,通常取τ= 5 N,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/163100.html
標籤:其他
