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

📄 con_adap.c

📁 4.8k/s速率FS1016标准语音压缩源码
💻 C
字号:
          /*LINTLIBRARY*/          /*PROTOLIB1*/#include <math.h>#include <string.h>#include "main.h"#include "delay.h"#include "con_adap.h"#define STRING_MATCH 0/*************************************************************************** ROUTINE*               ConstructAdaptCW** FUNCTION*               Adaptive VQ (n-taps, where n = 0, ..., 3)*		"self-excited" or "vq" or "adaptive code book"** SYNOPSIS*		ConstructAdaptCW(residual, ResLen, AdaptCB, AdaptCBLen,*			AdaptGain, AdaptDelay, Type)*   formal **                       data    I/O*       name            type    type    function*       -------------------------------------------------------------------*	residual	float	i/o	Data segement/Filtered data segment*	ResLen		int	 i	Dimension of residual*	AdaptCB		float	 i	Adaptive Codebook*	AdaptCBLen	int	 i	Dimension of Adaptive codebook*	AdaptDelay	float	 i	Adaptive codebook delay *	AdaptGain	float	 i	Adaptive codebook gain*	Type		char	 i	Type 'long' calls ldelay.f, the*					delay routine using long *					interpolation windows.  Type 'short'*					calls delay.f, the short delay*					routine.*==========================================================================*       * 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**==========================================================================*	* REFERENCES**	Singhal & Atal, Improving Performance of Multi-Pulse LPC Coders at*	Low Bit Rates, ICASSP, 1984.**	Rose & Barnwell.  The Self Excited Vocoder-An Alternate Approach*	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.****************************************************************************/void ConstructAdaptCW(float	residual[RES_LEN],int	ResLen,float	AdaptCB[MAX_ABUF_LEN],int	AdaptCBLen,float	AdaptGain,float	AdaptDelay,char	*Type){int	k, start, m;float	frac;int	i;float	buf[MAX_A_LEN];/*  Initialize variables */	k = AdaptCBLen - ResLen;	start = k + 1;	m = (int)(AdaptDelay);	frac = AdaptDelay - m;/*  Update codebook */	for(i=0; i<k; i++)	  AdaptCB[i] = AdaptCB[i + ResLen];/*  Update codebook with selected memory from selected delay (m) */	if (fabs((double)(frac)) < .0001)	{	  for(i=0; i<ResLen; i++)	{	    AdaptCB[i+k] = AdaptCB[i+k-m];	  }	}/*  Fractional update if fractional part isn't zero */	if(fabs((double)(frac)) > .0001)	{	  if (strcmp(Type, "long") == STRING_MATCH)	{ /* if they match */	    delay(AdaptCB, AdaptCBLen, start, ResLen, frac, m, -20, 19, 5, buf);	  }	  else	{	    delay(AdaptCB, AdaptCBLen, start, ResLen, frac, m, -4, 3, 5, buf);	  }	  for(i=0; i<ResLen; i++)	{	    AdaptCB[i+k] = buf[i];	  }	}/*  Return residual with scaled adaptive CB added to stochastic contribution */	for(i=0; i<ResLen; i++)	{	  AdaptCB[i+k] = AdaptGain * AdaptCB[i+k] + residual[i];	  residual[i] = AdaptCB[i+k];	}}

⌨️ 快捷键说明

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