flScalar CompoundTerm::membership(flScalar crisp) const { flScalar max = flScalar(0); for (size_t i = 0; i < _terms.size(); ++i) { max = fuzzyOperator().aggregation().execute(max, _terms[i]->membership(crisp)); } return fuzzyOperator().modulation().execute(modulation(), max); }
flScalar TrapezoidalTerm::membership(flScalar crisp) const { if (crisp < minimum() || crisp > maximum()) { return flScalar(0); } if (crisp < b()) { return fuzzyOperator().modulation().execute(modulation(), FuzzyOperation::Scale(a(), b(), crisp, 0, 1)); } if (crisp < c()) { return fuzzyOperator().modulation().execute(modulation(), flScalar(1.0)); } if (crisp < d()) { return fuzzyOperator().modulation().execute(modulation(), FuzzyOperation::Scale(c(), d(), crisp, 1, 0)); } return flScalar(0.0); }
flScalar TriangularTerm::membership(flScalar crisp) const { if (crisp > maximum() || crisp < minimum()) { return flScalar(0.0); } flScalar result = crisp < b() ? FuzzyOperation::Scale(a(), b(), crisp, 0, 1) : FuzzyOperation::Scale(b(), c(), crisp, 1, 0); return fuzzyOperator().modulation().execute(result, modulation()); }
int sphere_refraction_func(const struct TObject *object, const Ray *ray, const Ray *reflect, const Vector *pt, const Vector *n, Ray *refract, Vector *attenuation) { // 入射角i const Sphere *sp = (const Sphere*)object->priv; double cosi = dot(n, &ray->front) / modulation(n) / modulation(&ray->front); double sini = sqrt(1 - cosi*cosi); double sinr; Vector vin = *n; if (cosi < 0) { // 空气到介质 sinr = sini / sp->refractive; } else { // 介质到空气 sinr = sini * sp->refractive; vin = rmul(n, -1); // 全反射 if (sinr >= 1) return 0; } double r = asin(sinr); Vector left = vcross(vcross(*n, ray->front), *n); normalize(&left); Vector nn = *n; normalize(&nn); refract->front = vadd(vrmul(left, sin(r)), vrmul(nn, cos(r))); refract->pos = *pt; *attenuation = sp->refract_attenuation; return 1; }
/* * Prepare the Oscillator */ void OscilGen::prepare() { int i, j, k; REALTYPE a, b, c, d, hmagnew; if((oldbasepar != Pbasefuncpar) || (oldbasefunc != Pcurrentbasefunc) || (oldbasefuncmodulation != Pbasefuncmodulation) || (oldbasefuncmodulationpar1 != Pbasefuncmodulationpar1) || (oldbasefuncmodulationpar2 != Pbasefuncmodulationpar2) || (oldbasefuncmodulationpar3 != Pbasefuncmodulationpar3)) changebasefunction(); for(i = 0; i < MAX_AD_HARMONICS; i++) hphase[i] = (Phphase[i] - 64.0) / 64.0 * PI / (i + 1); for(i = 0; i < MAX_AD_HARMONICS; i++) { hmagnew = 1.0 - fabs(Phmag[i] / 64.0 - 1.0); switch(Phmagtype) { case 1: hmag[i] = exp(hmagnew * log(0.01)); break; case 2: hmag[i] = exp(hmagnew * log(0.001)); break; case 3: hmag[i] = exp(hmagnew * log(0.0001)); break; case 4: hmag[i] = exp(hmagnew * log(0.00001)); break; default: hmag[i] = 1.0 - hmagnew; break; } if(Phmag[i] < 64) hmag[i] = -hmag[i]; } //remove the harmonics where Phmag[i]==64 for(i = 0; i < MAX_AD_HARMONICS; i++) if(Phmag[i] == 64) hmag[i] = 0.0; for(i = 0; i < OSCIL_SIZE / 2; i++) { oscilFFTfreqs.c[i] = 0.0; oscilFFTfreqs.s[i] = 0.0; } if(Pcurrentbasefunc == 0) { //the sine case for(i = 0; i < MAX_AD_HARMONICS; i++) { oscilFFTfreqs.c[i + 1] = -hmag[i] * sin(hphase[i] * (i + 1)) / 2.0; oscilFFTfreqs.s[i + 1] = hmag[i] * cos(hphase[i] * (i + 1)) / 2.0; } } else { for(j = 0; j < MAX_AD_HARMONICS; j++) { if(Phmag[j] == 64) continue; for(i = 1; i < OSCIL_SIZE / 2; i++) { k = i * (j + 1); if(k >= OSCIL_SIZE / 2) break; a = basefuncFFTfreqs.c[i]; b = basefuncFFTfreqs.s[i]; c = hmag[j] * cos(hphase[j] * k); d = hmag[j] * sin(hphase[j] * k); oscilFFTfreqs.c[k] += a * c - b * d; oscilFFTfreqs.s[k] += a * d + b * c; } } } if(Pharmonicshiftfirst != 0) shiftharmonics(); if(Pfilterbeforews == 0) { waveshape(); oscilfilter(); } else { oscilfilter(); waveshape(); } modulation(); spectrumadjust(); if(Pharmonicshiftfirst == 0) shiftharmonics(); oscilFFTfreqs.c[0] = 0.0; oldhmagtype = Phmagtype; oldharmonicshift = Pharmonicshift + Pharmonicshiftfirst * 256; oscilprepared = 1; }
void main() { int i, x, s, value, count; float start, finish; unsigned long int j; unsigned int mask=1; long int error, ferror; double progress, b; FILE *fp; if((fp=fopen("data_(63,15)m=1.txt","a"))==NULL) { printf("Can't open the data.txt\n"); exit(0); } fclose(fp); srand(1977); mono_table(); printf("\nEnter start SNR: "); scanf("%f", &start); printf("\nEnter finish SNR: "); scanf("%f", &finish); printf("\nseq_num: "); scanf("%d", &seq_num); for(SNR=start;SNR<=finish;SNR++) { N0=(1.0/(float(k)/float(n)))/pow(10.0, SNR/10.0); sgm=sqrt(N0/2); b=1.0; error=0; //ferror=0; for(j=1;j<=seq_num;j++) { //printf("\n\n*************For the %dth frame*************:\n", j); //Generate binary message for(i=0;i<k*p;i++) bi_message[i]=rand()%2; //Convert to nonbinary for(i=0;i<k;i++) message[i]=bi_message[p*i]+2*bi_message[p*i+1]+4*bi_message[p*i+2]+8*bi_message[p*i+3] +16*bi_message[p*i+4]+32*bi_message[p*i+5]; encoder(); //Convert the codeword into binary for(i=0;i<n;i++) { value=codeword[i]; mask=1; for(x=0;x<p;x++) //for(m=p-1;m>=0;m--) { if((value & mask)>0) bi_codeword[p*i+x]=1; else bi_codeword[p*i+x]=0; mask=mask<<1; } } modulation(); channel(); /////////To be done?//////////// demodulation(); interpolation(); factorization(); //Number of errors calculation //error=0; for(i=0;i<p*n;i++) if(bi_codeword[i]!=dec_codeword[i]) error++; /* if(f_error_temp==1) printf("\nerror=%d\n",error); f_error_temp=0; */ /* if(error!=0) ferror++; */ progress=(double)(j*100)/(double)seq_num; BER=(double)(error)/(double)(n*p*j); //FER=(double)(ferror)/(double)(j), printf("Progress=%0.1f, SNR=%2.1f, Bit Errors=%2.1d, BER=%E\r", progress, SNR, error, BER); // printf(" Progress=%0.1f,dectect=%d\r",progress,dectec); } BER=(double)error/(double)(n*p*seq_num); //FER=(double)(ferror)/(double)(seq_num); printf("Progress=%0.1f, SNR=%2.1f, Bit Errors=%2.1d, BER=%E\n",progress, SNR, error, BER); // printf(" Progress=%0.1f,dectect=%d\r",progress,dectec); fp=fopen("data_(63,15)m=1.txt","a"); fprintf(fp,"Progress=%0.1f, SNR=%2.1f, Bit Errors=%2.1d, BER=%E\n",progress, SNR, error, BER); fclose(fp); } getchar(); getchar(); }
void main() { int i, x, s, start, finish, value, count; unsigned long int j; unsigned int mask=1; long int error, ferror; double progress, b; srand(1977); mono_table(); printf("\nEnter start SNR: "); scanf("%d", &start); printf("\nEnter finish SNR: "); scanf("%d", &finish); printf("\nseq_num: "); scanf("%d", &seq_num); /* printf("\nPlease input the number of k*p-bit sequence: "); for(i=0;i<8;i++) { printf("when SNR=%d, input the seqnum=",(start+i)); scanf("%d", &seq_num[i]); } */ /* //*******debug********* printf("\nstart=%d finish=%d seq_num=%d \n\n",start,finish,seq_num); //****************** */ for(SNR=start;SNR<=finish;SNR++) { N0=(1.0/(float(k)/float(n)))/pow(10.0, float(SNR)/10.0); sgm=sqrt(N0/2); b=1.0; error=0; //ferror=0; for(j=1;j<=seq_num;j++) { //printf("\n\n*************For the %dth frame*************:\n", j); //Generate binary message for(i=0;i<k*p;i++) bi_message[i]=rand()%2; //Convert to nonbinary for(i=0;i<k;i++) message[i]=bi_message[p*i]+2*bi_message[p*i+1]+4*bi_message[p*i+2]; encoder(); //Convert the codeword into binary for(i=0;i<n;i++) { value=codeword[i]; mask=1; for(x=0;x<p;x++) //for(m=p-1;m>=0;m--) { if((value & mask)>0) bi_codeword[p*i+x]=1; else bi_codeword[p*i+x]=0; mask=mask<<1; } } modulation(); channel(); /////////To be done?//////////// demodulation(); decoding(); //Number of errors calculation //error=0; for(i=0;i<p*n;i++) if(bi_codeword[i]!=dec_codeword[i]) error++; /* if(error!=0) ferror++; */ progress=(double)(j*100)/(double)seq_num; BER=(double)(error)/(double)(n*p*j); //FER=(double)(ferror)/(double)(j), printf("Progress=%0.1f, SNR=%2.1d, Bit Errors=%2.1d, BER=%E\r", progress, SNR, error, BER); // printf(" Progress=%0.1f,dectect=%d\r",progress,dectec); } BER=(double)error/(double)(n*p*seq_num); //FER=(double)(ferror)/(double)(seq_num); printf("Progress=%0.1f, SNR=%2.1d, Bit Errors=%2.1d, BER=%E\n",progress, SNR, error, BER); // printf(" Progress=%0.1f,dectect=%d\r",progress,dectec); } /* if( dectec==0 ) printf("\n\nit's over!!"); else printf("\n\n error!!!!!!!!!!"); */ getchar(); getchar(); }
void main() { int i, x, s, start, finish, value, count; unsigned long int j; unsigned int mask=1; long int error, ferror; double progress, b; srand(1977); mono_table(); /* //*********debug********* printf("mono_table:\n"); for(j=0;j<mono_size;j++) { for(i=0;i<mono_size;i++) printf("\t%d",mono_order[j][i]); printf("\n"); } //******************* */ printf("\nEnter start SNR: "); scanf("%d", &start); printf("\nEnter finish SNR: "); scanf("%d", &finish); printf("\nseq_num: "); scanf("%d", &seq_num); for(SNR=start;SNR<=finish;SNR++) { N0=(1.0/(float(k)/float(n)))/pow(10.0, float(SNR)/10.0); sgm=sqrt(N0/2); b=1.0; error=0; //ferror=0; for(j=1;j<=seq_num;j++) { //printf("\n\n*************For the %dth frame*************:\n", j); //Generate binary message for(i=0;i<k*p;i++) bi_message[i]=rand()%2; //Convert to nonbinary for(i=0;i<k;i++) message[i]=bi_message[p*i]+2*bi_message[p*i+1]+4*bi_message[p*i+2]+8*bi_message[p*i+3]; /* //******debug******* message[0]=6; message[1]=9; message[2]=2; message[3]=6; message[4]=10; message[5]=8; message[6]=2; message[7]=0; message[8]=0; */ //******************* encoder(); //Convert the codeword into binary for(i=0;i<n;i++) { value=codeword[i]; mask=1; for(x=0;x<p;x++) //for(m=p-1;m>=0;m--) { if((value & mask)>0) bi_codeword[p*i+x]=1; else bi_codeword[p*i+x]=0; mask=mask<<1; } } modulation(); channel(); /////////To be done?//////////// demodulation(); interpolation(); factorization(); //Number of errors calculation //error=0; for(i=0;i<p*n;i++) if(bi_codeword[i]!=dec_codeword[i]) error++; /* if(f_error_temp==1) printf("\nerror=%d\n",error); f_error_temp=0; */ /* if(error!=0) ferror++; */ progress=(double)(j*100)/(double)seq_num; BER=(double)(error)/(double)(n*p*j); //FER=(double)(ferror)/(double)(j), printf("Progress=%0.1f, SNR=%2.1d, Bit Errors=%2.1d, BER=%E\r", progress, SNR, error, BER); // printf(" Progress=%0.1f,dectect=%d\r",progress,dectec); } BER=(double)error/(double)(n*p*seq_num); //FER=(double)(ferror)/(double)(seq_num); printf("Progress=%0.1f, SNR=%2.1d, Bit Errors=%2.1d, BER=%E\n",progress, SNR, error, BER); // printf(" Progress=%0.1f,dectect=%d\r",progress,dectec); } getchar(); getchar(); }
//------------------------------------------------------- main() { int Gbs_x=map_x/Rbs; // Number of grids on y=1 int Gbs_y=map_y/Rbs; // Number of grids on x=1 int Nbs_x1=floor(Gbs_x/2); //Number og BSs on y=1 int Nbs_x2=floor(((map_x-Rbs)/Rbs)/2); //Number og BSs on y=2 int Nbs_y1=floor(Gbs_y/2); //Number og BSs on x=1 int Nbs_y2=floor(((map_y-Rbs)/Rbs)/2); //Number og BSs on x=2 int Tbs=(Nbs_x1*Nbs_y1)+(Nbs_x2*Nbs_y2); //Total BS on map int length=Rbs/space; //real length int Px=map_x/space; //number of points on x-axis int Py=map_y/space; //number of points on y-axis double TN; //Thermal Noise int i,j; ptrD=&D[0][0]; ptrBR=&BR[0]; ptrModulation=&Modulation[0]; ptrSensitivity=&Sensitivity[0]; ptrDP=&DP[0]; ptrSNR=&SNR[0]; ptrBPL=&BPL[0]; ptrLT=<[0]; ptrDS=&DS[0]; ptrPLT=&PathLossType[0][0]; ptrPL=&PL[0][0]; //ptrP=&P[0][0]; //printf("\n%d\n",Nbs_x1);printf("\n%d\n",Nbs_x2);printf("\n%d\n",Nbs_y1);printf("\n%d\n",Nbs_y2);printf("\n%d\n",Tbs); //for(counter=0;counter<_t;counter++) //totalr+=R[counter];//totalr = 4+6+8+5+2 //checkInputs(); fillCoordinatesBSs(Xbs,Ybs,Gbs_x,Gbs_y,Nbs_x1,Nbs_x2,Nbs_y1,Nbs_y2,length); /*for(i=1;i<=Tbs;i++) printf("Xbs[%d],Ybs[%d]=(%d,%d)\n",i,i,Xbs[i],Ybs[i]); printf("\n");*/ fillCoordinatesTPs(Xtp,Ytp,Px,Py,Tbs,Xbs,Ybs); /*for(i=1;i<=Ntp;i++) printf("Xtp[%d],Ytp[%d]=(%d,%d)\n",i,i,Xtp[i],Ytp[i]);*/ fillDistance(Xbs,Ybs,Xtp,Ytp,ptrD,Tbs); printf("\n"); /*for(i=1;i<=Tbs;i++) for(j=1;j<=Ntp;j++) printf("D[%d][%d]=%.2lf\n",i,j,D[i][j]); printf("\n"); */ fillMs(ptrBR); /* for(i=1;i<=Ntp;i++) printf("BR[%d]:%.2lf Mbps\n",i,BR[i]); printf("\n");*/ TN=ThermalNoise(); //printf("%.2lf\n",TN); //printf("\n"); modulation(TN,ptrBR,Modulation,Sensitivity,DP,SNR); //for(i=1;i<=Ntp;i++) // printf("TP[%d] with modulation %d, DP: %.2lf, SNR: %.2lf, S: %.2lf\n",i,Modulation[i],DP[i],SNR[i],Sensitivity[i]); //printf("\n"); LocationType(ptrLT,Xtp,Ytp); bpl(ptrLT,ptrBPL); //for(i=1;i<=Ntp;i++) // printf("TP[%d]'s location type is %d, bpl is %d\n",i,LT[i],BPL[i]); DataSubcarriers(ptrDS,ptrBR,ptrDP); //printf("\n"); //for(i=1;i<=Ntp;i++) // printf("data subcarriers for TP[%d]:%d\n",i,DS[i]); // printf("\n"); PathLoss(ptrD,ptrPLT,ptrLT,Tbs,ptrPL); power(Tbs,TN); FixedCellSize(Tbs,DS,ptrD,P[0],ptrBR,Xbs,Ybs,Xtp,Ytp); FILE *PowerSavingCPLEX; if((PowerSavingCPLEX=fopen("PowerSavingCPLEX","w"))==NULL) printf("\nerror!Fail to open file!"); else printf("\nOpen PowerSavingCPLEX successfully!\n"); fprintf(PowerSavingCPLEX,"This is the input to CPLEX for power saving model.\n"); objective(Tbs,PowerSavingCPLEX); fprintf(PowerSavingCPLEX,"st\n"); printf("st\n"); constraint1(Tbs,ptrDS,PowerSavingCPLEX); constraint2(Tbs,PowerSavingCPLEX); constraint3(Tbs,PowerSavingCPLEX); constraint4(Tbs,PowerSavingCPLEX); constraint5(Tbs,PowerSavingCPLEX); //constraint5(nr,nt,totalr); constraint6(Tbs,PowerSavingCPLEX); constraint7(Tbs); constraint8(Tbs); constraint9(Tbs); fprintf(PowerSavingCPLEX,"bounds\n"); printf("bounds\n"); bounds(Tbs,PowerSavingCPLEX); specifyTypes(Tbs,PowerSavingCPLEX); fprintf(PowerSavingCPLEX,"end\n"); printf("end\n"); fclose(PowerSavingCPLEX); checkMSsites(Tbs); heuristic(Tbs,P[0],Ntp,MP,DSt,BP,DS,Xbs,Ybs,Xtp,Ytp,ptrD,BR); printf("===================================================================================================================================\n"); Sheuristic(Tbs,P[0],Ntp,MP,DSt,BP,DS,Xbs,Ybs,Xtp,Ytp,ptrD,BR); FILE *outfile, *outfile1; if ((outfile=fopen("outfile1.txt", "w")) == NULL) printf("\n\nerror!Fail to open file!"); else printf("\n\nOpen file successfully!\n"); fprintf(outfile,"BS%dMS%dBP%g\n",Tbs,Ntp,BP); for(i=1;i<=Tbs;i++) for(j=1;j<=Ntp;j++) fprintf(outfile,"%d. BS[%d]=%d,%d MS[%d]=%d,%d DS=%d power=%g mW BW=%g Mbps\n",(i-1)*Ntp+j,i,Xbs[i],Ybs[i],j,Xtp[j],Ytp[j],DS[j],P[i][j],BR[j]); fclose(outfile); if ((outfile1=fopen("coordinates.txt", "w")) == NULL) printf("\n\nerror!Fail to open file!"); else printf("\n\nOpen coordinates.txt successfully!\n"); fprintf(outfile1,"#BS%dMS%dBP%g\n",Tbs,Ntp,BP); for(i=1;i<=Tbs;i++){ for(j=1;j<=Ntp;j++) fprintf(outfile1,"%d. BS[%d] %d %d MS[%d] %d %d DS %d power %g mW BW %g Mbps\n",(i-1)*Ntp+j,i,Xbs[i],Ybs[i],j,Xtp[j],Ytp[j],DS[j],P[i][j],BR[j]); } fprintf(outfile1,"\n\n"); for(i=1;i<=Tbs;i++) fprintf(outfile1," BS[%d]=%d,%d \n",i,Xbs[i],Ybs[i]); fclose(outfile1); //system("pause"); return; }
void OscilGen::prepare(fft_t *freqs) { if((oldbasepar != Pbasefuncpar) || (oldbasefunc != Pcurrentbasefunc) || DIFF(basefuncmodulation) || DIFF(basefuncmodulationpar1) || DIFF(basefuncmodulationpar2) || DIFF(basefuncmodulationpar3)) changebasefunction(); for(int i = 0; i < MAX_AD_HARMONICS; ++i) hphase[i] = (Phphase[i] - 64.0f) / 64.0f * PI / (i + 1); for(int i = 0; i < MAX_AD_HARMONICS; ++i) { const float hmagnew = 1.0f - fabs(Phmag[i] / 64.0f - 1.0f); switch(Phmagtype) { case 1: hmag[i] = expf(hmagnew * logf(0.01f)); break; case 2: hmag[i] = expf(hmagnew * logf(0.001f)); break; case 3: hmag[i] = expf(hmagnew * logf(0.0001f)); break; case 4: hmag[i] = expf(hmagnew * logf(0.00001f)); break; default: hmag[i] = 1.0f - hmagnew; break; } if(Phmag[i] < 64) hmag[i] = -hmag[i]; } //remove the harmonics where Phmag[i]==64 for(int i = 0; i < MAX_AD_HARMONICS; ++i) if(Phmag[i] == 64) hmag[i] = 0.0f; clearAll(freqs, synth.oscilsize); if(Pcurrentbasefunc == 0) //the sine case for(int i = 0; i < MAX_AD_HARMONICS - 1; ++i) { freqs[i + 1] = std::complex<float>(-hmag[i] * sinf(hphase[i] * (i + 1)) / 2.0f, hmag[i] * cosf(hphase[i] * (i + 1)) / 2.0f); } else for(int j = 0; j < MAX_AD_HARMONICS; ++j) { if(Phmag[j] == 64) continue; for(int i = 1; i < synth.oscilsize / 2; ++i) { int k = i * (j + 1); if(k >= synth.oscilsize / 2) break; freqs[k] += basefuncFFTfreqs[i] * FFTpolar<fftw_real>( hmag[j], hphase[j] * k); } } if(Pharmonicshiftfirst != 0) shiftharmonics(freqs); if(Pfilterbeforews) { oscilfilter(freqs); waveshape(freqs); } else { waveshape(freqs); oscilfilter(freqs); } modulation(freqs); spectrumadjust(freqs); if(Pharmonicshiftfirst == 0) shiftharmonics(freqs); clearDC(freqs); oldhmagtype = Phmagtype; oldharmonicshift = Pharmonicshift + Pharmonicshiftfirst * 256; oscilprepared = 1; }
flScalar SingletonTerm::membership(flScalar crisp) const { return fuzzyOperator().modulation().execute(modulation(), FuzzyOperation::IsEq(crisp, value()) ? flScalar(1.0) : flScalar(0.0)); }
flScalar RectangularTerm::membership(flScalar crisp) const { if (crisp > maximum() || crisp < minimum()) { return flScalar(0.0); } return fuzzyOperator().modulation().execute(1.0, modulation()); }
void main() { int i, u, m, s, num, value, counter; float start, finish; unsigned long int j; unsigned int mask=1; long int error,ferror; double progress, b; FILE *fp; if((OpenFile)==NULL) { printf("Can't open the data.txt\n"); exit(0); } fclose(fp); findpoints(); /* //***debug****** printf("findpoint function:\n"); for(i=0;i<n;i++) printf("affine point[%d]=(%d,%d)\n",i,point[0][i],point[1][i]); */ //*************** tgorder(); /* //****debug***** printf("\n\ntgorder of polebasis:\n"); for(i=0;i<n;i++) printf("fai_%d=x^%d*y^%d\n",i,tg_order[i][0],tg_order[i][1]); */ //************** mono_table(); generator(); //****debug****** /* printf("\n\ngenerator:\n"); for(i=0;i<n;i++) printf("\tp%d",i); for(u=0;u<k;u++) { printf("\nfai%d",u); for(i=0;i<n;i++) printf("\t%d",gmatrix[u][i]); } printf("\n\n"); */ //*************** // polebasis(); srand(1977); //*****input data from basic_input.txt********* FILE * fp_input = fopen("basic_input.txt","r"); if(fp_input!=NULL) { fscanf(fp_input,"start SNR:%f\n", &start); fscanf(fp_input,"finish SNR:%f\n", &finish); fscanf(fp_input,"seq_num:%ld", &seq_num); fclose(fp_input); }else{ printf("\n\ncan't read the basic_input file\n\n"); } printf("start SNR: %0.2f\n\n", start); printf("finish SNR: %0.2f\n\n", finish); printf("seq_num: %d\n", seq_num); //******************************* #ifdef cheatingEncoding //读入文件的内容 int file_index; FILE *fin1; if ((fin1 = fopen("bi_message.txt", "r")) == NULL) { printf("bi_message.txt open filed"); } else { file_index = 0; while (fscanf(fin1, "%d", &bi_message[file_index]) != -1) { ++file_index; } } fclose(fin1); if ((fin1 = fopen("message.txt", "r")) == NULL) { printf("message.txt open filed"); } else { file_index = 0; while (fscanf(fin1, "%d", &message[file_index]) != -1) { ++file_index; } } fclose(fin1); if ((fin1 = fopen("codeword.txt", "r")) == NULL) { printf("codeword.txt open filed"); } else { file_index = 0; while (fscanf(fin1, "%d", &codeword[file_index]) != -1) { ++file_index; } } fclose(fin1); if ((fin1 = fopen("bi_codeword.txt", "r")) == NULL) { printf("bi_codeword.txt open filed"); } else { file_index = 0; while (fscanf(fin1, "%d", &bi_codeword[file_index]) != -1) { ++file_index; } } fclose(fin1); #endif for(SNR=start; SNR<=finish; SNR=SNR+interval) { N0=(1.0/((float)k/(float)n))/pow(10.0, SNR/10.0); sgm=sqrt(N0/2); error=0; ferror=0; for(j=1;j<=seq_num;j++) { #ifndef cheatingEncoding //generate binary input sequence for(u=0;u<k*p;u++) //k*4 bi_message[u]=rand()%2; //convert to decimal input sequence for(i=0;i<k;i++) { num=1; message[i]=0; for(u=0;u<p;u++) { message[i]=message[i]+(bi_message[p*i+u]*num); num=num*2; } } //****debug***** // message[0]=0; message[1]=0; message[2]=0; message[3]=0; //************** encoder(message,codeword); //convert to binary for(u=0;u<n*p;u++) //n*4 bi_codeword[u]=0; for(u=0;u<n;u++) //n { value=codeword[u]; mask=1; for(m=0;m<p;m++) { if((value & mask)>0) bi_codeword[p*u+m]=1; else bi_codeword[p*u+m]=0; mask=mask<<1; } } #endif //modulation modulation(); //channel channel(); //demodulation demodulation(); //frame error rate calculation int temp = ferror; for (u = 0; u<n; u++) if (dec_codeword[u] != codeword[u]) { ferror++; break; } ////bit error rate calculation //int temp=error; //for(u=0;u<n*p;u++) //n*4 //{ // if(dec_bicodeword[u]!=bi_codeword[u]) // error++; //} ////frame error rate calculation //if( error>temp ) // ferror++; progress=(double)(j*100)/(double)seq_num; BER=(double)(error)/(double)(n*p*j); FER=(double)(ferror)/(double)(j); printf("Progress=%0.1f, SNR=%2.2f, Bit Errors=%2.1d, BER=%E, Frame Errors=%2.1d, FER=%E\r", progress, SNR, error, BER, ferror, FER); if(ferror>FrameError) break; } if(ferror>FrameError) { BER=(double)error/(double)(n*p*j); FER=(double)(ferror)/(double)(j); } else { BER=(double)error/(double)(n*p*seq_num); FER=(double)(ferror)/(double)(seq_num); } printf("Progress=%0.1f, SNR=%2.2f, Bit Errors=%2.1d, BER=%E, Frame Errors=%2.1d, FER=%E\n", progress, SNR, error, BER, ferror, FER); OpenFile; fprintf(fp,"Progress=%0.1f, SNR=%2.2f, Bit Errors=%2.1d, BER=%E, Frame Errors=%2.1d, FER=%E\n", progress, SNR, error, BER, ferror, FER); fclose(fp); } getchar(); }