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

📄 smt.c

📁 语音CELP压缩解压源代码(C语音)
💻 C
字号:
/**************************************************************************** ROUTINE*               smoothtau** FUNCTION**               smooth tau values when two errors detected in Hamming block** SYNOPSIS*               smoothtau(tau,twoerror,syndavg,tau3,subframe)**   formal**                       data    I/O*       name            type    type    function*       -------------------------------------------------------------------*       tau		float	i/o	input tau*	twoerror	int	i	two error flag*	syndavg		float	i	error rate estimation parameter*	tau3		int	i	third tau value*	subframe	int	i	subframe number**   external*                       data    I/O*       name            type    type    function*       -------------------------------------------------------------------*       frame           int     i****************************************************************************** DESCRIPTION**	Smoothing routine to smooth tau (pitch lag) when errors are detected:**	If the variance of past tau values is within the range VARLIMIT*	(indicating voiced speech) the validity of the current tau value*	is tested.  If the current value of TAU is within the range TAULIMIT,*	TAU is passed.  If TAU is not within that range TAULIMIT, TAU is reset *	to the average value of taus. **	The array OLDTAU contains past values of tau.  The array VECTOR*	is constructed from the array OLDTAU and TAU3 for subframes 1*	and 2 (TAU3 is a future absolute tau value).  For subframes 3*	and 4 there are no valid future values (since delta taus in the *	future are not valid), therefore the array VECTOR is constructed *	entirely from the array OLDTAU.  Decisions concering smoothing of *	a particular tau are made on the variance of the array VECTOR and *	the tau in question (TAU).**	If the value of tau is smoothed in subframe 3, smoothing is disabled*	for subframe 4 of the same frame since the tau value in subframe 4*	is a delta based on subframe 3.**	Note:  The smoothing parameters should be capable of adapting*	to various bit error rate estimates. For example, different*	values of SYNDAVG should select different levels of TAULIMIT and*	VARLIMIT.****************************************************************************** CALLED BY**       celp** CALLS*****************************************************************************/#include <math.h>#define TAUHISTORY	4#define TAULIMIT	15#define VARLIMIT	15#define SYNDLIMIT       0.04#define TRUE            1#define FALSE           0extern int frame;smoothtau(tau, twoerror, syndavg, tau3, subframe)int twoerror, subframe;float *tau, syndavg, tau3;{  int i;  static int enable;  float avg, var, vector[4];  static float oldtau[TAUHISTORY];  if (subframe != 4)    enable = TRUE;  if ((twoerror || syndavg > SYNDLIMIT) && enable)  {    if (subframe == 1)    {      vector[0] = oldtau[0];      vector[1] = oldtau[1];      vector[2] = oldtau[2];      vector[3] = tau3;    }    else if (subframe == 2)    {      vector[0] = oldtau[0];      vector[1] = oldtau[1];      vector[2] = oldtau[2];      vector[3] = tau3;    }    else if (subframe == 3)    {      vector[0] = oldtau[0];      vector[1] = oldtau[1];      vector[2] = oldtau[2];      vector[3] = oldtau[3];    }    else if (subframe == 4)    {      vector[0] = oldtau[0];      vector[1] = oldtau[1];      vector[2] = oldtau[2];      vector[3] = oldtau[3];    }    else      printf("smoothtau: Error in subframe number\n");    variance(vector, 4, &var, &avg);    if (var < VARLIMIT && (*tau >= avg + TAULIMIT || *tau <= avg - TAULIMIT))    {      *tau = nint(avg);      printf("smoothtau: tau value reset to avg at frame %d subframe %d\n",	      frame, subframe);      if (subframe == 3)      {	enable = FALSE;	printf("smoothpgain: tau smoothing disabled for subframe 4\n");      }    }  }  for (i = TAUHISTORY - 1; i > 0; i--)    oldtau[i] = oldtau[i - 1];  oldtau[0] = *tau;}

⌨️ 快捷键说明

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