유자게에 어울리지도 굉장히 심하게 어울리는 글이라는것을 알고있지만 자꾸 안풀리니까 머리가 다 뽑힐것 같아서요;;;
그냥 7bit신호 보내는데 parity bit 하나 추가해서 ber이랑 ser구하는 프로그램이거든요 근데 이게 도대체 풀리지가 않네요... parity check를 여러번 수행할수록 ber이 더 좋아져야 하는데 이상하게 더 나빠만져요;; 조교님도 딱히 문제점을 잘 모르겠다고 하시던데...그럼 먼가 또 사소한거에서 실수를 했다는것 같은데.. 고민만 일주일째라;;
void main() { srand((unsigned)time(NULL)); //랜덤함수 사용 const int bit = 70000; //총 70000개의 비트를 사용한다. const double pi = 3.141592; int signal[8]; //입력신호 double data[8]; //신호가 0이면 -1, 아니면 1 double data1[8]; //신호에 파워를 곱한값 double data2[8]; //노이즈를 포함하여 전송 후 신호 결정한 값 double noise; //노이즈 double x1; //가우시안 잡음을 만들기 위해서 double x2; double Tx; //신호의 파워 double ber[250]; //-5~20까지 0.1단위 double ser[250]; double bnum; //발생된 비트당 에러 개수 double snum; //발생된 심볼당 에러 개수 double No; //잡음의 파워 int parity; int a; int n=1; int b; int p=0;
for (int i=0;i<250;i++) { Tx=pow(10,(-17.9-i*(-2.5)/250))*0.001; //신호의 파워는 EbNo에 따라 변함 No=pow(10,-17.4)*0.001; //노이즈 파워는 고정 bnum=0; //에러 개수 초기화 snum=0;
for (int j=0;j<(bit/7);j++) { a=0; for(int k=1;k<8;k++) { signal[k]=rand()%2; //신호 발생. 0또는 1 a=a+signal[k]; } if(a%2==0) //발생된 데이타에서 1의 개수가 짝수가 되도록 parity bit을 조정 parity=0; else parity=1; signal[0]=parity;
for(k=0;k<8;k++) { if (signal[k] == 0) //0이면 -1로 data[k]=-1; else //1이면 그대로 data[k]=1; }