matlab中 卷積碼 及Viterbi解碼內容

2021-06-27 05:37:46 字數 2810 閱讀 7531

根據卷積編碼是否有負反饋,poly2trellis的有兩種呼叫形式。

trellis = poly2trellis(constraintlength,codegenerator);

trellis = poly2trellis(constraintlength,codegenerator,...feedbackconnection);

這裡我只討論無負反饋的形式。

下圖是乙個r=2/3的卷積編碼器,經過s/p轉換變成兩路資料,first input和second input兩路在暫存器中進行卷積編碼,輸出並行的三路first output,second output 和third outout。那麼constraintlength就是描述每一路輸入的長度,本編碼器有兩路輸入,對應著下圖第一行暫存器,四個暫存器+乙個first input一共5個輸入;同樣對與第二行一共就有4個輸入。那麼constraintlength就應該是[5,4]。

那麼對於函式的第二個引數codegenerator的引數比較複雜。如果有n路輸入,m路輸出話,那麼codegenerator就是乙個n×m的乙個矩陣,矩陣的元素是乙個比較特殊。octal number,8進製的數。在n×m的矩陣中的第(i,j)個元素,其表示第i路的輸入和第j路的連線情況。當第i路的資料和第j路的加法器連線是就將該暫存器的輸出處標為1,如(1,1)連線情況是第

一、第四和第五個相連所以用向量表示為"10011"用八進位制表示為"23"(1,2)="11,101"="35";(1,3)="0000"="0";(2,1)="0000"="0";(2,2)="0,101"="05";(2,3)="1,011"="13",最後得到codegenerator=[23,35,0;0,05,13]。

這裡的到了產生卷積編碼器的編碼器的表示方法,那麼生成相應的trellis就能在系統中使用了。在命令列中鍵入trellis=poly2trellis([5,4],[23,35,0;0,05,13])得到如下輸出。

>>trellis=poly2trellis([5,4],[23,35,0;0,05,13])

trellis =

numinputsymbols: 4 

【兩個輸入2^2=4】

numoutputsymbols: 8 

【三個輸出2^3=8】 

numstates: 128 

【說明:128=2^3*2^4(3是第一級暫存器的個數,4第二級暫存器的個數】

nextstates: [128x4 double] 

【輸入乘以中間狀態】

outputs: [128x4 double]根據卷積編碼是否有負反饋,poly2trellis的有兩種呼叫形式。

trellis = poly2trellis(constraintlength,codegenerator);

trellis = poly2trellis(constraintlength,codegenerator,...feedbackconnection);

這裡我只討論無負反饋的形式。

下圖是乙個r=2/3的卷積編碼器,經過s/p轉換變成兩路資料,first input和second input兩路在暫存器中進行卷積編碼,輸出並行的三路first output,second output 和third outout。那麼constraintlength就是描述每一路輸入的長度,本編碼器有兩路輸入,對應著下圖第一行暫存器,四個暫存器+乙個first input一共5個輸入;同樣對與第二行一共就有4個輸入。那麼constraintlength就應該是[5,4]。

那麼對於函式的第二個引數codegenerator的引數比較複雜。如果有n路輸入,m路輸出話,那麼codegenerator就是乙個n×m的乙個矩陣,矩陣的元素是乙個比較特殊。octal number,8進製的數。在n×m的矩陣中的第(i,j)個元素,其表示第i路的輸入和第j路的連線情況。當第i路的資料和第j路的加法器連線是就將該暫存器的輸出處標為1,如(1,1)連線情況是第

一、第四和第五個相連所以用向量表示為"10011"用八進位制表示為"23"(1,2)="11,101"="35";(1,3)="0000"="0";(2,1)="0000"="0";(2,2)="0,101"="05";(2,3)="1,011"="13",最後得到codegenerator=[23,35,0;0,05,13]。

這裡的到了產生卷積編碼器的編碼器的表示方法,那麼生成相應的trellis就能在系統中使用了。在命令列中鍵入trellis=poly2trellis([5,4],[23,35,0;0,05,13])得到如下輸出。

>>trellis=poly2trellis([5,4],[23,35,0;0,05,13])

trellis =

numinputsymbols: 4 

【兩個輸入2^2=4】

numoutputsymbols: 8 

【三個輸出2^3=8】 

numstates: 128 

【說明:128=2^3*2^4(3是第一級暫存器的個數,4第二級暫存器的個數】

nextstates: [128x4 double] 

【輸入乘以中間狀態】

outputs: [128x4 double]

trellis = poly2trellis(constraintlength,codegenerator);

卷積碼主要是對抗 卷積碼主要是對抗

卷積程式我還是有的 function f,k conv m f1,k1,f2,k2 計算連續訊號卷積積分f t f1 t f2 t f 卷積積分f t 對應的非零樣值向量 k f t 的對應時間向量 f1 f1 t 非零樣值向量 f2 f2 t 的非零樣值向量 k1 f1 t 的對應時間向量 k2 ...

瑞利通道下卷積碼

2fsk調製在瑞利通道下,卷積碼 clear all snr 10 10 n 30000 訊息位元個數 berjj zeros 1,length snr l 7 約束長度 trel poly2trellis l,171 133 tblen 6 l symbolrate 2000 符號速率 nsamp...

卷積碼的編譯碼原理與MATLAB實現

qquad 卷積碼又稱為連環碼,它和分組碼有明顯的區別。n,k 線性分組碼中,本組r n k個監督元僅與本組k個資訊元有關,與其他各組無關,即分組碼編碼器本身是無記憶性的。卷積碼則不同,每乙個 n,k 碼段 也稱為子碼,通常較短 內的n個碼元不僅與該段內資訊元有關,而且與前面的m段資訊元也相關。通常...