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

📄 process_fr.c

📁 speech signal process tools
💻 C
字号:
/*| 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 SCCSstatic char *sccs_id = "@(#)process_fr.c	1.2 4/29/86";#endif/*anahd is a pointer to the output ana file header -- it should either be global to this routine or passed to it.  Similarly,  anarec is a pointer to an ana record and should either be global or passed as a parameter -- I show it here passed as a parameter.I didn't change the line that reads SD data -- that needs rewritingin terms of the new stuff (I flagged it). */process_frame (locn, blksze, p, anarec, datatype)int     locn, blksze;struct ana_data *anarec;struct pitch *p;char datatype;{#define bufsize 1024    int     i, j, k, ind;    float   lpcfilter[100], rc[100], sig_energy, res_energy;    static int  mem_ptr = 0, beg_addr = -bufsize, mem_size = bufsize;    static float    data_mem[bufsize];    float   inpbuf[bufsize], iobfr[256];    if (debug_level)	fprintf (stderr, "process_f-pitchrame(%d,%d)\n", locn, blksze);    if (beg_addr == -bufsize)	beg_addr = istan - mem_size;    if (locn < beg_addr)    {	fprintf (stderr, "oldana: locn(%d) < beg_addr(%d)\n", locn, beg_addr);	exit (2);    }    for (i = locn; i < locn + blksze; i++)    {	if (i >= beg_addr + mem_size)	{	    if (debug_level)		fprintf (stderr, "Reading %d points\n", frmlen);/*the next line needs rewriting in terms of new get_sd_rec function*/	    get_fdata (ifd, datatype, iobfr, frmlen);	    if (dcrem == yes)	    {		dc_val_rem += remove_dc (iobfr, frmlen);		dc_pts_rem += frmlen;	    }	    pre_emphasis (iobfr, frmlen, num, den, pstate);	    beg_addr += frmlen;	    for (j = 0; j < frmlen; j++)	    {		data_mem[mem_ptr] = iobfr[j];		mem_ptr = (mem_ptr + 1) % mem_size;	    }	}	j = (i - beg_addr + mem_ptr) % mem_size;	inpbuf[i - locn] = data_mem[j];    }    if (debug_level)	fprintf (stderr, "analyze: ");    analyze (inpbuf, blksze, order, method, &sig_energy, lpcfilter,	    rc, &res_energy, window, matsiz);    if (debug_level)	fprintf (stderr, "gain = %f\n", res_energy / sig_energy);    j = ptr - pknt - 1;    if (j < 0)	j += lntpbuf;    if (pknt == 0)    {	locn += matsiz - 1;	blksze -= matsiz - 1;/*write an ana unvoiced record (flip sign of ref coeffs for compatibility with Berny's program)*/	anarec->tag = locn;	anarec->frame_len = blksze;	anarec->p_pulse_len[0] = 0;	anarec->raw_power[0] = sig_energy;	anarec->raw_power[1] = -1.;	anarec->lpc_power[0] = res_energy;	anarec->lpc_power[1] = -1.;	for (i = 1; i <= order; i++) anarec->ref_coeff[i] = -rc[i];	put_ana_rec(anarec, anahd, anaptr);	locn -= matsiz - 1;	blksze += matsiz - 1;    }/*write an ana voiced record (flip sign of ref coeffs for compatibility with Berny's program)*/    if (pknt && debug_level)	fprintf (stderr, "Writing voiced frame\n");    for (i = 1; i <= order; i++) anarec->ref_coeff[i] = -rc[i];    locn = 0;    ind = 0;    for (k = 0; k < pknt; k++)    {	j = (j + 1) % lntpbuf;	if (to_be_analyzed[j] == yes)	{	    to_be_analyzed[j] = no;	    sig_energy = 0.0;	    for (i = 0; i < period[j]; i++)		sig_energy += inpbuf[locn + i] * inpbuf[locn + i];	    sig_energy /= period[j];	    frame->raw_power[ind] = sig_energy;	    frame->p_pulse_len[ind] = period[j];	    ind++;	}	locn += period[j];    }    frame->p_pulse_len[ind] = 0;    frame->raw_power[ind] = -1.;    frame->lpc_power[0] = res_energy;    frame->lpc_power[1] = -1.;    put_ana_rec(anarec, anahd, anaptr);}

⌨️ 快捷键说明

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