剛學習卷積碼的時候,望文生義的理解方式:用卷積的方式實現信道編碼。問題是如何實現?翻閱了很多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中實點位置,糾正錯碼距離提升),從而得到相對准確的接收比特。因此,軟判決的解碼過程誤碼率性能將優於硬判決。
