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

📄 polefilt.h

📁 g729 coding ipaddressing
💻 H
字号:
/**************************************************************************
*
* ROUTINE
*				polefilt
*
* FUNCTION
*				Direct form all-pole filter
*
* SYNOPSIS
*				subroutine polefilt(a, n, z, xy, len)
*
*	formal 
*
*						data	I/O
*		name			type	type	function
*		-------------------------------------------------------------------
*		a				float	i		N+1 filter coefficients
*		n				int 	i		Filter order 
*		z				float	i/o 	N+1 filter delay elements
*										(maintained by the user)
*										(z[0] is a dummy delay)
*		xy				float	i/o 	Input/Output data array 
*		len 			int 	i		Number of samples to filter
*
***************************************************************************
*		
* DESCRIPTION
*
*		Recursive all-pole in-place time-domain filter.
*		The transfer function 1/A(z) is implemented
*		in a direct form realisation.
*
*					N		-i
*		H(z) = 1 / SUM a(i)z		 with a(0) = +1.0
*				   i=0
*
*		NOTE:  a(0) is not used for the actual computing,
*		as can easily be seen in the following flow graph.
*
*		x(t) ->---+------->--------(z0)-----> y(t)
*				  | 				 |
*				  +-------< -a1 ----z1
*				  | 				 |
*				  +-------< -a2 ----z2
*				  | 				 |
*				  : 				 :
*				  | 				 |
*				  +-------< -aN ----zN
*
***************************************************************************
*
* CALLED BY
*
*		celp	confg	impulse   postfilt
*
* CALLS
*
*
***************************************************************************
*
* REFERENCES
*
*		Oppenheim & Schafer, Digital Signal Processing, PH, 1975, p. 149.
*
**************************************************************************/

static void polefilt(const float a[], int n, float z[], float xy[], int len)
{
  int t, j;

  if (a[0] != 1.0)
  {
#ifdef CELPDIAG
    fprintf(stderr, "polefilt:  bad coefficients");
#endif
	CELP_ERROR(CELP_ERR_POLEFILT);
	return;
  }

  for (t = 0; t < len; t++)
  {
	z[0] = xy[t];
	for (j = n; j > 0; j--)
	{
	  z[0] -= a[j] * z[j];
	  z[j]	= z[j-1];
	}
	xy[t] = z[0];
  }
}

⌨️ 快捷键说明

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