#include
#include
#define NUMBER_OF_SEQUENCES 8
#define IS_ORTHOGONAL 0
#define IS_NOT_ORTHOGONAL -1
typedef struct {
int chip[NUMBER_OF_SEQUENCES];
} ChipSeq;
int Add(ChipSeq *X, ChipSeq* Y, ChipSeq *R)
{
int i;
for (i=0; i
return 0;
}
int DotProduct(ChipSeq *X, ChipSeq *Y, ChipSeq *Res)
{
ChipSeq temp;
int i;
if (!X || !Y)
return -1;
for(i=0; i
return 0;
}
void InitChip(ChipSeq *A, int initVal)
{
int i;
for(i=0; i
}
int CheckOrthogonality(ChipSeq *X, ChipSeq *Y)
{
int i;
int sum = 0;
for (i=0; i
if (sum/NUMBER_OF_SEQUENCES == 0)
return IS_ORTHOGONAL; // it is orthogonal
else
return IS_NOT_ORTHOGONAL;
}
int RecoverBit(ChipSeq *S, ChipSeq *SenderSeq)
{
int i;
int sum=0;
for(i=0; i
return sum/NUMBER_OF_SEQUENCES;
}
int Negative(ChipSeq *A, ChipSeq *Comp)
{
int i;
for(i=0; i
}
void PrintChipSeq(ChipSeq *X)
{
int i;
printf("[ ");
for (i=0; i
printf("]");
}
void CopySeq(ChipSeq* src, ChipSeq* dest)
{
memcpy(&dest, &src, sizeof(ChipSeq));
}
void ConvertToBipolar(ChipSeq *A, ChipSeq *Bip)
{
int i;
for(i=0; i
Bip->chip[i] = 1;
if (A->chip[i] == 0)
Bip->chip[i] = -1;
}
}
int main(int argc, char *argv[])
{
ChipSeq A = { {0, 0, 0, 1, 1, 0, 1, 1}};
ChipSeq B = { {0, 0, 1, 0, 1, 1, 1, 0}};
ChipSeq C = { {0, 1, 0, 1, 1, 1, 0, 0}};
ChipSeq D = { {0, 1, 0, 0, 0, 0, 1, 0}};
ChipSeq temp, ba, bb, bc, bd, ca, cb, cc, cd, sum;
printf("A = ");
PrintChipSeq(&A);
printf("\n");
ConvertToBipolar(&A, &ba);
printf("Bipolar(A) = ");
PrintChipSeq(&ba);
printf("\n");
printf("B = ");
PrintChipSeq(&B);
printf("\n");
ConvertToBipolar(&B, &bb);
printf("C = ");
PrintChipSeq(&C);
printf("\n");
ConvertToBipolar(&C, &bc);
printf("D = ");
PrintChipSeq(&D);
printf("\n");
ConvertToBipolar(&C, &bd);
// A + B + C sends 0 bits
Negative(&ba, &ca);
printf("!A = "); PrintChipSeq(&ca); printf("\n");
Negative(&bb, &cb);
printf("!B = "); PrintChipSeq(&cb); printf("\n");
Negative(&bc, &cc);
printf("!C = "); PrintChipSeq(&cc); printf("\n");
// now add
Add(&ca, &cb, &temp);
Add(&temp, &cc, ∑);
printf("S = !A + !B + !C = ");
PrintChipSeq(∑);
printf("\n");
printf("Recover bit from A: S*A\n");
printf("Bit sent from A was: %d\n", RecoverBit(∑, &A));
printf("\n");
printf("Recover bit from B: S*B\n");
printf("Bit sent from B was: %d\n", RecoverBit(∑, &B));
printf("\n");
printf("Recover bit from C: S*C\n");
printf("Bit sent from C was: %d\n", RecoverBit(∑, &C));
printf("\n");
}
Sunday, October 15, 2006
CDMA
I developed this simulation just for fun and only in a few minutes:
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment