維特比解碼演算法

2021-05-01 04:44:32 字數 2040 閱讀 3662

//實現(4,1,6)卷積碼的維特比解碼源程式,採用了最大似然演算法

//介紹了軟判決維特比解碼演算法過程的三個步驟:初始化,度量更新和回溯解碼

#include

#define data_length  4000000

#define traceback_length  48   //解碼回溯深度,一般為m的5-10倍,m為暫存器個數

#define tb_data_out  16        //回溯輸出解碼長度,即每次回溯輸出16bits解碼資訊

unsigned long trans_table[2*traceback_length]=;//乙個單元32位,每兩個儲存單元儲存乙個時刻的64狀態倖存資訊

unsigned long tran;  //儲存每個時刻的分支選擇路徑資訊值,32位

int bef[64]=;    //前64狀態

int aft[64]=;    //後64狀態

void bfly_a(int dp, int dm, int *p1, int *p2, int *p3, int select);  //用於計算路徑度量

void tran_exchange();      //用於調整tran中第2,3位的次序

void trace_back(int *pout); //回溯

int max_state(int *pbef);   //用於找到具有最大值所對應的狀態點

int min(int *pbef);         //求出64個狀態的最小值

void viterbi()

;  //keep input data

int output[tb_data_out]=;  //keep output data

int *pb,*pa1,*pa2;  //pb指向前狀態,pa1,pa2指向後狀態

int *p4;            //儲存路徑資訊

file *fp;

file *fq;

if((fp=fopen("quantizer_bpsk0db.bin","r"))==null)

if((fq=fopen("viterbi_data_out.bin","wb"))==null)  //file that keep output data

bef[0]=1000;  //從0狀態開始,任意賦乙個初值

for(n=0;n=3)

p4=trans_table+2*(traceback_length-tb_data_out);

for(j=0;j=2)

//trans_table資訊移位

for(i=0;i<2*(traceback_length-tb_data_out);i++)

}//清零輸出

for(j=0;ja)  //c路徑標記為1,a路徑標記為0

tran=tran<<1;

if(d>b)   //d路徑標記為1,b路徑標記為0

}void trace_back(int *pout)

; //回溯資料,其最高16位為回溯解碼輸出

p4=trans_table+2*traceback_length; //移到陣列最後

pt=tb_data+traceback_length;    //移到陣列最後,從後往前填充輸出資料

state=max_state(bef);    //找到此時刻包含最大值的狀態

for(i=0;i=0&&state<32)

else if(state>=32&&state<64)

}//end of i

//輸出最高位16bits解碼資訊

pt=tb_data;

for(i=0;iy)

tran=tran-2;  //tran的第2,3位互換

else

tran=tran+2;  //tran的第2,3位互換}}

int max_state(int *pbef)  //包含最大值的狀態

}return max_state;

}int min(int *pbef)

return mini;

}void main()

維特比演算法

維特比演算法在機器學習中非常重要,在求解隱馬爾科夫和條件隨機場的 問題中均用到了維特比演算法。實際上,維特比演算法不僅是很多自然語言處理的解碼演算法,也是現代數字通訊中使用最頻繁的演算法。以乙個簡單的隱馬爾科夫模型為例,n 為觀測符號,y y1,y2,y n 為隱狀態序列,要求的 問題為 y 1,y...

維特比演算法

維特比演算法主要用來解決籬笆網路,老實講我第一次聽到這個名字是發懵的,網路我是知道的,說白了就是圖 迪傑特斯拉演算法 但是,籬笆網路是值下面這種一列一列的圖,只會前面連線到後面,而且不會跳層連線,可以說是一種非常特殊且友好的圖了 正常的圖能逼死強迫症 x max xx x x x xma x x 這...

維特比演算法 python 維特比演算法實現分詞

維特比演算法原理可以參考以下文章,講解的非常詳細,那麼接下來將講解維特比演算法如何應用到分詞演算法中,並如何用python 實現。如何通俗地講解 viterbi 演算法?www.zhihu.com 一 過程分析 句子 經常有意見分歧 詞典 經常 經 有 有意見 意見 分歧 見 意 見分歧 分 概率 ...