資源簡介
BCH碼 編碼譯碼 能編譯!!!!
能運行
代碼片段和文件信息
/************************************************************************/
/*
日期:2014-05-17?17:17:58
程序功能:BCH編碼和譯碼的算法實現
Author:鄭巒、李軍
開發環境:Microsoft?Visual++?6.0,windows?XP
????????????????????????????????????????????????????????????????????????*/
/************************************************************************/
#include?
#include?
#include?
#include?
//定義全局變量
int?????????????m?n?length?k?t?d;
int?????????????p[21];
int?????????????alpha_to[1048576]?index_of[1048576]?g[548576];
int?????????????recd[1048576]?data[1048576]?bb[548576];
int?????????????numerr?errpos[1024]?decerror?=?0;
/*
?*?read_p()的功能:
?*1:?????輸入多項式p(x)的階層m用于計算伽羅瓦域GF(2**m).用于得到預先計算的p(x)的系數
?*2:?????輸入碼長
?*/
void?read_p()
{
int i?ninf;
printf(“\n確定多項式p(x)階層m的值,?其BCH碼的長度區間為:\n“);
printf(“????2**(m-1)-1?????do?{
???printf(“輸入m??(m在2和20之間取值):?“);
???scanf(“%d“?&m);
????}?while?(?!(m>1)?||?!(m<21)?);
?//計算出輸入多項式p(x)
for?(i=1;?i p[i]?=?0;
p[0]?=?p[m]?=?1;
if?(m?==?2) p[1]?=?1;
else?if?(m?==?3) p[1]?=?1;
else?if?(m?==?4) p[1]?=?1;
else?if?(m?==?5) p[2]?=?1;
else?if?(m?==?6) p[1]?=?1;
else?if?(m?==?7) p[1]?=?1;
else?if?(m?==?8) p[4]?=?p[5]?=?p[6]?=?1;
else?if?(m?==?9) p[4]?=?1;
else?if?(m?==?10) p[3]?=?1;
else?if?(m?==?11) p[2]?=?1;
else?if?(m?==?12) p[3]?=?p[4]?=?p[7]?=?1;
else?if?(m?==?13) p[1]?=?p[3]?=?p[4]?=?1;
else?if?(m?==?14) p[1]?=?p[11]?=?p[12]?=?1;
else?if?(m?==?15) p[1]?=?1;
else?if?(m?==?16) p[2]?=?p[3]?=?p[5]?=?1;
else?if?(m?==?17) p[3]?=?1;
else?if?(m?==?18) p[7]?=?1;
else?if?(m?==?19) p[1]?=?p[5]?=?p[6]?=?1;
else?if?(m?==?20) p[3]?=?1;
printf(“p(x)?=?“);
????n?=?1;
for?(i?=?0;?i?<=?m;?i++)?{
????????n?*=?2;
printf(“%1d“?p[i]);???????//輸出多項式p(x)
????????}
printf(“\n“);
n?=?n?/?2?-?1;
ninf?=?(n?+?1)?/?2?-?1;
do??{
printf(“輸入BCH碼的碼長?(%d? scanf(“%d“?&length);
}?while?(?!((length?<=?n)&&(length>ninf))?);
}
/*
?*?generate_gf()功能:
?*?生成域GF(2?*?*m)的不可約多項式p(X)系數p[0].?.?p[m].??
?*?查找表:
?*???從指數到多項式形式;?j=alpha^i;
?*???從多項式到指數形式:alpha^i]?=?i;
?*?α=2?是?GF(2**m)的原始數據
?*/
void?generate_gf()
{
register?int??i?mask;?????//定義mask(掩碼)
mask?=?1;
alpha_to[m]?=?0;
for?(i?=?0;?i? alpha_to[i]?=?mask;
index_of[alpha_to[i]]?=?i;
if?(p[i]?!=?0)
alpha_to[m]?^=?mask;
mask?<<=?1;
}
index_of[alpha_to[m]]?=?m;
mask?>>=?1;
for?(i?=?m?+?1;?i? if?(alpha_to[i?-?1]?>=?mask)
??alpha_to[i]?=?alpha_to[m]?^?((alpha_to[i?-?1]?^?mask)?<1);
else
??alpha_to[i]?=?alpha_to[i?-?1]?<1;
index_of[alpha_to[i]]?=?i;
}
index_of[0]?=?-1;
}
/*
?*?計算二進制BCH碼的生成多項式.?
?*?首先生成周期數組和階層?2**m?-?1?cycle[][]?=??(i?2*i?4*i?...?2^l*i).?
?*?然后確定哪些周期集合包含的?(d-1)
?*?連續整數?{1..(d-1)}.?本原產生式產生了。
?*?為線性形
評論
共有 條評論