[go: up one dir, main page]

100% found this document useful (1 vote)
378 views10 pages

Hadamard Code

The document discusses error correction using Hadamard codes. It explains that Hadamard codes are based on Hadamard matrices and can correct up to t=2n-2-1 errors. The decoding algorithm first transforms the received codeword to +1/-1 form, computes the syndrome, and identifies the codeword row based on the largest syndrome value. An example decoding of the received word "10111010" is shown, correctly identifying the original codeword.
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
378 views10 pages

Hadamard Code

The document discusses error correction using Hadamard codes. It explains that Hadamard codes are based on Hadamard matrices and can correct up to t=2n-2-1 errors. The decoding algorithm first transforms the received codeword to +1/-1 form, computes the syndrome, and identifies the codeword row based on the largest syndrome value. An example decoding of the received word "10111010" is shown, correctly identifying the original codeword.
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
You are on page 1/ 10

ASSIGNMENT ON

HADAMARD CODE

FOR

SPREAD SPECTRUM TECHNIQUE AND MULTIPLE

ACCESS

SUBMITTED BY:

BIKASH RANJAN RAM (MEEC/1039/2010)

TEJASWETA KUMARI (MEEC/1037/2010)

BIRLA INSTITUTE OF TECHNOLOGY,MESRA


INTRODUCTION:

The Hadamard code, named after Jacques Hadamard, is a system used for signal error detection
and correction . It is one of the family of codes. Especially for large n it has a poor rate but it is
capable of correcting many errors. Hadamard codes can be considered as a special case of Reed–
Muller codes. In particular, first order Reed–Muller code are equivalent to Hadamard codes.

Construction

The code is based on Hadamard matrices. If H is a Hadamard matrix of order 2n the codewords
are constructed by taking the rows of H and −H as codewords, where each −1 is replaced by 0. In
this way 2n + 1 code words are constructed that each have a length of 2n. Since the rows of a
Hadamard matrix are orthogonal the minimum distance is 2n - 1. In this way a code is
constructed.

The code can also be constructed by creating the parity-check matrix which consists of all 2n − 1
vectors containing an odd number of 1s, or by using a recursive encoding process.

Decoding

The code has minimum distance 2n − 1 and hence can correct at most t = 2n − 2 − 1 errors. The
algorithm below achieves this.

When a code word is received it is first transformed to a 1/−1 vector v by changing all 0s to −1.
Compute (v HT). The entry with the maximum absolute value corresponds to the row taken as a
code word. If it is positive the code word came from H, if it is negative the code word came from
−H.

Proof: If there were no errors the product (v HT) would consist of only zero's and one entry of +/
−2n. If there are errors in v then, in absolute value, some of the zeros become larger and the
maximum becomes smaller. Each error that occurs can change a zero with 2. So the zeros can
become at most 0 + 2t = 2n − 1 − 2. The maximum can decrease at most to 2n − 2t =
2n − 2n − 1 + 2 = 2n − 1 + 2. So the maximum that points to the correct row will always be
larger in absolute value than the other values in the row.
Hadamard Codes:
Take the 4m by 4m Sylvester-Hadamard matrix H4m and -H4m and change all the -1
entries to 0's.Here is how to obtain them:

where J4m is the 4m by 4m matrix whose entries are all ones . This gives us binary words

of length 4m.The binary codes formed by using 8m rows of H^4m and H^’4m

are called Hadamard codes .Here is a Hadamard code of order 16 using H8 = H2 *H2 * H2:

A generator may be the matrix:

Now by the properties of Hadamard matrices ,a Hadamard code is a [4m,2m,2m] linear Code
and it will correct any error pattern of weight (m-1).

Note that in order to change b H^4m into H4m or H^’4m into -H4m we proceeded as follows:
Hadamard Decoding Algorithm:
By using the fact that

and Theorem1,we use a simple scheme to decode any received word W^.

• Step1. A received signal W^ ,i.e. a sequence of 4m zeros and ones ,is first changed into
its +_1 form w (by changing each 0 to -1)as follows: w =2W^-h1:

• Step2. Compute s = wH4m.

• Step3. If the received word b w is a codeword, then there are no errors and the syndrome
s = w*H4m will be either §4mek.

• Step4. In the presence of errors, s will not be +_4mek, but if the number of error is at
Most7 then according to Theorem1, the absolute value of the largest component may not
decrease below 2m+4 and the absolute value of other components May decrease up to
2m-2. Thus the position of entry in s = w * H^t4m with the largest absolute value will
tell us which row of H4m or -H4m (if it is negative)was Transmitted .

• Step5. Too many errors, Impossible to decode W^.

Remark. While this is the actual algorithm used to decode the Mariner9 signals, it is a bit slow
from the computational point of view (requiring 322 multiplications and the corresponding
additions for each codeword), so a number of computational tricks are employed to reduce the
actual computation to less than 1/3 of what the algorithm calls for.
Examples.

Consider the Hadamard code C4m = C8,then

Corrects any single error pattern.

a. Suppose W^ =11000011 is the received word, then

Step1. w =2 W^-h1 =(1; 1;-1;-1; -1;-1; 1; 1).

Step2. s = wH8 =(0; 0; 0; 0; 0; 0; 8; 0).

Step3. The seventh component of s =8e7 is the largest component, which implies that there is no
error. Thus

v = h7 =(1; 1;-1;-1; -1;-1; 1; 1) and b v ´ 2h1 - v mod 3=11000011:

b. Suppose b w =10111010 is the received word, then

Step1. w =2W^ - h1 =(1;-1; 1; 1; 1;-1; 1;-1).

Step2. s = wH8 =(2; 6;-2; 2; 2;-2;-2; 2).

Step4. The second component of 6 ¸ 4m - 2=6 is the largest component, thus

v = h2 =(1;-1; 1;-1; 1;-1; 1;-1) and b v ´= 2h1 -v mod 3=10101010:

c. Suppose b w =00011010 is the received word, then

Step1. w =2 W^ - h1 =(-1;-1;-1; 1; 1; 1; 1; 1).


Step2. s = wH8 =(2; 2;-2;-2;-6; 2;-2;-2).

Step4. The ¯fth component of s is -6 is the largest component in absolute value and

j- 6j =6 ¸ 8 -2=6, thus

v = -h5 = (-1;¡1;-1;-1; 1; 1; 1; 1) and b v ´ 2h1 - v mod 3=00001111:

d. Suppose b w =11111100 is the received word, then

Step1. w =2 b w ¡ h1 =(1; 1; 1; 1; 1; 1;-1;-1).

Step2. s = wH8 =(4; 0; 0; 4; 4; 0; 0;-4).

Step5. Since 4 < 4m - 2=6, there are too many errors in order for us to decode.
Error correction using c:-
#include<stdio.h>
#include<conio.h>
#include<math.h>
void main()
{
int W[8],i,j,h[8][8],h1[8],z[8],s[8],o[8],k,d,b,m,y;
printf("enter hadamard matrix for 8m");
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
scanf("%d",&h[i][j]);
}
}
printf("hadamard code is\n");
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
printf("%d",h[i][j]);
}
printf("\n");
}
printf("\nfrom given hadamard matrix we get h1\n");
i=0;
for(j=0;j<8;j++)
{
h1[j]=h[i][j];
}
for(i=0;i<8;i++)
{
printf("%d",h1[i]);
}
printf ("\nenter the received bits"); //receiving
for(i=0;i<8;i++)
{
scanf("%d",&W[i]);
}
for(i=0;i<8;i++)
{
printf("%d",W[i]);
}
printf("\nwe get z= 2*W-h1\n");
for(i=0;i<8;i++)
{
z[i]=2*W[i]-h1[i];
}
for(i=0;i<8;i++)
{
printf(" %d",z[i]);
}
printf ("\nsyndrome\n");
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
s[i]=0;
for(k=0;k<8;k++)
{
s[i]=s[i]+(W[i]*h[k][j]);
}
}
}

for (i=0;i<8;i++)
{
printf(" %d",s[i]);
}
printf("\n"); //checking
d=0;
for(i=0;i<8;i++)
{
if(d<s[i]*s[i])
{
d=s[i]*s[i];
y=i;
}
else
{
m=sqrt(d);
goto out;
}
}

out:
printf("largest component position =%d",i);
printf(" largest component= %d",m); //checked
printf("\n%d",y);
if(m>=8-2)
{
printf("\nerror can be correct");
printf("\noriginal word will be%d row of hadamard matrix",y);
i=y;
for(j=0;j<8;j++)
{
o[j]=h[i][j];
}
goto output;
}
else
printf("impossible");
output:
for(i=0;i<8;i++)
printf("%d",o[i]);

}
Output:

enter hadamard matrix for 8m


hadamard code is
11111111
1 -1 1 -1 1 -1 1 -1
1 1 -1 -1 1 1 -1 -1
1 -1 -1 1 1 -1 -1 1
1 1 1 1 – 1 -1 -1 -1
1 1 1 1 -1 -1 -1 -1
1 -1 1 -1 -1 1 -1 1
1 1 -1 -1 -1 -1 1 1
1 -1 -1 1 -1 1 1 -1
from given hadamard matrix we get h1
11111111
enter the received bits
10111010
we get z= 2*W-h1
1 1 -1 1 -1 1 -1 -1
Syndrome
2 6 -2 2 2 -2 -2 2
Largest component 6
Largest position 2
error can be correct
noriginal word will be 2 row of hadamard matrix
1 -1 1 -1 1 -1 1 -1
10101010

You might also like