⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eid8k.c

📁 Reference Implementation of G.711 standard and other voice codecs
💻 C
📖 第 1 页 / 共 2 页
字号:
	    */	              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 + -