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

📄 xx.c

📁 speech signal process tools
💻 C
字号:
/*  stats - compute statistics on SPS files				       Joseph T. Buck							     									     stats considers an SPS file to be a series of vectors. It computes mean,   standard deviation, maximum, and minimum values on an element-by-element   basis. The number of vectors used may be controlled with the -o switch.    The -n switch suppresses the header.					     									     From SDS version 1.3 of 10/28/85					     Joe Buck started converting it to SPS; Alan Parker finsished it.  This material contains proprietary software of Entropic Processing, Inc.     Any reproduction, distribution, or publication without the the prior	     written permission of Entropic Processing, Inc. is strictly prohibited.  Any public distribution of copies of this work authorized in writing by  Entropic Processing, Inc. must bear the notice			 								               "Copyright 1986 Entropic Processing, Inc."*/#ifdef SCCS	static char *sccs_id = "%W% %G%";#endif#include <stdio.h>#include <sps/sps.h>#define MAXL 100#define MAX_FLOAT 1.0e38#define MIN_FLOAT -MAX_FLOAT#define SYNTAX USAGE ("stats [-o rec_range] [-e el_range] [-n] file")main (argc, argv)int   argc;char  **argv;{    extern  optind;    extern char *optarg;    int     c, s_rec, e_rec, n_rec, l_rec, i_rec, i, hflag = 1;    long    tag;    char   *prange = NULL, *erange = NULL, *filename = NULL;    double  data [MAXL], mins[MAXL], maxs[MAXL], avgs[MAXL], devs[MAXL];    int     minl [MAXL], maxl[MAXL];    int     s_ele, e_ele;    double  scale, bias, sqrt ();    FILE   *istrm;    struct header *h;    while ((c = getopt (argc, argv, "no:e:")) != EOF) {	switch (c) {	    case 'n':		hflag = 0;		break;	    case 'o': 		prange = optarg;		break;	    case 'e':	        erange = optarg;		break;	    default:		SYNTAX;	}    }    if (argc == optind + 1)	filename = argv[optind];    read_params(NULL,SC_CHECK_FILE,filename);    if (filename == NULL) {	if(symtype("filename") == ST_UNDEF) {	  fprintf (stderr, "stats: no input file.\n");	  exit(1);    	}	filename = getsym_s("filename");    }    TRYOPEN ("stats", filename, "r", istrm);    if (!(h = read_header (istrm)))	NOTSPS ("stats", filename);    l_rec = get_rec_len(h);    if (l_rec > MAXL) {	fprintf (stderr, "stats: record length (%d) too long\n", l_rec);	exit (1);    }    s_rec = 1;    e_rec = h -> common.ndrec;    if(symtype("start") != ST_UNDEF) 	s_rec = getsym_i("start");    if(symtype("nan") != ST_UNDEF) 	e_rec = s_rec + getsym_i("nan") - 1;    range_switch (prange, &s_rec, &e_rec, 1);    (void) putsym_s("filename",filename);    (void) putsym_s("prog","stats");    (void) putsym_i("start",s_rec);    (void) putsym_i("nan",e_rec-s_rec+1);    if (hflag) printf("stats: filename: %s, start: %d, end: %d\n",	filename, s_rec, e_rec);    if (e_rec > h -> common.ndrec) {	fprintf (stderr, "stats: only %d records in file\n", h->common.ndrec);	exit (1);    }    s_ele = 1;    e_ele = l_rec;    range_switch (erange, &s_ele, &e_ele, 1);    if (e_ele > l_rec) {	fprintf (stderr, "stats: only %d elements per record\n", l_rec);	exit (1);    }/* Initialize statistics */    for (i = s_ele - 1; i < e_ele; i++) {	avgs[i] = devs[i] = 0.0;	mins[i] = MAX_FLOAT;	maxs[i] = MIN_FLOAT;    }    skiprec (istrm, s_rec - 1, size_rec (h));    n_rec = e_rec - s_rec + 1;    for (i_rec = s_rec; i_rec <= e_rec; i_rec++) {	if(get_gen_recd(data,&tag,h,istrm) == EOF) {		fprintf(stderr,"stats: only read %d records\n",i_rec-s_rec);		break;	}	for (i = s_ele - 1; i < e_ele; i++) {	    if (data[i] < mins[i]) {		mins[i] = data[i];		minl[i] = i_rec;	    }	    if (data[i] > maxs[i]) {		maxs[i] = data[i];		maxl[i] = i_rec;	    }	    avgs[i] += data[i];	    devs[i] += data[i] * data[i];	}    }    scale = 1.0 / (double) n_rec;/* bias is the factor that converts the biased estimate of the variance to   the unbiased estimate: n_rec/(n_rec-1).*/    bias = 0.0;    if (n_rec > 1)	bias = (double) n_rec / (double) (n_rec - 1);    for (i = s_ele - 1; i < e_ele; i++) {	avgs[i] *= scale;/* * for some cases this expression yields a negative number very close * zero that should be treated as zero. */	if ((bias * (devs[i] * scale - avgs[i] * avgs[i])) <= 0)	  devs[i] = 0;	 else	  devs[i] = sqrt (bias * (devs[i] * scale - avgs[i] * avgs[i]));    }    if (hflag)	printf ("Element   Minimum    at     Maximum    at      Mean      Std. Dev\n");    for (i = s_ele - 1; i < e_ele; i++) {	printf ("%5d%12g%6d%12g%6d%12g%12g\n", i + 1, mins[i], minl[i],		maxs[i], maxl[i], avgs[i], devs[i]);    }    return 0;}

⌨️ 快捷键说明

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