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

📄 gen-patt.c

📁 Reference Implementation of G.711 standard and other voice codecs
💻 C
📖 第 1 页 / 共 3 页
字号:
    if (BEReid == (SCD_EID *) 0)    {      fprintf (stderr, " File with EID-states doesn't exist. Creating one.\n");      BER = ber_rate;      /* Setup new EID */      if ((BEReid = open_eid (BER, BER_gamma)) == (SCD_EID *) 0)      {	HARAKIRI ("Couldn't create EID for bit errors\n", 1);      }    }    else      fprintf (stderr,	       "%s %s: BER=%.2f%% Gamma=%.2f%%\n",	       "Using BER/Gamma from EID-state file",	       state_file, BER * 100, BER_gamma * 100);    ber_rate = BER;    break;  case 'F':    /* Try to open EID-States file. */    FEReid = recall_eid_from_file (state_file, &FER, &FER_gamma);    if (FEReid == (SCD_EID *) 0)    {      fprintf (stderr, " File with EID-states doesn't exist. Create one\n");      /* Setup new EID */      FER = ber_rate;      if ((FEReid = open_eid (FER, FER_gamma)) == (SCD_EID *) 0)      {	HARAKIRI ("Couldn't create EID for frame errors\n", 1);      }    }    else      fprintf (stderr,	       "%s %s: FER=%.2f%% Gamma=%.2f%%\n",	       "Using FER/Gamma from EID-state file",	       state_file, FER * 100, FER_gamma * 100);    ber_rate = FER;    break;  case 'B':    /* Try to open burst eid state file */    burst_eid = recall_burst_eid_from_file (state_file, index);    if (burst_eid == (BURST_EID *) 0)    {      fprintf (stderr,	       " File with burst EID-states doesn't exist. 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);      }    }    break;  default:    HARAKIRI ("Wrong mode parameter. Allowed values are R,F,B\n", 1);    break;  }  /*        **  Allocate memory for G.192 data buffer   */  error_pat = (short *) calloc (EID_BUFFER_LENGTH, sizeof (short));  if (error_pat == (short *) 0)  {    HARAKIRI ("Could not allocate memory for error pattern buffer\n", 1);  }  /*      ** Initialize arrays   */  for (i = 0; i < EID_BUFFER_LENGTH; i++)    frame_erased[i] = G192_FER;	/* 0x6B20 */  if (mode=='R') /* For BER, use '0's, for (B)FER use good frame flags */    for (i = 0; i < EID_BUFFER_LENGTH; i++)      frame_okay[i] = G192_ZERO; 	/* 0x007F */  else    for (i = 0; i < EID_BUFFER_LENGTH; i++)      frame_okay[i] = G192_SYNC; 	/* 0x6B21 */  /*      ** Try obtaining a pattern within the given error/erasure rate   */  do  {    /*          **  Initializations necessary for each iteraction **     */    /* Increase counter */    iteraction++;    /* Rewind file */    fseek (out_file_ptr, 0l, 0);    /* Reset variables */    ber1 = 0.0;    processed = 0.0;    generated = 0.0;    disturbed = 0.0;    /*          **  Generate the bit streams     */    switch (mode)    {    case 'R':      {	/* Initialize frame buffer with OK samples */	/* memcpy (error_pat, frame_okay, EID_BUFFER_LENGTH); */        for (i=0; i<EID_BUFFER_LENGTH; i++)          error_pat[i] = frame_okay[i];	/* Skip initial samples, saving undisturbed bits */	for (i = 0; i < start_frame; i += EID_BUFFER_LENGTH)	{	  /* Use EID_BUFFER_LENGTH for start_frame/EID_BUFFER_LENGTH	     iteractions and start_frame % EID_BUFFER_LENGTH for the	     last iteraction */	  k = i + EID_BUFFER_LENGTH > start_frame	    /* ? start_frame % EID_BUFFER_LENGTH +1 */	    ? start_frame % EID_BUFFER_LENGTH	    : EID_BUFFER_LENGTH;	  items = save_data(error_pat, k, out_file_ptr);	  if (items < 0)	    HARAKIRI ("Error saving data to file\n", 8);	  generated += items;	}	/* Generate bits subject to disturbance*/	for (i = start_frame; i < number_of_frames; i += EID_BUFFER_LENGTH)	{	  /* Checks how many frame erasures are necessary here.	     If this is not the last round of collections, then	     get EID_BUFFER_LENGTH frame erasure indications. If this	     is the last iteraction in the loop, get only the remainder	     of samples not all EID_BUFFER_LENGTH samples */	  k = i + EID_BUFFER_LENGTH > number_of_frames	    ? number_of_frames - generated	    : EID_BUFFER_LENGTH;	  /* Run bit error generator */	  ber1 = BER_generator (BEReid, k, error_pat);	  /* Save data to file according to the defined format */	  items = save_data (error_pat, k, out_file_ptr);	  if (items < 0)	    HARAKIRI ("Error saving data to file\n", 8);	  /* Update counters */	  disturbed += ber1;	  processed += items;	  generated += items;	}	break;      }    case 'F':    case 'B':      {	/* Reset burst EID generator, if required */	if (mode == 'B' && reset)	  reset_burst_eid(burst_eid);	/* Skip initial frames */	for (i = 0; i < start_frame; i += EID_BUFFER_LENGTH)	{	  /* Use EID_BUFFER_LENGTH for start_frame/EID_BUFFER_LENGTH	     iteractions and start_frame % EID_BUFFER_LENGTH for the	     last iteraction */	  k = i + EID_BUFFER_LENGTH > start_frame	    /* ? start_frame % EID_BUFFER_LENGTH +1 */	    ? start_frame % EID_BUFFER_LENGTH	    : EID_BUFFER_LENGTH;	  items = save_data (frame_okay, k, out_file_ptr);	  generated += items;	}	/* Generate frame subject to disturbance */	for (i = start_frame; i < number_of_frames; i+= EID_BUFFER_LENGTH)	{	  /* Checks how many frame erasures are necessary here.	     If this is not the last round of collections, then	     get EID_BUFFER_LENGTH frame erasure indications. If this	     is the last iteraction in the loop, get only the remainder	     of samples not all EID_BUFFER_LENGTH samples */	  k = i + EID_BUFFER_LENGTH > number_of_frames	    ? number_of_frames - generated	    : EID_BUFFER_LENGTH;	  /*	  k = i + EID_BUFFER_LENGTH > number_of_frames	    ? number_of_frames % EID_BUFFER_LENGTH	    : EID_BUFFER_LENGTH;	  */	  /* Run either Gilbert or Bellcore frame erasure model */	  ber1 = mode == 'F'	    ? run_FER_generator_random (error_pat, FEReid, k)	    : run_FER_generator_burst (error_pat, burst_eid, k);	  /* Save intermediate data in buffer */	  items = save_data (error_pat, k, out_file_ptr);	  if (items < 0)	    HARAKIRI ("Error saving data to file\n", 8);	  /* Update counters */	  disturbed += ber1;	  processed += items;	  generated += items;	}	break;      }    }    /* Calculate Bit/Frame error rate */#ifdef OLD_CALCULATION    percentage = disturbed / processed;	#else    percentage = disturbed / generated;#endif    if (!quiet)      fprintf (stderr, "Run iteraction %ld with deviation %f\t(%.4f%%)\n",	       iteraction, ber_rate - percentage,	       100 * percentage);  }  while (tolerance >= 0 &&	 fabs (ber_rate - percentage) > tolerance &&	 iteraction < max_iteraction);  /*     ** .. Print some statistics ...   */  /* Common code */  percentage *= 100.0; /* Bit/Frame error rate */  /*        **  Print summary of options on screen   */  fprintf (stderr, "Pattern file:   %s\n", data_file_name);  fprintf (stderr, "Pattern format: %s\n", format_str(save_format));  fprintf (stderr, "Operating mode: %s ", mode_str (mode));  switch (mode)  {  case 'R':    fprintf (stderr, "(Generate Random Frame Erasures: Gilbert model)\n");    fprintf (stderr, "Desired BER= %5.2f %%\n", 100 * ber_rate);    fprintf (stderr, "Gamma= %5.4f %%\n", BER_gamma);    break;  case 'F':    fprintf (stderr, "(Generate Random Frame Erasures: Gilbert model)\n");    fprintf (stderr, "Desired FER= %5.2f %%\n", 100 * ber_rate);    fprintf (stderr, "Gamma= %5.4f %%\n", FER_gamma);    break;  case 'B':    fprintf (stderr, "(Generate Burst Frame Erasures: Bellcore model)\n");    fprintf (stderr, "Desired BFER= %5.2f %%\n", 100 * ber_rate);    break;  }  fprintf (stderr, "State variable file: %s\n", state_file);  switch (mode)  {  case 'R':    {      save_EID_to_file (BEReid, state_file, BER, BER_gamma);      fprintf (stderr, ">>Results\n");      fprintf (stderr, "  Generated bits    : %.0f \n", generated);      fprintf (stderr, "  Processed bits    : %.0f \n", processed);      fprintf (stderr, "  Distorted bits    : %.0f \n", disturbed);      fprintf (stderr, "  Bit Error Rate    : %f %c\n", percentage, percent);      break;    }  case 'F':    {      if (FER != 0.0)	save_EID_to_file (FEReid, state_file, FER, FER_gamma);      fprintf (stderr, ">>Results\n");      fprintf (stderr, "  Generated frames  : %.0f \n", generated);      fprintf (stderr, "  Processed frames  : %.0f \n", processed);      fprintf (stderr, "  Distorted frames  : %.0f \n", disturbed);      fprintf (stderr, "  Frame Erasure Rate: %f %c\n", percentage, percent);      break;    }  case 'B':    {      save_burst_eid_to_file (burst_eid, state_file);      fprintf (stderr, ">>Results\n");      fprintf (stderr, "  Generated frames  : %.0f \n", generated);      fprintf (stderr, "  Processed frames  : %.0f \n", processed);      fprintf (stderr, "  Distorted frames  : %.0f \n", disturbed);      fprintf (stderr, "  Frame Erasure Rate  : %f %c\n", percentage, percent);      /* Display contents of state counters */      fprintf (stderr, "  Contents of state counters (Bellcore model)%s:\n  ",	       reset || tolerance==-1 ?"":" since reset");      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 ("\n  Total frames (all iterations%s)= %ld\n",	      reset || tolerance==-1 ?"":" since reset", 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 + -