📄 eid8k.c
字号:
*/ FEReid = recall_eid_from_file(&fer_file_name[0], &FER, &FER_gamma); if (FEReid == (SCD_EID *) 0) { printf (" File with EID-states doesn't exist. Create one\n"); GET_PAR_D(6,"_Frame erasure rate (0.0 .. 0.5) ..............: ", ber_rate); FER = ber_rate; /* ** Setup new EID */ if ((FEReid = open_eid(FER,FER_gamma)) == (SCD_EID *) 0) { HARAKIRI("Couldn't create EID for frame errors\n",1); } } ber_rate = FER; printf (" ==> Frame erasure rate = %f \n", ber_rate); break; case 'B': case 'b': printf (" Generate Burst Frame Erasures: Bellcore model \n"); GET_PAR_S(5,"_File for FER state variable ............: ", burst_file_name); GET_PAR_D(6,"_Burst erasure rate (1,3,5 pct) .........: ", ber_rate); index = (long)ber_rate; /* ** Try to open burst eid state file */ burst_eid = recall_burst_eid_from_file(&burst_file_name[0],index); if (burst_eid == (BURST_EID *) 0) { printf(" File with burst eid states doesn't exist."); printf (" Create one\n"); /* ** Setup new EID */ if ((burst_eid = open_burst_eid(index)) == (BURST_EID *) 0) { HARAKIRI("Couldn't create EID for burst frame errors\n",1); } }#ifdef DEBUG printf (" Initial seed = %ld\n", burst_eid->seedptr); printf (" Get another seed ? 0 = no "); scanf ("%ld", &new_seed); if (new_seed != 0) { burst_eid->seedptr = (unsigned) new_seed; printf (" Initial seed = %ld\n", burst_eid->seedptr); }#endif break; default: HARAKIRI("Wrong mode parameter. Allowed values are R,F,B,A\n", 1); break; } /* ** Allocate memory for the data buffers */ EPbuff = (short *)calloc (EID_BUFFER_LENGTH, sizeof (short) ); if (EPbuff == (short *) 0) { HARAKIRI("Could not allocate memory for error pattern buffer\n", 1); } /* ** Generate the bit streams */ for (i=0;i < ZERO_VECTOR_LENGTH; i++) zero_vector[i] = 0; for (i=0;i < EID_BUFFER_LENGTH; i++) { frame_erased[i] = EID_FER; /* 0x00 */ frame_okay[i] = EID_NULL; /* 0x7f */ } memcpy (&ybuff[0],&frame_okay[0],EID_BUFFER_LENGTH); memcpy (&ybuff[EID_BUFFER_LENGTH],&frame_okay[0],EID_BUFFER_LENGTH); memcpy (&ybuff[2*EID_BUFFER_LENGTH],&zero_vector[0],ZERO_VECTOR_LENGTH); ber1 = 0.0; dstbits = 0.0; prcbits = 0.0; ersfrms = 0.0; prcfrms = 0.0; genbits = 0.0; genfrms = 0.0; switch (mode) { case 'R': case 'r': { for (i=1; i<start_frame; i++) { items = fwrite (&ybuff[0],sizeof (char),512,out_file_ptr); genbits += (double) 2*EID_BUFFER_LENGTH; } for (i=start_frame; i <= number_of_frames; i++) { for (j=0; j<=1; j++) { ber1 = BER_generator(BEReid,EID_BUFFER_LENGTH,EPbuff); dstbits += ber1; prcbits += (double) EID_BUFFER_LENGTH; genbits += (double) EID_BUFFER_LENGTH; for (k=0; k<EID_BUFFER_LENGTH; k++) { if (EPbuff[k] == (short) EID_NULL) ybuff[k+j*EID_BUFFER_LENGTH] = EID_NULL; else ybuff[k+j*EID_BUFFER_LENGTH] = EID_ONE; } } memcpy (&ybuff[2*EID_BUFFER_LENGTH], &zero_vector[0], ZERO_VECTOR_LENGTH); items = fwrite (&ybuff[0], sizeof (char), 512, out_file_ptr); } break; } case 'F': case 'f': { for (i=1; i<start_frame; i++) { items = fwrite (&ybuff[0],sizeof (char),512,out_file_ptr); genfrms += 2.0; } for (i=start_frame; i <= number_of_frames; i++) { for (j=0; j<=1; j++) { ber1 = FER_generator_random(FEReid); ersfrms += ber1; prcfrms += 1.0; genfrms += 1.0; if (ber1 == 0.0) { memcpy (&ybuff[j*EID_BUFFER_LENGTH], &frame_okay[0], EID_BUFFER_LENGTH ); } else { memcpy (&ybuff[j*EID_BUFFER_LENGTH], &frame_erased[0], EID_BUFFER_LENGTH ); } } memcpy (&ybuff[2*EID_BUFFER_LENGTH], &zero_vector[0], ZERO_VECTOR_LENGTH); items = fwrite (&ybuff[0], sizeof (char), 512, out_file_ptr); } break; } case 'B': case 'b': { for (i=1; i<start_frame; i++) { items = fwrite (&ybuff[0],sizeof (char),512,out_file_ptr); genfrms += 2.0; } for (i=start_frame; i<=number_of_frames; i++) { for (j=0; j<=1; j++) { ber1 = FER_generator_burst(burst_eid); ersfrms += ber1; prcfrms += 1.0; genfrms += 1.0; if (ber1 == 0.0) { memcpy (&ybuff[j*EID_BUFFER_LENGTH], &frame_okay[0], EID_BUFFER_LENGTH ); } else { memcpy (&ybuff[j*EID_BUFFER_LENGTH], &frame_erased[0], EID_BUFFER_LENGTH ); } } memcpy (&ybuff[2*EID_BUFFER_LENGTH], &zero_vector[0], ZERO_VECTOR_LENGTH); items = fwrite (&ybuff[0], sizeof (char), 512, out_file_ptr); } break; } } /* ** .. Save EID-status to file and print some statistics ... */ switch (mode) { case 'R': case 'r': { save_EID_to_file(BEReid, &ber_file_name[0], BER, BER_gamma); printf (" Results for the Bit Error Random Generation \n"); printf (" Data file name : %s \n", data_file_name); printf (" State variable in : %s \n", ber_file_name); printf (" Generated bits : %f \n", genbits); printf (" Processed bits : %f \n", prcbits); printf (" Distored bits : %f \n", dstbits); percentage = 100.0*dstbits/prcbits; printf (" Bit Error Rate : %f %c\n", percentage,percent); break; } case 'F': case 'f': { if (FER != 0.0) save_EID_to_file(FEReid, &fer_file_name[0], FER, FER_gamma); printf (" Results for the Random Frame Erasure Generation \n"); printf (" Data file name : %s \n", data_file_name); printf (" State variable in : %s \n", fer_file_name); printf (" Generated frames : %f \n", genfrms); printf (" Processed frames : %f \n", prcfrms); printf (" Distored frames : %f \n", ersfrms); percentage = 100.0*ersfrms/prcfrms; printf (" Frame Erasure Rate: %f %c\n", percentage,percent); break; } case 'B': case 'b': { /* ** save burst eid state variable onto a file */ save_burst_eid_to_file(burst_eid,&burst_file_name[0]); printf (" Results for the Burst Frame Erasure Generation \n"); printf (" Data file name : %s \n", data_file_name); printf (" State variable in : %s \n", burst_file_name); printf (" Generated frames : %f \n", genfrms); printf (" Processed frames : %f \n", prcfrms); printf (" Distored frames : %f \n", ersfrms); percentage = 100.0*ersfrms/prcfrms; printf (" Frame Erasure Rate : %f %c\n", percentage,percent); /* Display contents of state counters */ for (j=0; j < MODEL_SIZE; j++) printf("%ld ",burst_eid->internal[j]); /* itot = number of good frames */ itot = burst_eid->internal[0]; for (i=1; i < MODEL_SIZE; i++) /* plus number of bad frames */ itot = itot + i * burst_eid->internal[i]; /* Total frames processed should equal number of trials */ printf("Total frames = %ld\n", itot); break; } } /* End switch */ /* ** Close the output file and quit */ fclose (out_file_ptr);#ifndef VMS /* return value to OS if not VMS */ return 0;#endif}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -