亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? short_te.c

?? 基于DSP的用C語言實(shí)現(xiàn)語音編碼解碼
?? C
字號(hào):
/*
 * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
 * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
 * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
 */

/* $Header: n:\\development/speak_freely/GSM/SHORT_TE.C,v 1.1.1.1 1998/10/15 00:47:39 Administrator Exp $ */

#include <stdio.h>
#include <assert.h>

#include "private.h"

#include "gsm.h"
#include "proto.h"

/*
 *	SHORT TERM ANALYSIS FILTERING SECTION
 */

/* 4.2.8 */

static void Decoding_of_the_coded_Log_Area_Ratios P2((LARc,LARpp),
		word	* LARc, 		/* coded log area ratio [0..7]	IN		*/
		word	* LARpp)		/* out: decoded ..						*/
{
		register word	temp1;//, temp2;
		register long	ltmp;	/* for GSM_ADD */

		/*	This procedure requires for efficient implementation
		 *	two tables.
		 *
		 *	INVA[1..8] = integer( (32768 * 8) / real_A[1..8])
		 *	MIC[1..8]  = minimum value of the LARc[1..8]
		 */

		/*	Compute the LARpp[1..8]
		 */

		/*		for (i = 1; i <= 8; i++, B++, MIC++, INVA++, LARc++, LARpp++) {
		 *
		 *				temp1  = GSM_ADD( *LARc, *MIC ) << 10;
		 *				temp2  = *B << 1;
		 *				temp1  = GSM_SUB( temp1, temp2 );
		 *
		 *				assert(*INVA != MIN_WORD);
		 *
		 *				temp1  = GSM_MULT_R( *INVA, temp1 );
		 *				*LARpp = GSM_ADD( temp1, temp1 );
		 *		}
		 */
/* Microsoft's ever-so-carefully-debugged Visual C++ 1.52 loses it
   trying to evaluate the following macro.  For some reason it
   fails to recognise the reference to GSM_SUB in the following
   expansion */		
#ifdef INLINE_ADD_H_FUNCTIONS
//NEED TO FIX THIS!!!!
#endif

#undef	STEP
#define STEP( B, MIC, INVA )    \
                temp1    = (word) (GSM_ADD( (long) *LARc++, (long) MIC ) << 10);       \
                temp1    = (word) GSM_SUB( (long) temp1, (long) B << 1 );            \
                temp1    = (word) GSM_MULT_R( (long) INVA, (long) temp1 );           \
				*LARpp++ = (word) GSM_ADD( (long) temp1, (long) temp1 );

		STEP(	   0,  -32,  13107 );
		STEP(	   0,  -32,  13107 );
		STEP(	2048,  -16,  13107 );
		STEP(  -2560,  -16,  13107 );

		STEP(	  94,	-8,  19223 );
		STEP(  -1792,	-8,  17476 );
		STEP(	-341,	-4,  31454 );
		STEP(  -1144,	-4,  29708 );

		/* NOTE: the addition of *MIC is used to restore
		 *		 the sign of *LARc.
		 */
}

/* 4.2.9 */
/* Computation of the quantized reflection coefficients 
 */

/* 4.2.9.1	Interpolation of the LARpp[1..8] to get the LARp[1..8]
 */

/*
 *	Within each frame of 160 analyzed speech samples the short term
 *	analysis and synthesis filters operate with four different sets of
 *	coefficients, derived from the previous set of decoded LARs(LARpp(j-1))
 *	and the actual set of decoded LARs (LARpp(j))
 *
 * (Initial value: LARpp(j-1)[1..8] = 0.)
 */

static void Coefficients_0_12 P3((LARpp_j_1, LARpp_j, LARp),
		register word * LARpp_j_1,
		register word * LARpp_j,
		register word * LARp)
{
		register int	i;
		register longword ltmp;

		for (i = 1; i <= 8; i++, LARp++, LARpp_j_1++, LARpp_j++) {
				*LARp = (word) GSM_ADD( SASR( *LARpp_j_1, 2 ), SASR( *LARpp_j, 2 ));
				*LARp = (word) GSM_ADD( *LARp,  SASR( *LARpp_j_1, 1));
		}
}

static void Coefficients_13_26 P3((LARpp_j_1, LARpp_j, LARp),
		register word * LARpp_j_1,
		register word * LARpp_j,
		register word * LARp)
{
		register int i;
		register longword ltmp;
		for (i = 1; i <= 8; i++, LARpp_j_1++, LARpp_j++, LARp++) {
				*LARp = (word) GSM_ADD( SASR( *LARpp_j_1, 1), SASR( *LARpp_j, 1 ));
		}
}

static void Coefficients_27_39 P3((LARpp_j_1, LARpp_j, LARp),
		register word * LARpp_j_1,
		register word * LARpp_j,
		register word * LARp)
{
		register int i;
		register longword ltmp;

		for (i = 1; i <= 8; i++, LARpp_j_1++, LARpp_j++, LARp++) {
				*LARp = (word) GSM_ADD( SASR( *LARpp_j_1, 2L ), SASR( *LARpp_j, 2L ));
				*LARp = (word) GSM_ADD( *LARp, SASR( *LARpp_j, 1L ));
		}
}


static void Coefficients_40_159 P2((LARpp_j, LARp),
		register word * LARpp_j,
		register word * LARp)
{
		register int i;

		for (i = 1; i <= 8; i++, LARp++, LARpp_j++)
				*LARp = *LARpp_j;
}

/* 4.2.9.2 */

static void LARp_to_rp P1((LARp),
		register word * LARp)	/* [0..7] IN/OUT  */
/*
 *	The input of this procedure is the interpolated LARp[0..7] array.
 *	The reflection coefficients, rp[i], are used in the analysis
 *	filter and in the synthesis filter.
 */
{
		register int			i;
		register word			temp;
		register longword		ltmp;

		for (i = 1; i <= 8; i++, LARp++) {

				/* temp = GSM_ABS( *LARp );
				 *
				 * if (temp < 11059) temp <<= 1;
				 * else if (temp < 20070) temp += 11059;
				 * else temp = GSM_ADD( temp >> 2, 26112 );
				 *
				 * *LARp = *LARp < 0 ? -temp : temp;
				 */

				if (*LARp < 0) {
						temp = *LARp == MIN_WORD ? MAX_WORD : -(*LARp);
						*LARp = - ((temp < 11059) ? temp << 1
								: ((temp < 20070) ? temp + 11059
								:  (word) GSM_ADD( temp >> 2, 26112L )));
				} else {
						temp  = *LARp;
						*LARp =    (temp < 11059) ? temp << 1
								: ((temp < 20070) ? temp + 11059
								:  (word) GSM_ADD( temp >> 2, 26112L ));
				}
		}
}


/* 4.2.10 */
static void Short_term_analysis_filtering P4((S,rp,k_n,s),
		struct gsm_state * S,
		register word	* rp,	/* [0..7]		IN		*/
		register int	k_n,	/*	 k_end - k_start	*/
		register word	* s 	/* [0..n-1] 	IN/OUT	*/
)
/*
 *	This procedure computes the short term residual signal d[..] to be fed
 *	to the RPE-LTP loop from the s[..] signal and from the local rp[..]
 *	array (quantized reflection coefficients).	As the call of this
 *	procedure can be done in many ways (see the interpolation of the LAR
 *	coefficient), it is assumed that the computation begins with index
 *	k_start (for arrays d[..] and s[..]) and stops with index k_end
 *	(k_start and k_end are defined in 4.2.9.1).  This procedure also
 *	needs to keep the array u[0..7] in memory for each call.
 */
{
		register word			* u = S->u;
		register int			i;
		register word			di, zzz, ui, sav, rpi;
		register longword		ltmp;

		for (; k_n--; s++) {

				di = sav = *s;

				for (i = 0; i < 8; i++) {				/* YYY */

						ui	  = u[i];
						rpi   = rp[i];
						u[i]  = sav;

						zzz   = (word) GSM_MULT_R(rpi, di);
						sav   = (word) GSM_ADD(   ui,	zzz);

						zzz   = (word) GSM_MULT_R(rpi, ui);
						di	  = (word) GSM_ADD(   di,	zzz );
				}

				*s = di;
		}
}

#if defined(USE_FLOAT_MUL) && defined(FAST)

static void Fast_Short_term_analysis_filtering P4((S,rp,k_n,s),
		struct gsm_state * S,
		register word	* rp,	/* [0..7]		IN		*/
		register int	k_n,	/*	 k_end - k_start	*/
		register word	* s 	/* [0..n-1] 	IN/OUT	*/
)
{
		register word			* u = S->u;
		register int			i;

		float	  uf[8],
				 rpf[8];

		register float scalef = 3.0517578125e-5;
		register float			sav, di, temp;

		for (i = 0; i < 8; ++i) {
				uf[i]  = u[i];
				rpf[i] = rp[i] * scalef;
		}
		for (; k_n--; s++) {
				sav = di = *s;
				for (i = 0; i < 8; ++i) {
						register float rpfi = rpf[i];
						register float ufi	= uf[i];

						uf[i] = sav;
						temp  = rpfi * di + ufi;
						di	 += rpfi * ufi;
						sav   = temp;
				}
				*s = di;
		}
		for (i = 0; i < 8; ++i) u[i] = uf[i];
}
#endif /* ! (defined (USE_FLOAT_MUL) && defined (FAST)) */

static void Short_term_synthesis_filtering P5((S,rrp,k,wt,sr),
		struct gsm_state * S,
		register word	* rrp,	/* [0..7]		IN		*/
		register int	k,		/* k_end - k_start		*/
		register word	* wt,	/* [0..k-1] 	IN		*/
		register word	* sr	/* [0..k-1] 	OUT 	*/
)
{
		register word			* v = S->v;
		register int			i;
		register word			sri, tmp1, tmp2;
		register longword		ltmp;	/* for GSM_ADD	& GSM_SUB */

		while (k--) {
				sri = *wt++;
				for (i = 8; i--;) {

						/* sri = GSM_SUB( sri, gsm_mult_r( rrp[i], v[i] ) );
						 */
						tmp1 = rrp[i];
						tmp2 = v[i];
						tmp2 =	( tmp1 == MIN_WORD && tmp2 == MIN_WORD
								? MAX_WORD
								: 0x0FFFF & ((word) (( (longword)tmp1 * (longword)tmp2
											 + 16384) >> 15))) ;

						sri  = (word) GSM_SUB( sri, tmp2 );

						/* v[i+1] = GSM_ADD( v[i], gsm_mult_r( rrp[i], sri ) );
						 */
						tmp1  = ( tmp1 == MIN_WORD && sri == MIN_WORD
								? MAX_WORD
								: 0x0FFFF & ((word) (( (longword)tmp1 * (longword)sri
											 + 16384) >> 15))) ;

						v[i+1] = (word) GSM_ADD( v[i], tmp1);
				}
				*sr++ = v[0] = sri;
		}
}


#if defined(FAST) && defined(USE_FLOAT_MUL)

static void Fast_Short_term_synthesis_filtering P5((S,rrp,k,wt,sr),
		struct gsm_state * S,
		register word	* rrp,	/* [0..7]		IN		*/
		register int	k,		/* k_end - k_start		*/
		register word	* wt,	/* [0..k-1] 	IN		*/
		register word	* sr	/* [0..k-1] 	OUT 	*/
)
{
		register word			* v = S->v;
		register int			i;

		float va[9], rrpa[8];
		register float scalef = 3.0517578125e-5, temp;

		for (i = 0; i < 8; ++i) {
				va[i]	= v[i];
				rrpa[i] = (float)rrp[i] * scalef;
		}
		while (k--) {
				register float sri = *wt++;
				for (i = 8; i--;) {
						sri -= rrpa[i] * va[i];
						if	   (sri < -32768.) sri = -32768.;
						else if (sri > 32767.) sri =  32767.;

						temp = va[i] + rrpa[i] * sri;
						if	   (temp < -32768.) temp = -32768.;
						else if (temp > 32767.) temp =	32767.;
						va[i+1] = temp;
				}
				*sr++ = va[0] = sri;
		}
		for (i = 0; i < 9; ++i) v[i] = va[i];
}

#endif /* defined(FAST) && defined(USE_FLOAT_MUL) */

void Gsm_Short_Term_Analysis_Filter P3((S,LARc,s),

		struct gsm_state * S,

		word	* LARc, 		/* coded log area ratio [0..7]	IN		*/
		word	* s 			/* signal [0..159]				IN/OUT	*/
)
{
		word			* LARpp_j		= S->LARpp[ S->j	  ];
		word			* LARpp_j_1 	= S->LARpp[ S->j ^= 1 ];

		word			LARp[8];

#undef	FILTER
#if 	defined(FAST) && defined(USE_FLOAT_MUL)
#       define  FILTER  (* (S->fast                     \
                           ? Fast_Short_term_analysis_filtering \
						   : Short_term_analysis_filtering		))

#else
#		define	FILTER	Short_term_analysis_filtering
#endif

		Decoding_of_the_coded_Log_Area_Ratios( LARc, LARpp_j );

		Coefficients_0_12(	LARpp_j_1, LARpp_j, LARp );
		LARp_to_rp( LARp );
		FILTER( S, LARp, 13L, s);

		Coefficients_13_26( LARpp_j_1, LARpp_j, LARp);
		LARp_to_rp( LARp );
		FILTER( S, LARp, 14L, s + 13);

		Coefficients_27_39( LARpp_j_1, LARpp_j, LARp);
		LARp_to_rp( LARp );
		FILTER( S, LARp, 13L, s + 27);

		Coefficients_40_159( LARpp_j, LARp);
		LARp_to_rp( LARp );
		FILTER( S, LARp, 120L, s + 40);
}

void Gsm_Short_Term_Synthesis_Filter P4((S, LARcr, wt, s),
		struct gsm_state * S,

		word	* LARcr,		/* received log area ratios [0..7] IN  */
		word	* wt,			/* received d [0..159]			   IN  */

		word	* s 			/* signal	s [0..159]			  OUT  */
)
{
		word			* LARpp_j		= S->LARpp[ S->j	 ];
		word			* LARpp_j_1 	= S->LARpp[ S->j ^=1 ];

		word			LARp[8];

#undef	FILTER
#if 	defined(FAST) && defined(USE_FLOAT_MUL)

#       define  FILTER  (* (S->fast                     \
                           ? Fast_Short_term_synthesis_filtering        \
						   : Short_term_synthesis_filtering 	))
#else
#		define	FILTER	Short_term_synthesis_filtering
#endif

		Decoding_of_the_coded_Log_Area_Ratios( LARcr, LARpp_j );

		Coefficients_0_12( LARpp_j_1, LARpp_j, LARp );
		LARp_to_rp( LARp );
		FILTER( S, LARp, 13L, wt, s );

		Coefficients_13_26( LARpp_j_1, LARpp_j, LARp);
		LARp_to_rp( LARp );
		FILTER( S, LARp, 14L, wt + 13, s + 13 );

		Coefficients_27_39( LARpp_j_1, LARpp_j, LARp);
		LARp_to_rp( LARp );
		FILTER( S, LARp, 13L, wt + 27, s + 27 );

		Coefficients_40_159( LARpp_j, LARp );
		LARp_to_rp( LARp );
		FILTER(S, LARp, 120L, wt + 40, s + 40);
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91香蕉视频在线| 亚洲一区二区三区小说| 欧美精品久久久久久久多人混战 | 久久国产尿小便嘘嘘尿| 午夜国产精品一区| 三级欧美在线一区| 日韩成人免费电影| 日韩av网站在线观看| 麻豆国产精品视频| 精品在线亚洲视频| 国产中文字幕一区| 国产成人综合在线观看| 成人网页在线观看| 欧美电影免费观看高清完整版在线| 九九九精品视频| 久久99热这里只有精品| 国内精品伊人久久久久av一坑| 国产原创一区二区| 99久久99久久久精品齐齐| 在线视频观看一区| 制服丝袜一区二区三区| 久久久久综合网| 亚洲三级电影全部在线观看高清| 亚洲综合成人网| 麻豆91在线播放| 成人污视频在线观看| 欧美电影影音先锋| 日本一区二区三区四区| 亚洲最新视频在线观看| 久久精品免费观看| 91亚洲午夜精品久久久久久| 91精品国产麻豆| 久久精子c满五个校花| 亚洲综合激情网| 国产精品综合二区| 欧美日韩一级视频| 中文字幕精品一区二区三区精品| 成人黄色小视频在线观看| 欧美日韩午夜影院| 亚洲国产成人在线| 日韩国产一二三区| 色婷婷综合中文久久一本| 欧美电视剧免费全集观看| 中文字幕综合网| 精品亚洲国产成人av制服丝袜| 91麻豆成人久久精品二区三区| 日韩精品专区在线| 性欧美疯狂xxxxbbbb| 国产成人免费在线观看不卡| 欧美一区二区精品在线| 亚洲色图在线视频| 国产v综合v亚洲欧| 精品免费99久久| 午夜av一区二区三区| 99久久伊人网影院| 精品精品国产高清一毛片一天堂| 亚洲精品中文字幕乱码三区| 国产酒店精品激情| 欧美精品一卡两卡| 亚洲一区二区三区四区五区黄| 成人激情免费网站| 日本一区二区三区在线不卡| 久久se精品一区精品二区| 67194成人在线观看| 亚洲一区在线视频观看| 91最新地址在线播放| 欧美国产视频在线| 国产精品综合二区| 久久久久久久精| 国产精品66部| 久久精品一区二区| 国产在线精品一区二区夜色| 欧美成人激情免费网| 麻豆视频一区二区| 日韩精品专区在线影院重磅| 免费xxxx性欧美18vr| 3d动漫精品啪啪一区二区竹菊| 婷婷成人激情在线网| 欧美一区二区大片| 麻豆成人久久精品二区三区红| 欧美一区二区久久| 国产一区二区三区久久久| 欧美精品一区二区精品网| 国产在线国偷精品产拍免费yy| 精品国产一区二区三区av性色| 国产乱码精品一区二区三区av| 国产夜色精品一区二区av| 国产91丝袜在线观看| 中文字幕五月欧美| 色综合天天性综合| 偷窥国产亚洲免费视频| 欧美一区二区免费视频| 国产精华液一区二区三区| 国产精品欧美极品| 在线视频你懂得一区| 日韩av不卡一区二区| 亚洲精品一线二线三线| 成人一区二区三区中文字幕| 亚洲精品欧美专区| 日韩一区二区精品在线观看| 国产精品白丝jk白祙喷水网站| 亚洲蜜臀av乱码久久精品| 欧美日韩国产精品自在自线| 欧美私模裸体表演在线观看| 美腿丝袜在线亚洲一区| 欧美极品另类videosde| 在线精品视频一区二区三四| 久久国产福利国产秒拍| 日韩美女啊v在线免费观看| 欧美日韩中文字幕精品| 国产激情视频一区二区三区欧美 | 国产成人午夜视频| 樱桃国产成人精品视频| 日韩精品一区二区三区三区免费| 国产成人8x视频一区二区| 午夜久久久久久电影| 国产视频一区不卡| 中文字幕一区二区三区蜜月 | 亚洲色图.com| av午夜精品一区二区三区| 成人黄色一级视频| 一区二区三区免费| 成人精品国产免费网站| 精品少妇一区二区三区日产乱码 | 一本久道久久综合中文字幕| 亚洲免费在线电影| 在线视频观看一区| 成人av在线网站| 国产欧美日韩中文久久| 丁香五精品蜜臀久久久久99网站| 亚洲人成7777| 91蜜桃免费观看视频| 亚洲欧洲综合另类| 91色porny| 日本不卡一二三| 欧美美女一区二区在线观看| 国产成人午夜精品影院观看视频| 亚洲午夜电影在线| 色综合久久天天| 日韩av中文在线观看| 久久久精品综合| 欧美性色aⅴ视频一区日韩精品| 亚洲人成网站精品片在线观看| 91网站在线观看视频| 亚洲精品乱码久久久久久黑人| 欧美一级视频精品观看| 亚洲国产日日夜夜| 日韩欧美一级二级| 欧美老人xxxx18| 日韩亚洲欧美高清| 99re热这里只有精品视频| 毛片av一区二区三区| 五月激情六月综合| 日韩av在线播放中文字幕| 午夜精品久久久| 亚洲黄色性网站| 亚洲激情综合网| 久久在线观看免费| 欧美三区在线观看| 国产精品无码永久免费888| 久久久精品国产免大香伊| 91麻豆精品国产91久久久资源速度| 日韩色在线观看| 9191精品国产综合久久久久久 | 国产成人自拍高清视频在线免费播放| 美女在线视频一区| 国产美女精品一区二区三区| 国产一区 二区 三区一级| 精品一区二区影视| 国产精品一区二区在线播放| 国产一区二区在线视频| 成人av综合在线| 在线精品亚洲一区二区不卡| 91麻豆精品国产| 久久精品视频免费观看| 亚洲人成人一区二区在线观看| 亚洲高清视频在线| 久久99精品国产| 91社区在线播放| 91精品国产入口在线| 国产日韩欧美制服另类| 亚洲精品中文字幕在线观看| 日韩高清中文字幕一区| 精品剧情v国产在线观看在线| 国产精品白丝jk白祙喷水网站| 丰满岳乱妇一区二区三区| 91麻豆产精品久久久久久 | 麻豆国产91在线播放| 国产精品乡下勾搭老头1| 色诱视频网站一区| 欧美一区二区三区系列电影| 中文av一区特黄| 性做久久久久久免费观看欧美| 国产精品一区二区91| 在线观看网站黄不卡| 久久精品亚洲精品国产欧美| 亚洲不卡在线观看| 成人短视频下载| 精品国产乱码久久久久久蜜臀| 亚洲精品一二三|