1 线性分组码类重纠错码应广泛(nk)分组码中 冗余位线性关系模2相加称线性分组码
现(74)分组码例说明线性分组码特点
参数:
码长:
信息位:
校验位:
距离:
生成矩阵G(前四位信息位三位冗余位):
系统码分消息部分冗余部分两部分根生成矩阵输出码字 式计算:
信息位 冗余位
关系(74)汉明码全部码字示
表2 (74)汉明码全部码字
序号
信息码元
冗余元
序号
信息码元
冗余元
0
0000
000
8
1000
111
1
0001
011
9
1001
100
2
0010
101
10
1010
010
3
0011
110
11
1011
001
4
0100
110
12
1100
001
5
0101
101
13
1101
010
6
0110
011
14
1110
100
7
0111
000
15
1111
111
2 C++编写(74)汉明码思路:
16信息序列产生:调stidlib包中rand()产生二进制伪机序 列产生16信息序列分两步产生:
第步:先产生伪机序列保留赋第信息序列V[0]
i0
for(j0j<4j++)
v[i][j]rand()2
第二步:样产生序列产生前产生信息序列相较 果产生信息序列前面序列保留信 息序列进行产生信息序列果产生信息序列前面序列相 次产生序列效需新产生信息序列程中需定义 较函数进行较代码:
for(i1i<16i++){
Lablefor(j0j<4j++)
v[i][j]rand()2
for(k0k
continue 果产生信息序列前面序列保留信 息序列进行产生信息序列
else
goto lable 果产生信息序列前面序列相次产生 序列效跳转标签lable处新产生信息序列
}
}
进行判断函数:
bool vedict(int a[]int b[]){
int m
for(m0m<4m++){
switch(m){
case 0if(a[m]b[m])
return true
else continue
break
case 1if(a[m]b[m])
return true
else
continue
break
case 2if(a[m]b[m])
return true
else continue
break
case 3if(a[m]b[m])
return true
else
return false
}
}
}
74汉明码生成:
利线性关系式 :
信息位 冗余位
两for循环分两部分求解前四位信息位方程三位 冗余位方程(通异运算求)代码:
for(i0i<16i++){
for(j0j<7j++)
{
if(j<4)
u[i][j] v[i][j]
if(j4)
u[i][j](v[i][0]^v[i][2])^v[i][3]
if(j5)
u[i][j](v[i][0]^v[i][1])^v[i][2]
if(j6)
u[i][j](v[i][1]^v[i][2])^v[i][3]
cout << u[i][j] <<
}
cout << endl
}
3 总代码:
#include
#include
void main(){
int g[4][7]{{1000110}{0100011}{0010111}{0001101}}声明生成矩阵
int v[16][4]声明信息序列
int u[16][7]
int ijk
cout << 生成矩阵: << endl输出生成矩阵
for(i0i<4i++)
{
for(j0j<7j++)
cout << g[i][j] <<
cout << endl
}
bool vedict(int a[]int b[])声明判断函数
cout << 消息序列<< endl机产生信息位序列
i0
for(j0j<4j++)
v[i][j]rand()2
for(i1i<16i++){
lablefor(j0j<4j++)
v[i][j]rand()2
for(k0k
continue 果产生信息序列前面序列保留信 息序列进行产生信息序列
else
goto lable 果产生信息序列前面序列相次产生 序列效跳转标签lable处新产生信息序列
}
}
for(i0i<16i++){ 输出信息序列
for(j0j<4j++)
cout << v[i][j] <<
cout << endl
}
cout << 74汉明码: <
for(i0i<16i++){
for(j0j<7j++)
{
if(j<4)
u[i][j] v[i][j]
if(j4)
u[i][j](v[i][0]^v[i][2])^v[i][3]
if(j5)
u[i][j](v[i][0]^v[i][1])^v[i][2]
if(j6)
u[i][j](v[i][1]^v[i][2])^v[i][3]
cout << u[i][j] <<
}
cout << endl
}
}
bool vedict(int a[]int b[]){
int m
for(m0m<4m++){
switch(m){
case 0if(a[m]b[m])
return true
else continue
break
case 1if(a[m]b[m])
return true
else
continue
break
case 2if(a[m]b[m])
return true
else continue
break
case 3if(a[m]b[m])
return true
else
return false
}
}
}
编译运行结果:
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档