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

📄 dtw_rec.c

📁 speech signal process tools
💻 C
📖 第 1 页 / 共 2 页
字号:
/* * This material contains unpublished, proprietary software of  * Entropic Research Laboratory, Inc. Any reproduction, distribution,  * or publication of this work must be authorized in writing by Entropic  * Research Laboratory, Inc., and must bear the notice:  * *    "Copyright (c) 1991-1996 Entropic Research Laboratory, Inc.  *                   All rights reserved" * * The copyright notice above does not evidence any actual or intended  * publication of this source code.      * * Written by:  Bill Byrne * Checked by: * Revised by: * * Brief description: * This program computes the dynamic time warping distances between * sequences.  The sequences are read from FEA files specified in * ASCII files. */static char *sccs_id = "%W%	%G%	ERL";#include <stdio.h>#include <math.h>#include <esps/esps.h> #include <esps/fea.h>#include <esps/vq.h>#include <esps/spsassert.h>#include <esps/limits.h>#define PROG "dtw_rec"#define VERSION "%I%"#define DATE "%G%"#define REQUIRE(test, text) {if (!(test)) { \  (void) fprintf(stderr, "%s: %s  Exiting.\n", PROG, text); \  exit(1);}}#define SYNTAX {\fprintf(stderr, "%s: dynamic time warp distance between FEA files.\n", PROG); \fprintf(stderr,"usage: %s [options] reference_list test_list results\n", PROG);\fprintf(stderr, " -P parameter file (default: params)\n");\fprintf(stderr, " -f sequence_field\n");\fprintf(stderr, " -b best_so_far\n"); \fprintf(stderr, " -l best_list_length (default: 1)\n"); \fprintf(stderr, " -d delta (default: 0)\n"); \fprintf(stderr, " -c distance_table_file\n"); \fprintf(stderr, " -t distance_table_field\n"); \fprintf(stderr, " -r distance_table_recno\n"); \fprintf(stderr, " -x debug_level (default: 0) \n");\exit(1);}#define Fprintf (void)fprintf#define Sprintf (void)sprintf/* global declarations */int 		debug_level=0;unsigned long    flags;char *	     ptr;#if !defined(IBM_RS6000) && !defined(DEC_ALPHA)    char             *calloc();    int              fprintf();    int              fscanf();    void             exit();#endifmain(argc, argv)int argc;char **argv;{    extern char      *optarg;    extern int       optind;    int              opt;    char             *param_file = "params";                char             *vfieldname = "spec_param";     char             *ifieldname = "spec_param_cwndx";    char             *fieldname = NULL;    int              fieldname_flag=0;    int              debug_level_flag=0;    int              delta_flag=0;    long             delta=0;    long             best_list_len=1;    long             list_len;    int              best_list_len_flag=0;    double           *best_list=NULL;    long             *best_id=NULL;    int              best_so_far_flag=0;    long             dim=0;    double           dist;    double           *dist_ptr;    long             *mapping=NULL;    int              i, j, k, ref_to_test_ptr;    float            *fptr;    long             *lptr;    double           *dptr;    FILE             *tbl_fp;    char             *tbl_fname=NULL;    char             *tbl_fieldname = "distance_table";    int              tflag=0;    int              rflag=0;    int              cflag=0;                    /* if set, expect sequences of integers */    long             tbl_recno = LONG_MAX;    struct header    *tbl_hd;    struct vqcbk     *tbl_rec;    double           **distances=NULL;    double           *fea_dist_ptr;    int              cbk_dim=0;    FILE             *res_fp;    char             *res_fname;    char             name[200];    char             *tname;    FILE             *ref_list_fp;    char             *ref_list_fname;    int              ref_list_len=0;    char             **ref_fnames;    float            ***ref_vseqs;    long             **ref_iseqs;    char             **ref_seq_id;    long             *ref_seq_len;    long             ref_ptr;    FILE             *test_list_fp;    char             *test_list_fname;    int              test_list_len=0;    char             **test_fnames;    float            **test_vseq;    long             *test_iseq;    char             *test_seq_id;    long             test_seq_len;    long             test_ptr;    double           dtw_l2();    double           dtw_tl();    double           l2_dist();    double           atof();    int              atoi();    long             get_fea_siz();    char             *savestring();    char             *get_cmd_line();    char             *strcpy();    char             *get_fea_ptr();    struct fea_data  *allo_fea_rec();    int              getopt();    double           **d_mat_alloc();    float            **f_mat_alloc();    FILE             *fopen();    long             *fea_read_int_sequence();    float            **fea_read_vec_sequence();    while ( (opt = getopt(argc, argv,"P:f:bd:t:l:c:r:x:")) != EOF )      switch(opt) {      case 'P': 	param_file = optarg;	break;      case 'b': 	best_so_far_flag++;	break;      case 'd':         delta = atoi(optarg);	spsassert(delta>=0,"delta must be positive.\n");	delta_flag++;	break;      case 'l':         best_list_len = atoi(optarg);	spsassert(best_list_len>0, "best_list_length must be positive.\n");	best_list_len_flag++;	break;      case 'f':         fieldname = optarg;	fieldname_flag++;	break;      case 'c':         tbl_fname = optarg;        cflag++;        break;      case  'r':        tbl_recno  = atoi(optarg);        rflag++;        break;      case 't' :	tbl_fieldname = optarg;        tflag++;        break;      case 'x': debug_level=atoi(optarg);	debug_level_flag++;	break;  }    /* process parameters */    (void) read_params(param_file, SC_NOCOMMON, (char *)NULL);    if ( debug_level_flag == 0 && symtype("debug_level") != ST_UNDEF )      debug_level = getsym_i("debug_level");    if ( fieldname_flag == 0 && symtype("sequence_field") != ST_UNDEF ) {      fieldname = getsym_s("sequence_field");      fieldname_flag++;    }    if ( delta_flag == 0 && symtype("delta") != ST_UNDEF )      delta = getsym_i("delta");    if ( best_so_far_flag == 0 && symtype("best_so_far") != ST_UNDEF ) 	if (getsym_i("best_so_far") == 1 )	    best_so_far_flag++;    if ( best_list_len_flag == 0 && symtype("best_list_length") != ST_UNDEF ) {      best_list_len = getsym_i("best_list_length");      best_list_len_flag++;    }    if ( tflag == 0 && symtype("distance_table_field") != ST_UNDEF )      tbl_fieldname = getsym_s("distance_table_field");    if ( rflag == 0 && symtype("distance_table_recno") != ST_UNDEF )      tbl_recno = getsym_i("distance_table_recno");    if ( cflag == 0 && symtype("distance_table_file") != ST_UNDEF ) {	tbl_fname = getsym_s("distance_table_file");	cflag++;    }    if ( !fieldname_flag ) {	if (cflag)	    fieldname = ifieldname;	else	    fieldname = vfieldname;    }    /* get distance table */    if (cflag) {	if (debug_level)	    Fprintf(stderr, "%s: Getting distance table from file %s.\n",		    PROG, tbl_fname);	(void) eopen(PROG, tbl_fname, "r", FT_FEA, FEA_VQ, &tbl_hd, &tbl_fp);	tbl_rec = allo_vqfea_rec(tbl_hd);	if (tbl_recno == LONG_MAX && tbl_hd->common.ndrec != -1)	    tbl_recno = tbl_hd->common.ndrec;	if (tbl_recno != LONG_MAX)	{	    fea_skiprec(tbl_fp, tbl_recno - 1, tbl_hd);	    REQUIRE(get_vqfea_rec(tbl_rec, tbl_hd, tbl_fp) != EOF,		    "Premature end of file in FEA_VQ distortion file.");	}	else	/* Read records to find the last. */	{	    struct vqcbk	*next_rec, *tmp_rec;	    next_rec = allo_vqfea_rec(tbl_hd);		    REQUIRE(get_vqfea_rec(tbl_rec, tbl_hd, tbl_fp) != EOF,		    "EOF when trying to read first distortion record.");	    while (get_vqfea_rec(next_rec, tbl_hd, tbl_fp) != EOF)	    {		tmp_rec = tbl_rec;		tbl_rec = next_rec;		next_rec = tmp_rec;	    }	    free_fea_rec(tmp_rec->fea_rec);	}	fea_dist_ptr =	    (double *) get_fea_ptr(tbl_rec->fea_rec, tbl_fieldname, tbl_hd);	REQUIRE(fea_dist_ptr != NULL,		"can't get field distance_table from distance file.");		cbk_dim = *tbl_rec->current_size;	if (debug_level>1)	    Fprintf(stderr, "%s: codebook dimension %d.\n", PROG, cbk_dim);	distances = d_mat_alloc( (unsigned) cbk_dim, (unsigned) cbk_dim);	spsassert( distances != NULL, "can't allocate memory table.");	for (i=0; i<cbk_dim; i++)	    for (j=0; j<cbk_dim; j++)		distances[i][j] = fea_dist_ptr[ i * cbk_dim + j];	fclose(tbl_fp);	free_fea_rec( tbl_rec->fea_rec );    }    /* open reference list file */    if (optind == argc) {	Fprintf(stderr, "No filename reference_list specified.\n");	SYNTAX;    }    ref_list_fname = argv[optind++];    spsassert( strcmp(ref_list_fname, "-")!=0, "standard input not allowed.");          ref_list_fp = fopen( ref_list_fname, "r");    spsassert( ref_list_fp != NULL, "Can't open reference_list.");    if (debug_level)	Fprintf(stderr, "%s: Reading reference list from %s.\n", PROG, ref_list_fname);    /* open test list file */    if (optind == argc) {	Fprintf(stderr, "No filename test_list specified.\n");	SYNTAX;    }    test_list_fname = argv[optind++];    spsassert( strcmp(test_list_fname, "-")!=0, "standard input not allowed.");          test_list_fp = fopen(test_list_fname, "r");    spsassert( test_list_fp != NULL, "Can't open test_list.");    if (debug_level)	Fprintf(stderr, "%s: Reading test list from %s.\n", PROG, test_list_fname);

⌨️ 快捷键说明

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