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

📄 pitchvq.c

📁 this the source code of addio compression standard CELP. Also, it is optimizied for the execution sp
💻 C
字号:
/**************************************************************************
*
* ROUTINE
*               pitchvq
*
* FUNCTION
*		Pitch VQ (n-taps, where n = 0, ..., 3)
*		"self-excited" or "vq" or "adaptive code book"
*
* SYNOPSIS
*               subroutine pitchvq(rar, idim, buf, idimb, b, type)
*
*   formal
*
*                       data    I/O
*       name            type    type    function
*       -------------------------------------------------------------------
*	rar		float	i/o	Data segement/Filtered data segment
*	idim		int	i	Dimension of data segement RAR
*	buf		float	i/o	Data buffer, dim IDIMB
*	idimb		int	i	Dimension of data buffer is
*						max(M) + IDIM+1
*	b[0]		float	i	Pitch delay (M)
*	b[1-3]		float	i	pitch predictor coefficients.
*					BETA1=B(2),BETA2=B(3), BETA3=B(4)
*					For a 1-tap predictor B(2)=B(4)=0.0
*	type		char	i	Type "long" calls ldelay.c, the 
*					delay routine using long interpola-
*					tion windows.  Type "short" calls
*					delay.c, the short delay routine.
*
***************************************************************************
*
* CALLED BY
*
*	celp   confg
*
* CALLS
*
*	delay
*
*
***************************************************************************
*
* USAGE
*
*    Adaptive code book (pitch) synthesis routine:
*
*    1) For lags < frame size:  gain-shape adaptive code book VQ
*
*    2) For lags => frame size this is equivalent to a pitch synthesis "filter"
*
*                              -[b(1)-1]        -b(1)        -[b(1)+1]
*       H(z) =  1 /  1 + b(2) z         + b(3) z     + b(4) z
*
*       NOTE: largest delay must not exceed the value IDIMB-IDIM
*
*
***************************************************************************
*
* REFERENCES
*
*	Singhal & Atal, Improving Performance of Multi-Pulse LPC Coders at
*	Low Bit Rates, ICASSP, 1984.
*
*	Rose & Barnwell.  The Self Excited Vocoder-An Alternate Approcch 
*	to Toll Quality at 4800 bps, ICASSP, 1986, pp. 453-456.
*
*	Kleijn, Krasinski and Ketchum, Improved Speech Quality and 
*	Efficient Vector Quantization in SELP, ICASSP, 1988.
*
**************************************************************************/
#include <math.h>
#include "ccsub.h"
pitchvq(rar, idim, buf, idimb, b, type)
int idim, idimb;
float rar[], buf[], b[];
char type[];

{
  int k, m, i, start;
  float buf2[MAXLP], frac;

  k = idimb - idim;
  start = k + 1;
  m = b[0];
  frac = b[0] - m;

  /* *update memory							 */

  for (i = 0; i < k; i++)
    buf[i] = buf[i + idim];

  /* *update memory with selected pitch memory from selected delay (m)    */

  if (fabs(frac) < 1.e-4)
  {
    for (i = k; i < idimb; i++)	
      buf[i] = buf[i - m];
  }

  /* *fractional update if fractional part isn't "zero"			 */

  if (fabs(frac) > 1.e-4)
  {
    if (strcmp(type,"long") == 0)
      ldelay(buf, start, idim, frac, m, buf2);
    else
      delay(buf, start, idim, frac, m, buf2);
    for (i = 0; i < idim; i++)	
      buf[i + k] = buf2[i];
  }

  /* *return "rar" with scaled memory added to stochastic contribution	 */
  
    for (i = 0; i < idim; i++)	
      buf[i + k] = rar[i] += b[2] * buf[i + k]; 
                           
}

⌨️ 快捷键说明

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