天天看點

卷積碼

剛學習卷積碼的時候,望文生義的了解方式:用卷積的方式實作信道編碼。問題是如何實作?翻閱了很多papers之後,介紹卷積碼的編碼實作過程使用的是零散的子產品(移位寄存器、mod2加法器、生成多項式)的功能和特點,通過mod2和實作編碼的輸出,這個過程類似卷積(生成多項式和輸入比特的卷積)。但是,這種思考方式,僅僅将子產品連接配接,并未深入研究,子產品的本質内容是什麼?在老師不斷的“頭腦風暴”下,慢慢發現,移位寄存器存儲的是一個個狀态組合,而這個狀态組合的個數與限制度(constraint length)有關;mod2加法器使編碼輸出比特不僅僅與目前輸入資訊有關還有之前的若幹blocks裡的編碼資訊有關;而生成多項式決定的則是block的選擇(選擇不同,編碼輸出不同,編碼效果展現在接收端誤碼率)。這樣,輸入編碼是狀态變化的原因,編碼輸出是狀态變化的結果。整個系統就圍繞着“狀态”進行不斷的編碼,而“狀态”不斷變化、循環直到編碼完成。

這樣,編碼過程就可以應用一個經典的“狀态機模型”,而狀态機模型的不同表達方式也使得整個編碼過程在時間和空間兩個次元展現出來。例如,狀态圖,即是一個很好的表示狀态變化的圖形。但是由于循環反複的利用狀态資訊,但在時間上,并未很好的展現卷積碼的編碼過程。相比,樹形圖,在時間上進行延展,很直覺的表現出狀态變化的過程,但是狀态資訊未重複利用,使得存儲空間大小得到限制(指數增加)。最後,網格圖很好的展現了時間和空間兩個次元資訊,很适合分析卷積碼的編碼過程。而用Matlab實作卷積碼編碼的時候,我按照傳統卷積碼編碼方法(隻考慮實作,未考慮算法的優化),中規中矩的編碼思路,但在速度上,并未得到很好的保證。而老師給的程式設計思想則是:給出每個以為寄存器中随時間變化存儲的二進制資訊。例如,4個移位寄存器,則每個移位寄存器存儲的資訊分别為:[abcdefg000;0abcdefg00;00abcdefg0;000abcdefg],是以矩陣的縱列資訊即為所有寄存器中瞬時狀态資訊,而生成多項式中數值為‘1’的移位寄存器存儲比特資訊将參與mod2運算。這樣利用矩陣的乘法直接完成查找移位寄存器中對應生成多項式數值為‘1’位置的資訊。相比我的編碼思路(循環查找寄存器裡對應生成多項式數值為‘1’的資訊),運算速度大大提升。同時,在對狀态機模型的認識也進一步深入,即,編碼過程為移位寄存器中狀态不斷變化的過程。(編碼用‘狀态’描述,并且将‘狀态’融入到算法實作中)

卷積碼

在完成解碼的過程中,找了許多關于Viterbi算法的papers,但在編碼過程對狀态機模型的認識過程中,意識到,解碼過程對狀态機模型的依賴。實際上,Viterbi算法就是一個在狀态機模型基礎上不斷減少可能路徑的一個過程。因為解碼是編碼的一個逆序過程,接受比特和初始狀态是我們已知的資訊,我們無法找到一個逆序的算法來計算輸入比特資訊。是以Viterbi算法利用的就是‘重新編碼’的思想,計算每條路徑可能的機率值大小,用機率最大的路徑來模拟編碼過程。進而得到輸入比特資訊。而狀态機模型的應用大大提升了解碼過程尋找正确路徑的速度。而在用matlab算法實作的過程中,老師用initial state和next state作為矩陣的行列号,查找輸入比特的速度比我實作時不斷循環查找狀态表提升很多,也使最後所畫的誤碼率對比圖達到理想的接受比特個數(提高了系統的運算能力)。還記得答辯時候老師問我的那個問題:如果接受比特中錯誤比特的數量一定(假設都是10個),那麼錯誤比特均勻分布和集中分布兩種方式哪個誤碼率性能比較好?聽到問題的時候,腦袋想過的編碼過程,錯誤比特的分布情況,是以回答的一塌糊塗。後來才在老師的解釋下,明白了題目的意思。老師想問的是,錯誤比特(信道噪聲影響)的排列分布對解碼時誤碼率性能的影響。卷積碼編碼的時候就假設,每個block是相對獨立的,而瞬時編碼的時候,輸出比特不僅僅與目前的輸入比特資訊有關,還與之前的若幹blocks裡的資訊有關(聯合機率)。是以在解碼的時候,每組接收比特的資訊也與之前的若幹比特資訊是相關聯的。是以,如果誤碼比較集中,在Viterbi時,權值的計算時就會相對增權重值的比重(大的越大,小的越小),容易将該條路徑淘汰。而誤碼分散排列時,一些權值有可能比較接近,無法淘汰。是以誤碼集中分布的情況,系統的誤碼率性能較好。老師的問題,一定程度上又深化了我對整個系統認識的深度。不僅僅在編碼上,而且在解碼端了解卷積碼的意義:用相鄰資訊編碼、解碼,使得資訊能在信道中準确傳輸。

而抛開狀态機模型的應用,Viterbi算法的關鍵在于路徑選擇的權值(metric)問題.權值的計算的優化能大大提升系統誤碼率的大小。這樣,就到了最後一個問題,硬判決和軟判決對系統誤碼率的提升能力分析。從星座圖的角度看,誤碼率性能展現在是否能夠找到正确的接收比特組合資訊,即糾正錯碼的距離(糾正錯碼的能力)。硬判決在解調時直接将接受比特映射到‘0’,‘1’的星座圖空間上,那麼使用漢明距離(100%的機率決定接收比特資訊)就可以将接收比特投射到相應的星座圖位置,這樣,如果産生錯碼,硬判決解碼的糾正錯碼的距離将很大(正方形的邊長或對角線)。而軟判決解調時則在‘0’和‘1’直接設定多個門限,使得接收比特可以投射到範圍内的某個區域裡,而通過區域比特的組合資訊,使用歐幾何距離(用一定機率值分析接收比特資訊)計算最準确的接收比特,這樣,如果産生錯碼,軟判決糾正錯碼的距離将變小(圖b中實點位置,糾正錯碼距離提升),進而得到相對準确的接收比特。是以,軟判決的解碼過程誤碼率性能将優于硬判決。

卷積碼
卷積碼

如果這篇文章幫助到了你,你可以請作者喝一杯咖啡