通信原理学习笔记4:信道编码、分组码、卷积码、现代信道编码(Turbo码、LDPC码、Polar码)
信道編碼 / 前向糾錯碼FEC
思想是在數(shù)據(jù)中增加冗余信息,即校驗碼元 / 監(jiān)督碼元,從而檢錯、糾錯
信道編碼的優(yōu)劣評判
- 首先,最基本的是要追求低差錯率
實現(xiàn)糾錯很簡單,只要多添加冗余信息就好;但實際中,我們還需要考慮編/譯碼復(fù)雜度問題和開銷問題:
- 編/譯碼復(fù)雜度低,可以節(jié)省算力資源、提高處理速度
- 保證糾錯性能的同時,追求盡量小的開銷(冗余比特)
也就是說:好的信道編碼,能夠在一定的編碼率R=k/nR=k/nR=k/n下(將kkk個信息位編碼為總共nnn位),接近信道的容量的極限——香農(nóng)極限
香農(nóng)極限
根據(jù)香農(nóng)第二定理,只要采用合適的信道編碼,無差錯傳輸的信息傳輸速率上限就是信道容量
- 也就是說,實現(xiàn)無差錯傳輸,理論上的最大傳輸速率就是信道容量,我們稱之為香農(nóng)極限 / 香農(nóng)容量
- 理論存在,那么實際中如何讓信息速率逼近香農(nóng)極限呢?需要采用足夠長的隨機編碼
分組碼有規(guī)則的代數(shù)結(jié)構(gòu),顯然不是“隨機”的,譯碼復(fù)雜度也限制了碼長不能太長,因而遠(yuǎn)達(dá)不到香農(nóng)極限;
后續(xù)的Turbo碼、LDPC碼、Polar碼,才逐漸接近香農(nóng)極限
信道編碼舉例
我們的思路是:
- 分組碼:多個信息位成一組,對這一組比特追加校驗位
信息單獨分塊處理,其演進過程是重復(fù)碼->漢明碼->戈萊碼->RM碼->循環(huán)冗余校驗CRC碼
缺點:每一組編碼全部接收后才能譯碼;并且需要精確的幀同步才能正確譯碼 - 卷積碼:對于當(dāng)前輸入的多個信息位,編碼器的輸出還與之前輸入的信息位有關(guān)
卷積碼引入各個信息塊之間的相關(guān)性(隨著約束長度NNN增加,差錯率指數(shù)下降);并且編譯碼可以連續(xù)進行(無需等待整組信息) - 現(xiàn)代信道編碼:Turbo碼、LDPC碼、Polar碼
進一步逼近香農(nóng)極限
LTE控制信道的信道編碼就采用了(3,1,7)(3,1,7)(3,1,7)的卷積碼;
3G、4G中廣泛應(yīng)用Turbo碼(運用交織實現(xiàn)了“偽隨機”,在高噪聲環(huán)境下也性能優(yōu)越)
5G的eMBB場景下,控制信道使用Polar碼,數(shù)據(jù)信道使用LDPC碼(更短時延要求更快的譯碼速度,而Turbo碼的迭代譯碼被淘汰)
1. 分組碼
kkk個信息位分為一組,增加n?kn-kn?k位冗余碼元,總共得到nnn位數(shù)據(jù),稱為(n,k)(n,k)(n,k)分組碼
n?kn-kn?k位冗余碼元稱為監(jiān)督碼元 / 校驗碼元,用于檢錯和糾錯
分組碼的矩陣表述:
生成矩陣
給出信息位的行向量m1×n\boldsymbol m_{1\times n}m1×n?,那么有一個生成矩陣Gk×n\mathbf G_{k\times n}Gk×n?可以生成分組碼的碼字行向量C1×n\mathbf C_{1\times n}C1×n?C1×n=mG=[c1c2...cn]\mathbf C_{1\times n}=\boldsymbol m\mathbf G=\left[\begin{array}{c}\boldsymbol c_1&\boldsymbol c_2&...&\boldsymbol c_n\end{array}\right]C1×n?=mG=[c1??c2??...?cn??]
碼字行向量C\mathbf CC的分量ccol\boldsymbol c_{col}ccol?(第col列)源于m\boldsymbol mm和G\mathbf GG的第col列相乘,也就是說,編碼后每一位碼字都是信息位m\boldsymbol mm的線性組合結(jié)果,如c4=m2+m3\boldsymbol c_4=\boldsymbol m_2+\boldsymbol m_3c4?=m2?+m3?
校驗矩陣
由上式改寫可知,對于合法的碼字C\mathbf CC,若校驗信息長度m=n?km=n-km=n?k,那么各個碼字之間一定滿足mmm個方程的約束
例如,(5,3)(5,3)(5,3)分組碼的合法碼字滿足{c2+c3+c4=0c1+c2+c3+c5=0\left\{\begin{matrix} \boldsymbol c_2+\boldsymbol c_3+\boldsymbol c_4=0 \\ \boldsymbol c_1+\boldsymbol c_2+\boldsymbol c_3+\boldsymbol c_5=0 \end{matrix}\right.{c2?+c3?+c4?=0c1?+c2?+c3?+c5?=0?(注意,以下一切加法為模2加),那么將其視為齊次線性方程組,cn\boldsymbol c_ncn?視為未知數(shù),寫為矩陣形式得到[0111011101][c1c2c3c4c5]=[00]\begin{bmatrix}0 & 1 & 1 & 1 & 0\\1 & 1 & 1 & 0 &1\end{bmatrix} \begin{bmatrix} \boldsymbol c_1 \\ \boldsymbol c_2 \\\boldsymbol c_3\\\boldsymbol c_4\\\boldsymbol c_5\end{bmatrix} =\begin{bmatrix} 0 \\ 0\end{bmatrix}[01?11?11?10?01?]???c1?c2?c3?c4?c5?????=[00?]
- 定義校驗矩陣H(n?k)×n=[0111011101]\mathbf H_{(n-k)\times n}=\begin{bmatrix}0 & 1 & 1 & 1 & 0\\1 & 1 & 1 & 0 &1\end{bmatrix}H(n?k)×n?=[01?11?11?10?01?],可見所有合法碼字CT\mathbf C^TCT(列向量)構(gòu)成了H\mathbf HH的零空間,即HCT=0(n?k)×1=[0?0]\mathbf H\mathbf C^T=\mathbf 0_{(n-k)\times 1}=\begin{bmatrix} 0 \\ \vdots \\ 0\end{bmatrix}HCT=0(n?k)×1?=???0?0????
- 實際上,校驗矩陣H\mathbf HH和生成矩陣G\mathbf GG滿足HGT=0(n?k)×k\mathbf H\mathbf G^T=\mathbf 0_{(n-k)\times k}HGT=0(n?k)×k?(兩者可以互相求出)
對于合法的碼字行向量C1×n′\mathbf C'_{1\times n}C1×n′?后,與校驗矩陣H\mathbf HH做內(nèi)積:若H(C′)T=0\mathbf H (\mathbf C')^T=\mathbf 0H(C′)T=0,說明通過了校驗,沒有出錯
標(biāo)準(zhǔn)/系統(tǒng)校驗矩陣
根據(jù)線性方程組的理論,H\mathbf HH任意進行初等行變換,不改變校驗位的約束關(guān)系(相當(dāng)于消元)
由此,一般形式的G\mathbf GG和H\mathbf HH,對其做初等行變換,可以得到
- 系統(tǒng)生成矩陣GS=[IkQk×(n?k)]k×n\mathbf G_{S}=\begin{bmatrix} \mathbf I_k &\mathbf Q_{k\times (n-k)} \end{bmatrix}_{k\times n}GS?=[Ik??Qk×(n?k)??]k×n?
- 系統(tǒng)校驗矩陣HS=[Q(n?k)×kTI(n?k)](n?k)×n\mathbf H_{S}=\begin{bmatrix} \mathbf Q_{ (n-k)\times k}^T &\mathbf I_{(n-k)} \end{bmatrix}_{(n-k)\times n}HS?=[Q(n?k)×kT??I(n?k)??](n?k)×n?
這樣做的好處是,所有信息位原樣集中分布,所有校驗位集中分布在碼字的末尾
校驗方法和伴隨式
前面說過,合法的碼字行向量C1×n′\mathbf C'_{1\times n}C1×n′?與校驗矩陣H\mathbf HH滿足:H(C′)T=0\mathbf H (\mathbf C')^T=\mathbf 0H(C′)T=0
實際中,接收碼字行向量r1×n\mathbf r_{1\times n}r1×n?=原始碼字c1×n⊕\mathbf c_{1\times n}\oplusc1×n?⊕錯誤圖樣e1×n\mathbf e_{1\times n}e1×n?
那么,對于接收碼字行向量r1×n\mathbf r_{1\times n}r1×n?,校驗方法就是計算r1×nHn×(n?k)T=s1×(n?k)\mathbf r_{1\times n}\mathbf H_{n\times (n-k)}^T=\mathbf s_{1\times (n-k)}r1×n?Hn×(n?k)T?=s1×(n?k)?,稱s1×(n?k)\mathbf s_{1\times (n-k)}s1×(n?k)?為伴隨式
- 如果伴隨式s1×(n?k)=0\mathbf s_{1\times (n-k)}=\mathbf 0s1×(n?k)?=0,可能無差錯 / 錯誤圖樣剛好為某個碼字
- 如果伴隨式s1×(n?k)≠0\mathbf s_{1\times (n-k)}\neq\mathbf 0s1×(n?k)?=0,必有差錯
s1×(n?k)≠0\mathbf s_{1\times (n-k)}\neq\mathbf 0s1×(n?k)?=0時,糾錯方法是:提前計算所有可能導(dǎo)致該結(jié)果的錯誤圖樣e1×n\mathbf e_{1\times n}e1×n?,并選擇其中出錯最少(1的個數(shù)最少)的作為最終的錯誤圖樣e1×n\mathbf e_{1\times n}e1×n?(上面說過,伴隨式數(shù)量<=所有可能的錯誤情況,只能挑選最有可能的錯誤來糾正;若取=號則稱為完備碼)
重復(fù)碼
三重復(fù)碼:0→000,1→1110\rightarrow000, 1\rightarrow1110→000,1→111,檢2位錯,糾1位錯
問題是傳輸效率只有1/3,并且錯2位就會導(dǎo)致譯碼出錯
奇偶校驗碼
僅增加1位校驗碼元,保證分組碼的碼字中1的個數(shù)為偶數(shù)
- 檢測奇數(shù)個錯,不能糾錯
漢明碼
(7,4)(7,4)(7,4)漢明碼,3位監(jiān)督碼元分別對信息碼元中的某幾位進行奇偶校驗,多組奇偶校驗共同形成了類似“方程組”的約束,從而能夠糾錯
- 檢2位錯,糾1位錯
如圖,a2a_2a2?、a1a_1a1?、a0a_0a0?分別對某幾個信息位做奇偶檢驗
{a6⊕a5⊕a4⊕a2=0a6⊕a5⊕a3⊕a1=0a6⊕a4⊕a3⊕a0=0\left\{\begin{matrix} \mathrm{a}_{6} \oplus \mathrm{a}_{5} \oplus \mathrm{a}_{4} \oplus \mathrm{a}_{2}=0 \\ \mathrm{a}_{6} \oplus \mathrm{a}_{5} \oplus \mathrm{a}_{3} \oplus \mathrm{a}_{1}=0 \\ \mathrm{a}_{6} \oplus \mathrm{a}_{4} \oplus \mathrm{a}_{3} \oplus \mathrm{a}_{0}=0 \end{matrix}\right.????a6?⊕a5?⊕a4?⊕a2?=0a6?⊕a5?⊕a3?⊕a1?=0a6?⊕a4?⊕a3?⊕a0?=0?
接收端檢錯方法:分別對三組奇偶校驗碼進行驗證:{s2=a6⊕a5⊕a4⊕a2s1=a6⊕a5⊕a3⊕a1s0=a6⊕a4⊕a3⊕a0\left\{\begin{matrix} s_{2}=a_{6}\oplus a_{5} \oplus a_{4} \oplus a_{2} \\ s_{1}=a_{6}\oplus a_{5} \oplus a_{3} \oplus a_{1} \\ s_{0}=a_{6}\oplus a_{4} \oplus a_{3} \oplus a_{0} \end{matrix}\right.????s2?=a6?⊕a5?⊕a4?⊕a2?s1?=a6?⊕a5?⊕a3?⊕a1?s0?=a6?⊕a4?⊕a3?⊕a0??
若沒有錯誤,則s2s1s0=000s_2s_1s_0=000s2?s1?s0?=000;若a0a_0a0?錯誤,則s2s1s0=001s_2s_1s_0=001s2?s1?s0?=001;若a1a_1a1?錯誤,則s2s1s0=010s_2s_1s_0=010s2?s1?s0?=010…由此類推,僅一位出錯時,7種可能的錯誤剛好對應(yīng)了s2s1s0s_2s_1s_0s2?s1?s0?的7種可能組合,進而可以相應(yīng)糾錯
2. 卷積碼
之前的編碼器:每次輸入k 個信息碼元,輸出n個碼元,編碼器的輸出只與本次輸入的一組信息碼元有關(guān)
卷積碼:編碼器的輸出不僅與本次輸入的一組信息碼元有關(guān),還與之前輸入的KKK組信息碼元有關(guān)
(n,k,N)(n,k,N)(n,k,N)卷積碼,又時也記為(n,k,m)(n,k,m)(n,k,m)卷積碼
對于每次輸入的kkk個信息位,編碼器輸出nnn個碼元
- 本次的輸出涉及到當(dāng)前及之前輸入的總共NNN組信息(稱約束長度/編碼存儲長度為NNN);
隨著約束長度NNN增加,差錯率指數(shù)下降 - 或者說本次輸出與之前的m=(N?1)m=(N-1)m=(N?1)段信息有關(guān);
也就是說,當(dāng)前的編碼器輸出,被總共k?Nk\cdot Nk?N個輸入信息位共同決定,編碼器需要記憶之前的k?(N?1)k\cdot (N-1)k?(N?1)個信息位;
卷積碼的編碼輸出結(jié)果中,共計有n?Nn\cdot Nn?N位碼元是有關(guān)聯(lián)的;
一般k=1k=1k=1,也就是說1個比特就是一組,即:每次對1bit編碼,輸出n bit,結(jié)果與當(dāng)前以及前面的總共N bit有關(guān)
(n,1,N)(n,1,N)(n,1,N)卷積碼,涉及到之前輸入的N?1N-1N?1個信息位,因此需要m=N?1m=N-1m=N?1級移位寄存器實現(xiàn)
關(guān)系:寄存器級數(shù)/記憶長度m=約束長度N?1寄存器級數(shù)/記憶長度m=約束長度N - 1寄存器級數(shù)/記憶長度m=約束長度N?1
例如,一個(2,1,3)(2,1,3)(2,1,3)卷積碼編碼器,需要m=N?1=2m=N-1=2m=N?1=2級移位寄存器,原理如下:
編碼器輸出u1u_1u1?涉及兩個前面的輸入:u1=mi⊕mi?1⊕mi?2u_1=m_i\oplus m_{i-1}\oplus m_{i-2}u1?=mi?⊕mi?1?⊕mi?2?
編碼器輸出u2u_2u2?涉及一個前面的輸入:u1=mi⊕mi?2u_1=m_i\oplus m_{i-2}u1?=mi?⊕mi?2?
由于只有兩級寄存器,寄存器中的數(shù)據(jù)只可能有四個狀態(tài):00、01、10、1100、01、10、1100、01、10、11,故編碼器類似一個“狀態(tài)機”,并且狀態(tài)的轉(zhuǎn)移取決于當(dāng)前的輸入,不能隨意跳轉(zhuǎn),合法的“狀態(tài)轉(zhuǎn)移”表示為網(wǎng)格圖如下:
圖中從上到下的四個黑點代表寄存器四個狀態(tài);
實線代表輸入0,虛線代表輸入1;
實線和虛線旁的兩位數(shù)字代表編碼器的輸出
例如,輸入100100100,編碼器輸出11101111\space 10\space 1111?10?11
卷積碼的Viterbi譯碼原理
認(rèn)為發(fā)出的所有碼字等概出現(xiàn),因此可以采用最大似然譯碼ML,收到碼字YYY,將其譯為碼字XXX,則譯碼結(jié)果XXX應(yīng)該使得P(Y∣X)P(Y|X)P(Y∣X)最大化;
理論上,最大似然譯碼ML應(yīng)該遍歷所有可能的編碼器輸出XXX,復(fù)雜度極高
但是我們在計算各個XXX對應(yīng)的P(Y∣X)P(Y|X)P(Y∣X)時發(fā)現(xiàn),從XXX到YYY漢明距離最小時(即傳輸時錯誤的碼元越少),P(Y∣X)P(Y|X)P(Y∣X)越大
可見,最大似然譯碼ML可以轉(zhuǎn)化為:尋找與接收碼字YYY漢明距離最小(誤碼數(shù)最少)的碼字XXX,這就是維特比譯碼,它大大減小了ML譯碼的計算量
維特比譯碼仍使用網(wǎng)格圖,目標(biāo)是尋找一條最優(yōu)路徑,即與接收碼字序列的漢明距離最小的路徑
如圖,首先寫出接收碼字序列1101011 ̄00111\space 01\space 01\space \underline 10\space 0111?01?01?1?0?01(有一位錯誤),實線和虛線代表譯碼輸出結(jié)果為0 / 1,四個點對應(yīng)卷積碼編碼的2位輸出,實線和虛線旁的數(shù)字是每條支路與接收碼字序列的漢明距離
每步譯碼時,考慮所有可能的支路,并在節(jié)點處記錄各個路徑與接收碼字的漢明距離(各段旁標(biāo)注的漢明距離的累加)
當(dāng)每個節(jié)點處存在2條可能路徑時,舍棄漢明距離更大的那一條
不斷重復(fù),直到最后一步,整個網(wǎng)格圖種只剩下4條可能的路徑
我們選取漢明距離最小的那條路徑,則譯碼結(jié)果為110111101111011
3. 現(xiàn)代信道編碼
Turbo碼
上面說,要使信道編碼逼近香農(nóng)極限(無差錯傳輸,且信息速率接近信道容量),需要采用足夠長的隨機編碼;
一方面要求隨機,傳統(tǒng)信道編碼有規(guī)則的代數(shù)結(jié)構(gòu),不是隨機的;
另一方面要求足夠長,然而傳統(tǒng)信道編碼的碼長不會太長,否則譯碼復(fù)雜度高
傳統(tǒng)編碼始終距離香農(nóng)容量有2~3dB;
直到Turbo碼巧妙運用交織,實現(xiàn)了“偽隨機”,從而接近香農(nóng)極限
Turbo編碼器:并行放置兩個卷積碼編碼器(稱為分量編碼器),由一個偽隨機交織器連接;
最終,完整輸出即“系統(tǒng)比特+第一校驗比特+第二校驗比特”
也就是說,將兩個簡單分量碼通過交織器并行級聯(lián),從而構(gòu)造了具有偽隨機特性的長碼;
Turbo碼增益就來自于這個交織器
Turbo偽隨機譯碼器:串行放置的兩個卷積碼譯碼器(稱為分量譯碼器),每個分量譯碼器的輸出經(jīng)過處理又作為另一譯碼器的輸入,循環(huán)的進行迭代譯碼
在這個過程中分量譯碼器之間傳遞去掉正反饋的外信息(外信息就類似于除去單個譯碼器自身判斷之外,另一譯碼器提供的信息),最終兩個校驗比特流共同貢獻了譯碼的結(jié)果。
整個譯碼過程類似渦輪工作,故稱Turbo碼
也可表示為
LDPC碼
低密度奇偶校驗 LDPC碼本質(zhì)上仍是線性分組碼,并且是具有奇偶校驗等式的線性分組碼。LDPC很早已經(jīng)被提出,但早期缺乏可行的譯碼算法,計算復(fù)雜性高,如今出現(xiàn)高效靈活的并行譯碼架構(gòu)后,譯碼復(fù)雜度降低,才得以應(yīng)用
對于(n,k)(n,k)(n,k)分組碼,其校驗信息長度為m=n?km=n-km=n?k,校驗矩陣H(n?k)×n\mathbf H_{(n-k)\times n}H(n?k)×n?與合法碼字行向量C1×n′\mathbf C'_{1\times n}C1×n′?滿足H(C′)T=0\mathbf H (\mathbf C')^T=\mathbf 0H(C′)T=0
- LDPC碼就是校驗矩陣H\mathbf HH為稀疏矩陣的分組碼,故稱“低密度”-
- 常用因子圖/Tanner圖描述LDPC碼,與校驗矩陣H\mathbf HH一一對應(yīng)
H\mathbf HH的nnn列對應(yīng)因子圖上的nnn個信息節(jié)點/變量節(jié)點;
H\mathbf HH的m=n?km=n-km=n?k行對應(yīng)因子圖上的m=n?km=n-km=n?k個校驗節(jié)點(HrT=sT\mathbf H \mathbf r^T=\mathbf s^THrT=sT,其中s1×(n?k)\mathbf s_{1\times (n-k)}s1×(n?k)?相當(dāng)于伴隨式);
“低密度”是指LDPC的H\mathbf HH矩陣中1元素很少,從而Tanner圖中的連接數(shù)也很少
本來從編碼的角度看,基于校驗矩陣的線性分組碼,在編碼時需要大量迭代(與碼字大小的平方成正比);但LDPC碼的特殊設(shè)計保證了在不犧牲性能的同時降低了編譯碼復(fù)雜度
LDPC碼使用全0或循環(huán)子矩陣(移位識別矩陣)構(gòu)造奇偶校驗矩陣
Polar碼
Polar碼是第一種被嚴(yán)格證明達(dá)到香農(nóng)極限的信道編碼,核心是信道極化理論(不同信道對應(yīng)的極化方法有區(qū)別)
- 信道極化:對于一組獨立的二進制對稱輸入離散無記憶信道,通過信道編碼,可使各個子信道呈現(xiàn)不同的可靠性
信道極化包括信道組合和信道分解兩部分
- 組合信道數(shù)目趨于無窮大時,出現(xiàn)極化,子信道向兩個極端發(fā)展:一部分信道趨于無噪信道(傳輸速率達(dá)到信道容量),另一部分則趨于全噪信道(傳輸速率為0的)
- Polar碼策略就是用無噪信道傳輸用戶信息,全噪信道傳輸約定的信息/不傳信息
- 由于發(fā)送時已知信道分布,并且只將有用信息放在“無噪信道”,譯碼使用改進的串行抵消列表SCL算法,復(fù)雜度低,且接近最大似然ML譯碼性能
Polar碼優(yōu)點:性能增益高(對于特定誤碼率要求,所需的信噪比更低)、可靠性高(沒有誤碼平層)、譯碼復(fù)雜度低
總結(jié)
以上是生活随笔為你收集整理的通信原理学习笔记4:信道编码、分组码、卷积码、现代信道编码(Turbo码、LDPC码、Polar码)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ISO/IEC 27000 信息安全管理
- 下一篇: ISO27001LA国际信息安全管理主任