prnt_dist.c
来自「speech signal process tools」· C语言 代码 · 共 1,741 行 · 第 1/3 页
C
1,741 行
/* prnt_dist.c - print output of distort in a nice table format * * This material contains proprietary software of Entropic Speech, Inc. * Any reproduction, distribution, or publication without the prior * written permission of Entropic Speech, Inc. is strictly prohibited. * Any public distribution of copies of this work authorized in writing by * Entropic Speech, Inc. must bear the notice * * "Copyright (c) 1990 Entropic Speech, Inc.; All rights reserved" * * Module Name: prnt_dist * * Written By: Ajaipal S. Virdy * * * Purpose: Print output in tabular form * * */#ifdef SCCS static char *sccs_id = "@(#)prnt_dist.c 3.4 1/27/97 ESI";#endif#include <stdio.h>#include <esps/esps.h>#include "distort.h"#include "ana.h"#include "spec.h"pr_table_hdr1(){ (void) fprintf ( stdout, " \t\t \t\t \t\tDiff\t\tDiff\n" ); (void) fprintf ( stdout, "Record\t\tElement\t\tDiff\t\tMag\t\tSquared\n" ); (void) fprintf ( stdout, "------\t\t-------\t\t----\t\t---\t\t-------\n" );}pr_ana_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 *ref_c_len; length of array ref_coeff for each record * int *pitch_len; length of array p_pulse_len for each record * int *raw_len; length of array raw_power for each record * int *lpc_len; length of array lpc_power for each record * * float **diff_ref_c; difference between ref_coeff vector * float **diff_pitch; difference between p_pulse_len vector * float **diff_raw; difference between raw_power vector * float **diff_lpc; difference between lpc_power 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)\tref_coeff[%d]\t", rec_num, frame[i_rec], s_ele - 1); (void) fprintf ( stdout, (diff_ref_c[i_rec][0] > 0) ? " " : "" ); (void) fprintf ( stdout, "%4.3e\t%4.3e\t%4.3e\n", diff_ref_c[i_rec][0], ABS (diff_ref_c[i_rec][0]), SQUARE (diff_ref_c[i_rec][0]) ); for ( i_ele = s_ele, j = 1; j < ref_c_len[i_rec]; i_ele++, j++ ) { (void) fprintf ( stdout, " \tref_coeff[%d]\t", i_ele); (void) fprintf ( stdout, (diff_ref_c[i_rec][j] > 0) ? " " : "" ); (void) fprintf ( stdout, "%4.3e\t%4.3e\t%4.3e\n", diff_ref_c[i_rec][j], ABS (diff_ref_c[i_rec][j]), SQUARE (diff_ref_c[i_rec][j]) ); } (void) fprintf (stdout, "\n"); if ( strcmp(frame[i_rec], " Voiced ") == 0 ) { for (i_ele = s_ele - 1, j = 0; j < pitch_len[i_rec]; i_ele++, j++) { (void) fprintf ( stdout, " \tp_pulse_len[%d]\t", i_ele); (void) fprintf ( stdout, (diff_pitch[i_rec][j] > 0) ? " " : "" ); (void) fprintf ( stdout, "%4.3e\t%4.3e\t%4.3e\n", diff_pitch[i_rec][j], ABS (diff_pitch[i_rec][j]), SQUARE (diff_pitch[i_rec][j]) ); } (void) fprintf (stdout, "\n"); } for (i_ele = s_ele - 1, j = 0; j < raw_len[i_rec]; i_ele++, j++) { (void) fprintf ( stdout, " \traw_power[%d]\t", i_ele); (void) fprintf ( stdout, (diff_raw[i_rec][j] > 0) ? " " : "" ); (void) fprintf ( stdout, "%4.3e\t%4.3e\t%4.3e\n", diff_raw[i_rec][j], ABS (diff_raw[i_rec][j]), SQUARE (diff_raw[i_rec][j]) ); } (void) fprintf (stdout, "\n"); for (i_ele = s_ele - 1, j = 0; j < lpc_len[i_rec]; i_ele++, j++) { (void) fprintf ( stdout, " \tlpc_power[%d]\t", i_ele); (void) fprintf ( stdout, (diff_lpc[i_rec][j] > 0) ? " " : "" ); (void) fprintf ( stdout, "%4.3e\t%4.3e\t%4.3e\n", diff_lpc[i_rec][j], ABS (diff_lpc[i_rec][j]), SQUARE (diff_lpc[i_rec][j]) ); } (void) fprintf (stdout, "\n"); } /* main for loop */} /* end pr_ana_ele() */pr_table_hdr2(){ (void) fprintf ( stdout, " \t\t ELEMENT AVERAGE\n" ); (void) fprintf ( stdout, "\n" ); (void) fprintf ( stdout," \t\tAVG AVG AVG MAX MAX\n" ); (void) fprintf ( stdout,"Element\t\tDiff Mag Squared Mag Squared\n" ); (void) fprintf ( stdout,"-------\t\t-------- ------- ------- ------- -------\n" );}#define PRNT_FIELDS(vec_name, vec, len_vec) { \ for (i_ele = s_ele - 1, 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++ ) \ if ( j < len_vec[i_rec] ) { \ diff_sum += vec[i_rec][j]; \ mag_sum += ABS (vec[i_rec][j]); \ sqrd_sum += SQUARE (vec[i_rec][j]); \ ++count; \ if (i_rec == 0) { \ max_mag = ABS (vec[i_rec][j]); \ max_sqrd = SQUARE (vec[i_rec][j]); \ max_rec = i_rec; \ } else { \ max_mag = \ MAX (max_mag, ABS (vec[i_rec][j])); \ max_sqrd = \ MAX (max_sqrd, SQUARE (vec[i_rec][j])); \ max_rec = i_rec; \ } \ } \ \ if (debug_level > 4) { \ (void) fprintf (stderr, \ "pr_ana_ele_avg: vec_name: diff_sum = %5.4e, mag_sum = %4.3e\n", \ diff_sum, mag_sum); \ (void) fprintf (stderr, \ " sqrd_sum = %g, 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, \ "vec_name[%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"); \ \} /* end PRNT_FIELDS */pr_ana_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 " " */ float max_mag; /* maximum magnitude across records */ float max_sqrd; /* maximum magnitude squared across records */ int max_rec; /* record number where maximum occurs *//* * External Variables Referenced: * * int s_rec, e_rec; start record, end record * int s_ele, e_ele; start element, end element * * GLOBAL Variables Referenced: * * int *ref_c_len; length of array ref_coeff for each record * int *pitch_len; length of array p_pulse_len for each record * int *raw_len; length of array raw_power for each record * int *lpc_len; length of array lpc_power for each record * * float **diff_ref_c; difference between ref_coeff vector * float **diff_pitch; difference between p_pulse_len vector * float **diff_raw; difference between raw_power vector * float **diff_lpc; difference between lpc_power vector * **/ (void) pr_table_hdr2(); /* print Element Average Table Header */ n_rec = (e_rec - s_rec + 1); PRNT_FIELDS(ref_coeff, diff_ref_c, ref_c_len); PRNT_FIELDS(p_pulse_len, diff_pitch, pitch_len); PRNT_FIELDS(raw_power, diff_raw, raw_len); PRNT_FIELDS(lpc_power, diff_lpc, lpc_len);} /* end pr_ana_ele_avg() */pr_table_hdr3(){ (void) fprintf ( stdout, " \t\t RECORD AVERAGE\n" ); (void) fprintf ( stdout, "\n" ); (void) fprintf ( stdout, "Record\t\tElement\t\tAVG Diff\tAVG Mag\t\tAVG Squared\n" ); (void) fprintf ( stdout, "------\t\t-------\t\t--------\t-------\t\t-----------\n" );}pr_ana_rec_avg() /* print Record Average */{ char *STAR = " * "; int n_rec; int i_rec; int rec_num; int i_ele; int j; float diff_sum; float mag_sum; float squared_sum; float avg_diff; float avg_mag; float avg_squared; int count;/* * 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++ ) { /* Compute the Record Average for ref_coeff */ diff_sum = 0.0; mag_sum = 0.0; squared_sum = 0.0; count = 0; for (i_ele = s_ele - 1, j = 0; j < ref_c_len[i_rec]; i_ele++, j++) { diff_sum += diff_ref_c[i_rec][j]; mag_sum += ABS (diff_ref_c[i_rec][j]); squared_sum += SQUARE (diff_ref_c[i_rec][j]); ++count; } if (debug_level > 4) { (void) fprintf (stderr, "pr_ana_rec_avg: ref_coeff: diff_sum = %4.3e, mag_sum = %4.3e\n", diff_sum, mag_sum); (void) fprintf (stderr, " squared_sum = %4.3e, count = %d\n", squared_sum, count); } if (count != 0) { avg_diff = diff_sum / (float) count; avg_mag = mag_sum / (float) count; avg_squared = squared_sum / (float) count; (void) fprintf ( stdout, "%d (%s)\tref_coeff\t%4.3e\t%4.3e\t%4.3e\n", rec_num, frame[i_rec], avg_diff, avg_mag, avg_squared ); } /* Now compute the Record Average for p_pulse_len */ diff_sum = 0.0; mag_sum = 0.0; squared_sum = 0.0; count = 0; for (i_ele = s_ele - 1, j = 0; j < pitch_len[i_rec]; i_ele++, j++) { diff_sum += diff_pitch[i_rec][j]; mag_sum += ABS (diff_pitch[i_rec][j]); squared_sum += SQUARE (diff_pitch[i_rec][j]); ++count; } if (debug_level > 4) { (void) fprintf (stderr, "pr_ana_rec_avg: p_pulse_len: diff_sum = %4.3e, mag_sum = %4.3e\n", diff_sum, mag_sum); (void) fprintf (stderr, " squared_sum = %4.3e, count = %d\n", squared_sum, count); } if (count != 0) { avg_diff = diff_sum / (float) count; avg_mag = mag_sum / (float) count; avg_squared = squared_sum / (float) count; (void) fprintf ( stdout, " \tp_pulse_len\t%4.3e\t%4.3e\t%4.3e\n", avg_diff, avg_mag, avg_squared ); } /* Now compute the Record Average for raw_power */ diff_sum = 0.0; mag_sum = 0.0; squared_sum = 0.0; count = 0; for (i_ele = s_ele - 1, j = 0; j < raw_len[i_rec]; i_ele++, j++) { diff_sum += diff_raw[i_rec][j]; mag_sum += ABS (diff_raw[i_rec][j]); squared_sum += SQUARE (diff_raw[i_rec][j]); ++count; } if (debug_level > 4) { (void) fprintf (stderr, "pr_ana_rec_avg: raw_power: diff_sum = %4.3e, mag_sum = %4.3e\n", diff_sum, mag_sum); (void) fprintf (stderr, " squared_sum = %4.3e, count = %d\n", squared_sum, count); } if (count != 0) { avg_diff = diff_sum / (float) count; avg_mag = mag_sum / (float) count; avg_squared = squared_sum / (float) count; (void) fprintf ( stdout, " \traw_power\t%4.3e\t%4.3e\t%4.3e\n", avg_diff, avg_mag, avg_squared ); } else (void) fprintf ( stdout, " \traw_power\t%s\t%s\t%s\n", STAR, STAR, STAR); /* Now compute the Record Average for lpc_power */ diff_sum = 0.0; mag_sum = 0.0; squared_sum = 0.0; count = 0; for (i_ele = s_ele - 1, j = 0; j < lpc_len[i_rec]; i_ele++, j++) { diff_sum += diff_lpc[i_rec][j]; mag_sum += ABS (diff_lpc[i_rec][j]); squared_sum += SQUARE (diff_lpc[i_rec][j]); ++count; } if (debug_level > 4) { (void) fprintf (stderr, "pr_ana_rec_avg: lpc_power: diff_sum = %4.3e, mag_sum = %4.3e\n", diff_sum, mag_sum); (void) fprintf (stderr, " squared_sum = %4.3e, count = %d\n", squared_sum, count); } if (count != 0) { avg_diff = diff_sum / (float) count; avg_mag = mag_sum / (float) count; avg_squared = squared_sum / (float) count; (void) fprintf ( stdout, " \tlpc_power\t%4.3e\t%4.3e\t%4.3e\n", avg_diff, avg_mag, avg_squared ); } else (void) fprintf ( stdout, " \tlpc_power\t%s\t%s\t%s\n", STAR, STAR, STAR); (void) fprintf (stdout, "\n"); } /* record loop */} /* end pr_ana_rec_avg() */pr_table_hdr4() /* File Average Table Header */{ (void) fprintf ( stdout, " \t\t TOTAL FILE AVERAGE\n" ); (void) fprintf ( stdout, "\n" ); (void) fprintf ( stdout, " \tMEAN Diff\t\tMEAN Diff Mag\t\tMEAN Diff Squared\n" ); (void) fprintf ( stdout, " \t---------\t\t-------------\t\t-----------------\n" );}pr_ana_file_avg() /* Print File Average */{ float tot_diff = 0.0; float tot_mag = 0.0; float tot_sqrd = 0.0; float mean_diff; float mean_mag; float mean_sqrd; int count = 0; int n_rec; /* total number of records */ int i_rec; int i_ele; int j; (void) pr_table_hdr4(); /* print File Average Table Header */ n_rec = (e_rec - s_rec + 1); for ( i_rec = 0; i_rec < n_rec; i_rec++ ) for (i_ele = s_ele - 1, j = 0; j < ref_c_len[i_rec]; i_ele++, j++) { tot_diff += diff_ref_c[i_rec][j]; tot_mag += ABS (diff_ref_c[i_rec][j]); tot_sqrd += SQUARE (diff_ref_c[i_rec][j]); ++count; } for ( i_rec = 0; i_rec < n_rec; i_rec++ ) for (i_ele = s_ele - 1, j = 0; j < pitch_len[i_rec]; i_ele++, j++) { tot_diff += diff_pitch[i_rec][j]; tot_mag += ABS (diff_pitch[i_rec][j]); tot_sqrd += SQUARE (diff_pitch[i_rec][j]); ++count; } for ( i_rec = 0; i_rec < n_rec; i_rec++ ) for (i_ele = s_ele - 1, j = 0; j < raw_len[i_rec]; i_ele++, j++) { tot_diff += diff_raw[i_rec][j]; tot_mag += ABS (diff_raw[i_rec][j]); tot_sqrd += SQUARE (diff_raw[i_rec][j]); ++count; } for ( i_rec = 0; i_rec < n_rec; i_rec++ ) for (i_ele = s_ele - 1, j = 0; j < lpc_len[i_rec]; i_ele++, j++) { tot_diff += diff_lpc[i_rec][j]; tot_mag += ABS (diff_lpc[i_rec][j]); tot_sqrd += SQUARE (diff_lpc[i_rec][j]); ++count; } if (debug_level > 4) { (void) fprintf (stderr, "pr_ana_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_ana_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");} /* end pr_ana_file_avg() */pr_gen_ele ( diff ) /* Print Generic Elements */double **diff;{ int n_rec; /* total number of records */ int rec_num; /* current record number */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?