viterbi譯碼算法是一種卷積碼的解碼算法。優點不說了。缺點就是隨著約束長度的增加算法的復雜度增加很快。約束長度N為7時要比較的路徑就有64條,為8時路徑變為128條。 (2<<(N-1))。所以viterbi譯碼一般應用在約束長度小于10的場合中。
先說編碼(舉例約束長度為7):編碼器7個延遲器的狀態(0,1)組成了整個編碼器的64個狀態。每個狀態在編碼器輸入0或1時,會跳轉到另一個之中。比如110100輸入1時,變成101001(其實就是移位寄存器)。并且輸出也是隨之而改變的。
這樣解碼的過程就是逆過程。算法規定t時刻收到的數據都要進行64次比較,就是64個狀態每條路有兩條分支(因為輸入0或1),同時,跳傳到不同的兩個狀態中去,將兩條相應的輸出和實際接收到的輸出比較,量度值大的拋棄(也就是比較結果相差大的),留下來的就叫做幸存路徑,將幸存路徑加上上一時刻幸存路徑的量度然后保存,這樣64條幸存路徑就增加了一步。在譯碼結束的時候,從64條幸存路徑中選出一條量度最小的,反推出這條幸存路徑(叫做回溯),得出相應的譯碼輸出。
標簽:
viterbi
Verilog
FPGA
代碼
上傳時間:
2016-08-08
上傳用戶:June