목차
1. DS-CDMA란?
2.flow chart
3. Source Code
4. Result (bit X는 Silent를 의미함)
2.flow chart
3. Source Code
4. Result (bit X는 Silent를 의미함)
본문내용
Code
#include
int main(void)
{
int i, j, n=0,k=0;
char a[80]={NULL};
int b[80],c[16]={0},d[16]={0},e[16]={0};
int w[16][16] ={{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},
{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},
{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},
{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}};
//최대 16*16 Walsh Table 생성
printf("Multiplexer Input : ");
scanf("%s",&a);//데이타 입력
for(i=0;i<=16;i++)
{
if((a[i]=='1') || (a[i]=='0') || (a[i]=='X'))
//입력된 데이타의 갯수를 파악함.
n++;
}
if(n <= 2)//입력된 데이타의 갯수에 따라 Walsh Table의 크기 결정
k=2;
else if (n <= 4)
k=4;
else if (n <= 8)
k=8;
else if (n <= 16)
k=16;
else
printf("Disavailable Input\n");
printf("Walsh Table :\n");//생성된 Walsh Table을 화면에 출력
for(i = 0 ; i < k ; i++) {
for(j = 0 ; j < k ; j++) {
printf("%d ", w[i][j]);
}
printf("\n\n");
}
for(i = 0 ; i < k ; i++) {//입력된 Data bit들을 Signal로 변환
if(a[i]==NULL)
a[i]='X';//Silent값을 X로 표현
printf("staion %d : bit %c --> ",i,a[i]);
if(a[i]=='1')//Data bit가 1일경우 Signal 1
a[i]=1;
else if(a[i]=='0')//Data bit가 0일경우 Signal -1
a[i]=-1;
else//Data bit가 X(Silent)일경우 Signal 0
a[i]=0;
printf("%d ==> ",a[i]);
//변환된 Signal이 Multiplexer의 입력으로 들어감.
for(j = 0 ; j < k ; j++){
//각각의 Signal을 Walsh Table의 한 개의 행과 곱을 하여 변환
b[i]=a[i]*w[i][j];
printf("%d ",b[i]);
}
printf("\n W[%d] : ",i);
//각각의 Signal과의 곱을 수행하는 Walsh Table을 한행씩 표현
for(j = 0 ; j < k ; j++){
printf("%d ",w[i][j]);
}
printf("\n");
}
printf("Multiplexer Output : ");
//Walsh Table에 의해 변환된 행들을 각 열마다 덧셈
for(i = 0 ; i < k ; i++) {
for(j = 0 ; j < k ; j++){
b[i]=a[j]*w[i][j];
c[i]=c[i]+b[i];
}
printf("%d ",c[i]);//Multiplexer Output에 덧셈의 결과 출력
}
printf("\n\n");
printf("Demultiplexer Input : ");
//Demultiplexer Input에 Multiplexer Output을 입력
for(i = 0 ; i < k ; i++)
printf("%d ",c[i]);
printf("\n");
for(j = 0 ; j
for(i = 0 ; i
b[i]=c[i]*w[i][j]; //각각의 행에서 곱을 한 후
d[j]=d[j]+b[i]; //그 행에 속에 있는 원소들을 모두 더함.
e[j]=d[j]/k;//더한 값들을 Walsh의 크기 k로 나눔.
printf("%d ",b[i]);
}
printf(" ==> %d ==> %d ==> ",d[j],e[j]);
if(e[j]==1) //Signal이 1이면 Data bit 1로 출력
printf("bit 1");
else if(e[j]==-1) //Signal이 -1이면 Data bit 0로 출력
printf("bit 0");
else
printf("bit X"); //Signal이 0이면 Data bit X(Silent)로 출력
printf("\nW[%d] : ",j);
for(i = 0 ; i < k ; i++){ //Walsh Table을 한행씩 표현
printf("%d ",w[i][j]);
}
printf("\n");
}
return 0;
}
4. Result (bit X는 Silent를 의미함)
(1) data bit의 개수가 1개일 경우
(2) data bit의 개수가 2개일 경우
(3) data bit의 개수가 4개일 경우
(4) data bit의 개수가 5~8일 경우
(4) data bit의 개수가 9~16일 경우
#include
int main(void)
{
int i, j, n=0,k=0;
char a[80]={NULL};
int b[80],c[16]={0},d[16]={0},e[16]={0};
int w[16][16] ={{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},
{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},
{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},
{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}};
//최대 16*16 Walsh Table 생성
printf("Multiplexer Input : ");
scanf("%s",&a);//데이타 입력
for(i=0;i<=16;i++)
{
if((a[i]=='1') || (a[i]=='0') || (a[i]=='X'))
//입력된 데이타의 갯수를 파악함.
n++;
}
if(n <= 2)//입력된 데이타의 갯수에 따라 Walsh Table의 크기 결정
k=2;
else if (n <= 4)
k=4;
else if (n <= 8)
k=8;
else if (n <= 16)
k=16;
else
printf("Disavailable Input\n");
printf("Walsh Table :\n");//생성된 Walsh Table을 화면에 출력
for(i = 0 ; i < k ; i++) {
for(j = 0 ; j < k ; j++) {
printf("%d ", w[i][j]);
}
printf("\n\n");
}
for(i = 0 ; i < k ; i++) {//입력된 Data bit들을 Signal로 변환
if(a[i]==NULL)
a[i]='X';//Silent값을 X로 표현
printf("staion %d : bit %c --> ",i,a[i]);
if(a[i]=='1')//Data bit가 1일경우 Signal 1
a[i]=1;
else if(a[i]=='0')//Data bit가 0일경우 Signal -1
a[i]=-1;
else//Data bit가 X(Silent)일경우 Signal 0
a[i]=0;
printf("%d ==> ",a[i]);
//변환된 Signal이 Multiplexer의 입력으로 들어감.
for(j = 0 ; j < k ; j++){
//각각의 Signal을 Walsh Table의 한 개의 행과 곱을 하여 변환
b[i]=a[i]*w[i][j];
printf("%d ",b[i]);
}
printf("\n W[%d] : ",i);
//각각의 Signal과의 곱을 수행하는 Walsh Table을 한행씩 표현
for(j = 0 ; j < k ; j++){
printf("%d ",w[i][j]);
}
printf("\n");
}
printf("Multiplexer Output : ");
//Walsh Table에 의해 변환된 행들을 각 열마다 덧셈
for(i = 0 ; i < k ; i++) {
for(j = 0 ; j < k ; j++){
b[i]=a[j]*w[i][j];
c[i]=c[i]+b[i];
}
printf("%d ",c[i]);//Multiplexer Output에 덧셈의 결과 출력
}
printf("\n\n");
printf("Demultiplexer Input : ");
//Demultiplexer Input에 Multiplexer Output을 입력
for(i = 0 ; i < k ; i++)
printf("%d ",c[i]);
printf("\n");
for(j = 0 ; j
d[j]=d[j]+b[i]; //그 행에 속에 있는 원소들을 모두 더함.
e[j]=d[j]/k;//더한 값들을 Walsh의 크기 k로 나눔.
printf("%d ",b[i]);
}
printf(" ==> %d ==> %d ==> ",d[j],e[j]);
if(e[j]==1) //Signal이 1이면 Data bit 1로 출력
printf("bit 1");
else if(e[j]==-1) //Signal이 -1이면 Data bit 0로 출력
printf("bit 0");
else
printf("bit X"); //Signal이 0이면 Data bit X(Silent)로 출력
printf("\nW[%d] : ",j);
for(i = 0 ; i < k ; i++){ //Walsh Table을 한행씩 표현
printf("%d ",w[i][j]);
}
printf("\n");
}
return 0;
}
4. Result (bit X는 Silent를 의미함)
(1) data bit의 개수가 1개일 경우
(2) data bit의 개수가 2개일 경우
(3) data bit의 개수가 4개일 경우
(4) data bit의 개수가 5~8일 경우
(4) data bit의 개수가 9~16일 경우