prnt_dist.c

来自「speech signal process tools」· C语言 代码 · 共 1,741 行 · 第 1/3 页

C
1,741
字号
     int	i_rec;		/* record index */     int	i_ele;		/* element index */     int	j;		/* temporary element index *//* *   	  External Variables Referenced:  * *   int	s_rec, e_rec;	start record, end record *   int	s_ele, e_ele;   start element, end element **/     (void) pr_table_hdr1();  /* Print Table for -E option */     n_rec = (e_rec - s_rec + 1);     for ( i_rec = 0, rec_num = s_rec; i_rec < n_rec; i_rec++, rec_num++ ) {	(void) fprintf ( stdout,	"  %d  ", rec_num);	for (i_ele = s_ele, j = 0; i_ele <= e_ele; i_ele++, j++) {	    if ( i_ele == s_ele)	       (void) fprintf ( stdout, "    \t" );	    else	       (void) fprintf ( stdout, "             \t" );	    (void) fprintf ( stdout,	    "element%d\t%4.3e\t%4.3e\t%4.3e\n",	    i_ele, diff[i_rec][j], ABS (diff[i_rec][j]),	    SQUARE (diff[i_rec][j]) );	}	(void) fprintf (stdout, "\n");      }}pr_gen_ele_avg (diff)		/*  Print Generic Element Average  */double	**diff;{     int	n_rec;		/* total number of records */     int	i_rec;		/* record index */     int	i_ele;		/* element index */     int	j;		/* temporary element index */     float	diff_sum;	/* sum of differences across all records */     float	mag_sum;	/* sum of magnitudes across all records */     float	sqrd_sum;	/* sum of magnitude squared " " " */     int	count;		/* number of records to average */     float	avg_diff;	/* average difference across records */     float	avg_mag;	/* average magnitudes   "       "     */     float	avg_sqrd;	/* average magnitude squared "  "     */     float	max_mag;	/* maximum magnitude across records */     float	max_sqrd;	/* maximum magnitude squared across records */     int	max_rec;	/* record position where maximum occurs *//* *   	 External Variables Referenced:  * *   int	s_rec, e_rec;	start record, end record *   int	s_ele, e_ele;   start element, end element **/    (void) pr_table_hdr2();	/* print Element Average Table Header */    n_rec = (e_rec - s_rec + 1);    for (i_ele = s_ele, j = 0; i_ele <= e_ele; i_ele++, j++) {	diff_sum = 0.0;	mag_sum = 0.0;	sqrd_sum = 0.0;	count = 0;	max_mag = 0.0;	max_sqrd = 0.0;	for ( i_rec = 0; i_rec < n_rec; i_rec++ ) {	    diff_sum += diff[i_rec][j];	    mag_sum += ABS (diff[i_rec][j]);	    sqrd_sum += SQUARE (diff[i_rec][j]);	    ++count;	    if (i_rec == 0) {		max_mag = ABS (diff[i_rec][j]);		max_sqrd = SQUARE (diff[i_rec][j]);		max_rec = i_rec;	    } else {		max_mag = MAX (max_mag, ABS (diff[i_rec][j]));		max_sqrd = MAX (max_sqrd, SQUARE (diff[i_rec][j]));		max_rec = i_rec;	    }	}	if (debug_level > 4) {	   (void) fprintf (stderr,	   "pr_ana_ele_avg: elements: diff_sum = %4.3e, mag_sum = %4.3e\n",	   diff_sum, mag_sum);	   (void) fprintf (stderr,	   "                          sqrd_sum = %e,    count = %d\n",	   sqrd_sum, count);	}		if (count != 0) {	   avg_diff = diff_sum / (float) count;	   avg_mag = mag_sum / (float) count;	   avg_sqrd = sqrd_sum / (float) count;	   (void) fprintf ( stdout,	   "element%d\t", i_ele);	   (void) fprintf ( stdout, (avg_diff > 0) ? " " : "" );	   (void) fprintf ( stdout,	   "%4.3e     %4.3e     %4.3e    %4.3e   %4.3e\n",	   avg_diff, avg_mag, avg_sqrd,	   max_mag, max_sqrd );	}    }    (void) fprintf (stdout, "\n");}pr_gen_rec_avg (diff) 	/*  print Record Average  */double	**diff;{     int	n_rec;		/* total number of records */     int	rec_num;	/* current record number */     int	i_rec;		/* record index */     int	i_ele;		/* element index */     int	j;		/* temporary element index */     float	diff_sum;	/* sum of differences across all elements */     float	mag_sum;	/* sum of magnitudes across all elements */     float	sqrd_sum;	/* sum of magnitude squared " " " */     int	count;		/* number of elements to average */     float	avg_diff;	/* average difference across elements */     float	avg_mag;	/* average magnitudes   "       "     */     float	avg_sqrd;	/* average magnitude squared "  "     *//* *   	  External Variables Referenced:  * *   int	s_rec, e_rec;	start record, end record *   int	s_ele, e_ele;   start element, end element **/    (void) pr_table_hdr3();	/* Print Record Average Table Header */    n_rec = (e_rec - s_rec + 1);    for ( i_rec = 0, rec_num = s_rec; i_rec < n_rec; i_rec++, rec_num++ ) {	diff_sum = 0.0;	mag_sum = 0.0;	sqrd_sum = 0.0;	count = 0;	for (i_ele = s_ele, j = 0; i_ele <= e_ele; i_ele++, j++ ) {	    diff_sum += diff[i_rec][j];	    mag_sum += ABS (diff[i_rec][j]);	    sqrd_sum += SQUARE (diff[i_rec][j]);	    ++count;	}	if (debug_level > 4) {	   (void) fprintf (stderr,	   "pr_gen_rec_avg: elements: diff_sum = %4.3e, mag_sum = %4.3e\n",	   diff_sum, mag_sum);	   (void) fprintf (stderr,	   "                    sqrd_sum = %4.3e,   count = %d\n",	   sqrd_sum, count);	}		if (count != 0) {	   avg_diff = diff_sum / (float) count;	   avg_mag = mag_sum / (float) count;	   avg_sqrd = sqrd_sum / (float) count;	   (void) fprintf ( stdout,	   "  %d           \t    *     \t%4.3e\t%4.3e\t%4.3e\n",	   rec_num, avg_diff, avg_mag, avg_sqrd );	}    }	/* record loop */    (void) fprintf (stdout, "\n");}pr_gen_file_avg (diff)		/* Print File Average */double	**diff;{     int	n_rec;		/* total number of records */     int	i_rec;		/* record index */     int	i_ele;		/* element index */     int	j;		/* temporary element index */     int	count;		/* number of records to average */     float	mean_diff;	/* mean difference across records */     float	mean_mag;	/* mean magnitude across records */     float	mean_sqrd;	/* mean magnitude squared across records */     float	tot_diff;	/* difference across ALL records & elements */     float	tot_mag;	/* magnitude of difference across " " " "   */     float	tot_sqrd;	/* magnitude squared difference across " "  *//* *   	  External Variables Referenced:  * *   int	s_rec, e_rec;	start record, end record *   int	s_ele, e_ele;   start element, end element **/    (void) pr_table_hdr4();	/* print File Average Table Header */    n_rec = (e_rec - s_rec + 1);    count = 0;    tot_diff = 0.0;    tot_mag = 0.0;    tot_sqrd = 0.0;    for ( i_rec = 0; i_rec < n_rec; i_rec++ )	for (i_ele = s_ele, j = 0; i_ele <= e_ele; i_ele++, j++) {	    tot_diff += diff[i_rec][j];	    tot_mag += ABS (diff[i_rec][j]);	    tot_sqrd += SQUARE (diff[i_rec][j]);	    ++count;	}    if (debug_level > 4) {	(void) fprintf (stderr,	"pr_gen_file_avg: tot_diff = %4.3e, tot_mag = %4.3e, tot_sqrd = %4.3e\n",	tot_diff, tot_mag, tot_sqrd);	(void) fprintf (stderr,	"pr_gen_file_avg: count = %d\n",	count );    }	    if (count != 0) {	mean_diff = tot_diff / (float) count;	mean_mag = tot_mag / (float) count;	mean_sqrd = tot_sqrd / (float) count;	(void) fprintf ( stdout,	"      \t %4.3e \t\t %4.3e \t\t %4.3e\n",	mean_diff, mean_mag, mean_sqrd );    }    (void) fprintf (stdout, "\n");}pr_is_dist()		/* Print Spectral Distortions */{     char	*STAR = "  *    ";     int	n_rec;		/* total number of records */     int	rec_num;	/* current record number */     int	i_rec;		/* record index *//* *   	  External Variables Referenced:  * *   int	s_rec, e_rec;	start record, end record *   int	s_ele, e_ele;   start element, end element * *   char	**frame;	frame type (Voiced or Unvoiced) **/	if (sflag)	   (void) fprintf ( stdout,	   "      \t\t	SPECTRAL DISTORTIONS - SYMMETRIC\n" );	else	   (void) fprintf ( stdout,	   "      \t\t	    SPECTRAL DISTORTIONS\n" );	(void) fprintf ( stdout, "\n" );	(void) fprintf ( stdout,	"      Record\t\t IS \t\t\tGNIS\t\t\tGOIS\n" );	(void) fprintf ( stdout,	"      ------\t\t----\t\t\t----\t\t\t----\n" );    n_rec = (e_rec - s_rec + 1);    for ( i_rec = 0, rec_num = s_rec; i_rec < n_rec; i_rec++, rec_num++ ) {	if (IS_dist[i_rec] == -1.0)	   (void) fprintf ( stdout,	   "      %d (%s)\t%s\t\t\t%s\t\t\t%s\n",	   rec_num, frame[i_rec], STAR, STAR, STAR);	else	   (void) fprintf ( stdout,	   "      %d (%s)\t%6.4f\t\t\t%6.4f\t\t\t%6.4f\n",	   rec_num, frame[i_rec], IS_dist[i_rec], GNIS_dist[i_rec],	   GOIS_dist[i_rec]);    }} /* end pr_is_dist() */pr_tot_is_dist()		/* Print TOTAL Spectral Distortions */{     char	*STAR = "  *    ";     int	n_rec;		/* total number of records */     int	rec_num;	/* current record number */     int	i_rec;		/* record index *//* *   	  External Variables Referenced:  * *   int	s_rec, e_rec;	start record, end record *   int	s_ele, e_ele;   start element, end element * *   char	**frame;	frame type (Voiced or Unvoiced) **//*  Local Variables  */     double	U_is = 0;     double	U_gnis = 0;     double	U_gois = 0;     int	unvcd = 0;     double	V_is = 0;     double	V_gnis = 0;     double	V_gois = 0;     int	vcd = 0;     double	ALL_is = 0;     double	ALL_gnis = 0;     double	ALL_gois = 0;     int	tot_rec = 0;	(void) fprintf ( stdout, "\n" );	(void) fprintf ( stdout,	"      \t\t	   TOTAL SPECTRAL DISTORTIONS\n" );	(void) fprintf ( stdout, "\n" );	(void) fprintf ( stdout,	"      Frame \t\t IS \t\t\tGNIS\t\t\tGOIS\n" );	(void) fprintf ( stdout,	"      ------\t\t----\t\t\t----\t\t\t----\n" );    n_rec = (e_rec - s_rec + 1);    for ( i_rec = 0, rec_num = s_rec; i_rec < n_rec; i_rec++, rec_num++ ) {	if (IS_dist[i_rec] != -1.0) {	   /*	    * If IS_dist[i_rec] = -1.0 that means lpc_power[0] was zero,	    * therefore we cannot include that record in our computations.	    */	   if (strcmp(frame[i_rec], "Unvoiced") == 0) {	      U_is   += IS_dist[i_rec];	      U_gnis += GNIS_dist[i_rec];	      U_gois += GOIS_dist[i_rec];	      ++unvcd;	   } else {	/* "Voiced" Frame */	      V_is   += IS_dist[i_rec];	      V_gnis += GNIS_dist[i_rec];	      V_gois += GOIS_dist[i_rec];	      ++vcd;	   }	   ALL_is   += IS_dist[i_rec];	   ALL_gnis += GNIS_dist[i_rec];	   ALL_gois += GOIS_dist[i_rec];	   ++tot_rec;	}    }    if (unvcd != 0) {	U_is /= unvcd;	U_gnis /= unvcd;	U_gois /= unvcd;    }    if (vcd != 0) {	V_is /= vcd;	V_gnis /= vcd;	V_gois /= vcd;    }    if (tot_rec != 0) {        ALL_is /= tot_rec;	ALL_gnis /= tot_rec;	ALL_gois /= tot_rec;    }    if (unvcd == 0)       (void) fprintf ( stdout,       "      %s\t\t%s\t\t\t%s\t\t\t%s\n",       "Unvoiced", STAR, STAR, STAR);    else       (void) fprintf ( stdout,       "      %s\t\t%6.4f\t\t\t%6.4f\t\t\t%6.4f\n",       "Unvoiced", U_is, U_gnis, U_gois);    if (vcd == 0)       (void) fprintf ( stdout,       "      %s\t\t%s\t\t\t%s\t\t\t%s\n",       " Voiced ", STAR, STAR, STAR);    else       (void) fprintf ( stdout,       "      %s\t\t%6.4f\t\t\t%6.4f\t\t\t%6.4f\n",       " Voiced ", V_is, V_gnis, V_gois);    if (tot_rec == 0)       (void) fprintf ( stdout,       "      %s\t\t%s\t\t\t%s\t\t\t%s\n",       "  ALL   ", STAR, STAR, STAR);    else       (void) fprintf ( stdout,       "      %s\t\t%6.4f\t\t\t%6.4f\t\t\t%6.4f\n",       "  ALL   ", ALL_is, ALL_gnis, ALL_gois);} /* end pr_tot_is_dist() */pr_spec_ele()		/* Print each element difference (-E option) */{     int	n_rec;		/* total number of records */     int	i_rec;		/* record index */     int	i_ele;		/* element index */     int	j;		/* temporary element index *//* *   	 External Variables Referenced:  * *   int	s_rec, e_rec;	start record, end record *   int	s_ele, e_ele;   start element, end element * *	 GLOBAL Variables Referenced: * *   char	**frame;	string for " Voiced " for "Unvoiced" * *   int	*freq_len;	length of array re_spec_val, im_spec_val, *				and frqs_len for each record * *   float	**diff_real;	difference between re_spec_val vector *   float	**diff_imag;	difference between im_spec_val vector *   float	**diff_frqs;	difference between frqs vector * **/     (void) pr_table_hdr1();	/* print header for first table */     n_rec = (e_rec - s_rec + 1);     for ( i_rec = 0, rec_num = s_rec; i_rec < n_rec; i_rec++, rec_num++ ) {/* * Print out the first line of the output seperately * from the rest -- so that the record number and frame type (i.e. * voiced or unvoiced) only appears once on the top. **/	(void) fprintf ( stdout,	"%d (%s)\tre_spec_val[%d]\t", rec_num, frame[i_rec], s_ele - 1);	(void) fprintf ( stdout, (diff_real[i_rec][0] > 0) ? " " : "" );	(void) fprintf ( stdout,	"%4.3e\t%4.3e\t%4.3e\n",	diff_real[i_rec][0], ABS (diff_real[i_rec][0]),	SQUARE (diff_real[i_rec][0]) );	for (i_ele = s_ele, j = 1; j < freq_len[i_rec]; i_ele++, j++) {	  (void) fprintf ( stdout,	  "             \tre_spec_val[%d]\t", i_ele);	  (void) fprintf ( stdout, (diff_real[i_rec][j] > 0) ? " " : "" );	  (void) fprintf ( stdout,	  "%4.3e\t%4.3e\t%4.3e\n",	  diff_real[i_rec][j], ABS (diff_real[i_rec][j]),	  SQUARE (diff_real[i_rec][j]) );	}	(void) fprintf (stdout, "\n");	if ( strcmp(frame[i_rec], " Voiced ") == 0 ) {	   for (i_ele = s_ele - 1, j = 0; j < freq_len[i_rec]; i_ele++, j++) {	     (void) fprintf ( stdout,	     "             \tim_spec_val[%d]\t", i_ele);	     (void) fprintf ( stdout, (diff_imag[i_rec][j] > 0) ? " " : "" );	     (void) fprintf ( stdout,	     "%4.3e\t%4.3e\t%4.3e\n",	     diff_imag[i_rec][j], ABS (diff_imag[i_rec][j]),	     SQUARE (diff_imag[i_rec][j]) );	   }	   (void) fprintf (stdout, "\n");	}	for (i_ele = s_ele - 1, j = 0; j < freq_len[i_rec]; i_ele++, j++) {	  (void) fprintf ( stdout,	  "             \tfrqs[%d]\t", i_ele);	  (void) fprintf ( stdout, (diff_frqs[i_rec][j] > 0) ? " " : "" );	  (void) fprintf ( stdout,	  "%4.3e\t%4.3e\t%4.3e\n",	  diff_frqs[i_rec][j], ABS (diff_frqs[i_rec][j]),	  SQUARE (diff_frqs[i_rec][j]) );	}	(void) fprintf (stdout, "\n");      }  /* main for loop */} /* end pr_spec_ele() */pr_spec_ele_avg()	/*  print Element Average  */{     int	n_rec;		/* total number of records */     int	i_rec;		/* record index */     int	i_ele;		/* element index */     int	j;		/* temporary element index */     float	diff_sum;	/* sum of differences across all records */     float	mag_sum;	/* sum of magnitudes across all records */     float	sqrd_sum;	/* sum of magnitude squared " " " */     int	count;		/* number of records to average */     float	avg_diff;	/* average difference across records */     float	avg_mag;	/* average magnitudes   "       "     */     float	avg_sqrd;	/* average magnitude squared "  "     */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?