|
private
void
Hamming1(int
i, out
int o1,out
int o2)
{ // یک بایت دریافت شده و در دو
بایت کد میشود
o1 = o2 = 0;
int[]
Arro = new
int[] {
0, 0, 0, 0, 0, 0, 0, 0 }; // قابل اصلاح
Arro = Dec2Bin(i);
int
d1, d2, d3, d4; // قابل حذف
d1 = Arro[0]; d2 = Arro[1];
d3 = Arro[2]; d4 = Arro[3];
int
p1, p2, p3;
int
s = 0;
s = d1 + d2 + d4; //
XOR محاسبه
p1 = (s % 2);
s = 0;
s = d1 + d3 + d4; //
XOR محاسبه
p2 = (s % 2);
s = 0;
s = d2 + d3 + d4;
p3 = (s % 2);
o1 = p1 + 2 * p2 + 4 * d1 +
8 * p3;
o1 += 16 * d2 + 32 * d3 + 64
* d4;
d1 = Arro[4]; d2 = Arro[5];
d3 = Arro[6]; d4 = Arro[7];
s = 0;
s = d1 + d2 + d4;
p1 = (s % 2);
s = 0;
s = d1 + d3 + d4;
p2 = (s % 2);
s = 0;
s = d2 + d3 + d4;
p3 = (s % 2);
o2 = p1 + 2 * p2 + 4 * d1 +
8 * p3;
o2 += 16 * d2 + 32 * d3 + 64
* d4;
}
private
int
Hamming2(int
i) //بازیابی و تصحیح
{
int[]
Arr1 = new
int[] {
0, 0, 0, 0, 0, 0, 0, 0 };
Arr1 = Dec2Bin(i);
int
d1, d2, d3, d4;
int
p1, p2, p3;
int
s = 0;
p1 = Arr1[0]; p2 = Arr1[1];
d1 = Arr1[2]; p3 = Arr1[3];
d2 = Arr1[4]; d3 = Arr1[5];
d4 = Arr1[6];
int
synd0, synd1, synd2 ,synd;
s = 0;
s = p1 + d1 + d2 + d4;
synd0 = (s % 2);
s = 0;
s = p2 + d1 + d3 + d4;
synd1 = (s % 2);
s = 0;
s = p3 + d2 + d3 + d4;
synd2 = (s % 2);
synd = synd0 + 2*synd1 +
4*synd2;
switch (synd)
{
case 0:
return
d1 + 2 * d2 + 4 * d3 + 8 * d4;
case 1:
return
d1 + 2 * d2 + 4 * d3 + 8 * d4;
case 2:
return
d1 + 2 * d2 + 4 * d3 + 8 * d4;
case 3:
return
(1-d1) + 2 * d2 + 4 * d3 + 8 * d4;
case 4:
return
d1 + 2 * d2 + 4 * d3 + 8 * d4;
case 5:
return
d1 + 2 * (1-d2) + 4 * d3 + 8 * d4;
case 6:
return
d1 + 2 * d2 + 4 * (1-d3) + 8 * d4;
case 7:
return
d1 + 2 * d2 + 4 * d3 + 8 * (1-d4);
default:
return
0;
}
|