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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? pitch.c

?? MELPe 1200 bps, fixed point
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* ================================================================== */
/*                                                                    */ 
/*    Microsoft Speech coder     ANSI-C Source Code                   */
/*    SC1200 1200 bps speech coder                                    */
/*    Fixed Point Implementation      Version 7.0                     */
/*    Copyright (C) 2000, Microsoft Corp.                             */
/*    All rights reserved.                                            */
/*                                                                    */ 
/* ================================================================== */

/*------------------------------------------------------------------*/
/*																	*/
/* File:		pitch.c												*/
/*																	*/
/* Description: new pitch estimation routines						*/
/*																	*/
/*------------------------------------------------------------------*/


#include "sc1200.h"
#include "cprv.h"
#include "macro.h"
#include "global.h"
#include "mat_lib.h"
#include "pitch.h"
#include "mathhalf.h"
#include "math_lib.h"
#include "constant.h"
#include "dsp_sub.h"
#include "melp_sub.h"

#define PIT_WIN			(PIT_COR_LEN - MAXPITCH)
#define PIT_WEIGHT		200                                 /* 100 * (1 << 1) */
#define PIT_WEIGHT_Q5	3200										/* 100 Q5 */

#define ONE_Q5			32                                        /* (1 << 5) */
#define ONE_Q10			1024                                     /* (1 << 10) */
#define THREE_Q10		3072                                 /* 3 * (1 << 10) */


/* ========== Prototypes ========== */
static void		lpfilt(Shortword inbuf[], Shortword lpbuf[], Shortword len);
static void		ivfilt(Shortword ivbuf[], Shortword lpbuf[], Shortword len);
static void		corPeak(Shortword inbuf[], pitTrackParam *pitTrack,
													classParam *classStat);

void minCostIndex(Shortword *costBuf, Shortword *index1, Shortword *index2);

/****************************************************************************
**
** Function:		pitchAuto()
**
** Description: 	Calculating time domain pitch estimation
**					structure.
**
** Arguments:
**
**	Shortword inbuf[]		---- speech buffer (Q0)
**	pitTrackParam *pitTrack ---- pitch pitTrackParam structure
**	classParam *classStat	---- classification parameters
**
** Return value:	None
**
*****************************************************************************/
void pitchAuto(Shortword inbuf[], pitTrackParam *pitTrack,
			   classParam *classStat)
{
	static BOOLEAN	firstTime = TRUE;
	static Shortword	lpbuf[PIT_COR_LEN];     /* low pass filter buffer, Q0 */
	static Shortword	ivbuf[PIT_COR_LEN];     /* inverse filter buffer, Q12 */


	if (firstTime){                                 /* initialize the buffers */
		v_zap(lpbuf, PIT_COR_LEN);
		v_zap(ivbuf, PIT_COR_LEN);
		firstTime = FALSE;
	}

	/* The input inbuf[] is not modified in pitchAuto() and the functions     */
	/* pitchAuto() directly or indirectly calls.  On the other hand, an       */
	/* inspection of these functions shows that the output ivbuf[] for        */
	/* ivfilt() is in direct proportion to the input lpbuf[] and inside       */
	/* corPeak() we remove the DC component of ivbuf[] and then compute the   */
	/* normalized crosscorrelations.  This means we can scale lpbuf[] and     */
	/* ivbuf[] any way we want.                                               */

	/* ------ 800Hz low pass filter ------ */
	lpfilt(inbuf, lpbuf, PIT_SUBFRAME);

	/* ------ Two order inverse filter ------- */
	ivfilt(ivbuf, lpbuf, PIT_SUBFRAME);

	/* ------ Calculate the autocorrelation function ------- */
	corPeak(ivbuf, pitTrack, classStat);
}


/*============================================================*
 *				  LPFILT: low pass filter					  *
 * inbuf[]	---- input	speech data (Q0)					  *
 * lpbuf	---- ouput	low pass filtered data				  *
 * len		---- update buffer length						  *
 *============================================================*/
static void lpfilt(Shortword inbuf[], Shortword lpbuf[], Shortword len)
{
	register Shortword	i, j;
	static const Shortword		lpar[4] = {                            /* Q15 */
		20113, -20113, 9437, -1720
	};
	Longword	L_sum;

	/* ====== Shift the lpbuf ====== */
	v_equ(lpbuf, &(lpbuf[len]), (Shortword) (PIT_COR_LEN - len));

	/* ====== low pass filter ====== */

	/* lpbuf[] is a shifted output of the following filter with inbuf[] being */
	/* the input:                                                             */
	/*    H(z) = 0.3069/(1 - 2.4552 z^{-1} + 2.4552 z^{-2} - 1.152 z^{-3} +   */
	/*                   0.2099 z^{-4}).                                      */
	/* First we drop the factor 0.3069 in the numerator because we can afford */
	/* scale the input arbitrarily.  Then we divide everything by 4 to obtain */
	/*    H(z) = 1.0/(0.25 - 0.6138 z^{-1} + 0.6138 z^{-2} - 0.288 z^{-3} +   */
	/*                0.052475 z^{-4}).                                       */

	for (i = 0; i < len; i++){
		L_sum = L_shr(L_deposit_h(inbuf[i]), 3);
		for (j = 0; j < 4; j++){
			/*	sum += lpbuf[PIT_COR_LEN - len + i - j - 1] * lpar[j]; */
			L_sum= L_mac(L_sum, lpbuf[PIT_COR_LEN-len+i-j-1], lpar[j]); /* Q0 */
		}
		lpbuf[PIT_COR_LEN - len + i] = round(L_sum);                    /* Q0 */
	}
}

/*============================================================*
 *				  IVFILT: inverse filter					  *
 * lpbuf ---- input speech data that through low-pass filter  *
 * ivbuf ---- residaul values of lpbuf through inverse filer  *
 * len	 ---- update buffer length							  *
 *============================================================*/
static void ivfilt(Shortword ivbuf[], Shortword lpbuf[], Shortword len)
{
	register Shortword	i, j;
	Word40		L40_sum;
	Longword	L_temp;
	Shortword	shift, rc1, temp1, temp2, temp3;
	Shortword	r_coeff[3];                                            /* Q15 */
	Shortword	pc1, pc2;                                              /* Q12 */

	/* ====== Shift the ivbuf ====== */
	v_equ(ivbuf, &(ivbuf[len]), (Shortword) (PIT_COR_LEN - len));

	/* compute pc1 and pc2 in Q12 as                                          */
    /*       r(0)*r(1)-r(1)*r(2)           r(0)*r(2)-r(1)**2                  */
    /*  pc1 = ------------------- , pc2 = ----------------- .                 */
    /*        r(0)**2-r(1)**2               r(0)**2-r(1)**2                   */

	L40_sum = 0;
	for(i = 0; i < PIT_COR_LEN; i++)
		L40_sum = L40_mac(L40_sum, lpbuf[i], lpbuf[i]);
	shift = norm32(L40_sum);
	L_temp = (Longword) L40_shl(L40_sum, shift);
	r_coeff[0] = round(L_temp);						/* normalized r0 */
	for (i = 1; i < 3; i++){
		L40_sum = 0;
		for (j = i; j < PIT_COR_LEN; j++)
			L40_sum = L40_mac(L40_sum, lpbuf[j], lpbuf[j-i]);
		L_temp = (Longword) L40_shl(L40_sum, shift);
		r_coeff[i] = round(L_temp);
	}

	/* Now compute pc1 and pc2 */
	if (r_coeff[0] == 0){
		pc1 = 0;
		pc2 = 0;
	} else {
        /* rc1 = r[1] / r[0];								*/
		/* rc2 =(r[2] - rc1 * r[1]) / (r[0] - rc1 * r[1]);	*/
        /* pc1 = rc1 - rc1 * rc2;							*/
        /* pc2 = rc2;										*/
		rc1 = divide_s(r_coeff[1], r_coeff[0]);				/* Q15 */
		temp1 = mult(rc1, r_coeff[1]);						/* Q15 */
		temp2 = sub(r_coeff[0], temp1);
		temp3 = sub(r_coeff[2], temp1);
		temp1 = abs_s(temp3);
		if (temp1 > temp2){
			pc2 = (Shortword) -4096;						/* Q12 */
		} else {
			pc2 = divide_s(temp1, temp2);
			if (temp3 < 0)
				pc2 = negate(pc2);							/* Q15 */
			pc2 = shr(pc2, 3);								/* Q12 */
		}

		temp1 = sub(0x1000, pc2);							/* 1.0 - pc2 */
		pc1 = mult(rc1, pc2);								/* Q12 */
	}

	/* --- inverse filter ---- */
	for (i = 0; i < len; i++){
		/*	ivbuf[i] = lpbuf[i] - pc1 * lpbuf[i - 1] - pc2 * lpbuf[i - 2]; */
		L_temp = L_shl(L_deposit_l(lpbuf[PIT_COR_LEN-len+i]), 13);
		L_temp = L_sub(L_temp, L_mult(pc1, lpbuf[PIT_COR_LEN-len+i-1]));
		L_temp = L_sub(L_temp, L_mult(pc2, lpbuf[PIT_COR_LEN-len+i-2]));
		ivbuf[PIT_COR_LEN-len+i] = round(L_shl(L_temp, 3));
	}
}

/*==============================================================*
 *			corPeak: fill pitTrack structure 					*
 *	inbuf		---- input data buffer (Q12)					*
 *	pitTrack	---- pitch pitTrackParam structure				*
 *	classStat	---- classification paramters					*
 *==============================================================*/
static void corPeak(Shortword inbuf[], pitTrackParam *pitTrack,
											classParam *classStat)
{
	register	Shortword	i, j;
	Shortword	temp, temp1, temp2, shift;
	Shortword	proBuf[PIT_COR_LEN];                                   /* Q15 */
	Longword	L_temp;                                                 /* Q0 */
	Shortword	index[MAXPITCH + 1];
	Shortword	lowStart, highStart;
	Word40		ACC_r0, ACC_rk, ACC_A;         /* Emulating 40Bit-Accumulator */
	Longword	L_r0, L_rk;
	Shortword	r0_shift, rk_shift, root;
	Shortword	gp[MAXPITCH + 1], peak[MAXPITCH + 1], corx[NODE];      /* Q15 */


	/* ------ Remove DC component. ------ */
	remove_dc(inbuf, proBuf, PIT_COR_LEN);

	/* ------ Caculate the autocorrelation function ------- */
	ACC_r0 = 0;
	for (i = 0; i < PIT_COR_LEN - MAXPITCH; i++){
		ACC_r0 = L40_mac(ACC_r0, proBuf[i], proBuf[i]);  /* Q31 */
	}
	if (ACC_r0 == 0)
		ACC_r0 = 1;
	r0_shift = norm32(ACC_r0);
	ACC_r0 = L40_shl(ACC_r0, r0_shift);
	L_r0 = (Longword) ACC_r0;

	ACC_rk = 0;
	for (i = MAXPITCH ; i < PIT_COR_LEN; i++){
		ACC_rk = L40_mac(ACC_rk, proBuf[i], proBuf[i]);  /* Q31 */
	}
	if (ACC_rk == 0)
		ACC_rk = 1;
	rk_shift = norm32(ACC_rk);
	ACC_rk = L40_shl(ACC_rk, rk_shift);
	L_rk = (Longword) ACC_rk;

	ACC_A = 0;
	for (i = 0; i < PIT_COR_LEN - MAXPITCH; i++){
		ACC_A = L40_mac(ACC_A, proBuf[i], proBuf[i+MAXPITCH]); /* Q31 */
	}
	shift = add(r0_shift, rk_shift);
	if (shift & 1){
		L_r0 = L_shr(L_r0, 1);
		r0_shift = sub(r0_shift, 1);
		shift = add(r0_shift, rk_shift);
	}
	shift = shr(shift, 1);
	ACC_A = L40_shl(ACC_A, shift);
	temp = mult(extract_h(L_r0), extract_h(L_rk));
	root = sqrt_Q15(temp);
	L_temp = (Longword) ACC_A;
	temp = extract_h(L_temp);
	if (temp < 0)
		temp = 0; /* Negative Autocorrelation doesn't make sense here */
	gp [MAXPITCH] = divide_s(temp, root); 
	temp = gp[MAXPITCH];

	/* ==== Here comes the Main loop ==== */
	
	lowStart = 0;
	highStart = MAXPITCH;
	for (i = MAXPITCH - 1; i >= MINPITCH; i--){
		if (i % 2 == 0){
			ACC_r0 = L_r0;
			ACC_r0 = L40_shr(ACC_r0, r0_shift);
			ACC_r0 = L40_msu(ACC_r0, proBuf[lowStart], proBuf[lowStart]);
			ACC_r0 = L40_mac(ACC_r0, proBuf[lowStart + PIT_WIN], 
												proBuf[lowStart + PIT_WIN]); 
			if (ACC_r0 == 0)
				ACC_r0 = 1;
			r0_shift = norm32(ACC_r0);
			ACC_r0 = L40_shl(ACC_r0, r0_shift);
			L_r0 = (Longword) ACC_r0;
			lowStart++;
		} else {
			highStart--;
			ACC_rk = L_rk;
			ACC_rk = L40_shr(ACC_rk, rk_shift);
			ACC_rk = L40_mac(ACC_rk, proBuf[highStart], proBuf[highStart]);
			ACC_rk = L40_msu(ACC_rk, proBuf[highStart+PIT_WIN], 
													proBuf[highStart+PIT_WIN]); 
			if (ACC_rk == 0)
				ACC_rk = 1;
			rk_shift = norm32(ACC_rk);
			ACC_rk = L40_shl(ACC_rk, rk_shift);
			L_rk = (Longword) ACC_rk;
		}
		ACC_A = 0;
		for (j = lowStart; j < lowStart + PIT_WIN; j++){
			ACC_A = L40_mac(ACC_A, proBuf[j], proBuf[j+i]);
		}
		shift = add(r0_shift, rk_shift);
		if (shift & 1){
			L_r0 = L_shr(L_r0, 1);
			r0_shift = sub(r0_shift, 1);
			shift = add(r0_shift, rk_shift);
		}
		shift = shr(shift, 1);
		ACC_A = L40_shl(ACC_A, shift);
		temp = mult(extract_h(L_r0), extract_h(L_rk));
		root = sqrt_Q15(temp);
		L_temp = (Longword) ACC_A;
		temp = extract_h(L_temp);
		if (temp < 0)
			temp = 0; /* ignore negative autocorrelation */
		gp [i] = divide_s(temp, root); 
	} /* Main loop ends */

	/* ------ Find the local peak of gp function ------- */
	if (gp[MINPITCH + 1] < gp[MINPITCH]) 
		peak[MINPITCH] = gp[MINPITCH];
	else
		peak[MINPITCH] = 0;

	if (gp[MAXPITCH] > gp[MAXPITCH - 1]) 
		peak[MAXPITCH] = gp[MAXPITCH];
	else	
		peak[MAXPITCH] = 0;

	for (i = MINPITCH + 1; i < MAXPITCH; i++){
		if ((gp[i] > gp[i - 1]) && (gp[i] > gp[i + 1]))
			peak[i] = gp[i];
		else
			peak[i] = 0;
	}

	/* --- Fill in the TRACK struct using the first NODE peaks --- */
	v_zap(index, MAXPITCH + 1);

	for (i = 0; i < NODE; i++){
		temp = MAXPITCH;
		for (j = MAXPITCH - 1; j >= MINPITCH; j--){
			if (peak[j] > peak[temp])
				temp = j;
		}
		index[temp] = (Shortword) (i + 1);
		corx[i] = peak[temp];
		peak[temp] = 0;
		if (i == 0)
			classStat->pitch = temp;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区久久久| 国产亚洲1区2区3区| 久久丁香综合五月国产三级网站| 国产日韩欧美一区二区三区乱码| 色香蕉成人二区免费| 精品一区二区三区蜜桃| 亚洲一区二区综合| 国产精品免费看片| 久久久久久久久蜜桃| 欧美影片第一页| 99精品在线观看视频| 久久国产视频网| 午夜日韩在线电影| 亚洲欧美日韩国产另类专区| 久久精品一区八戒影视| 日韩欧美一级在线播放| 欧美日韩夫妻久久| 日本乱码高清不卡字幕| 风间由美一区二区av101| 美女性感视频久久| 奇米影视在线99精品| 亚洲国产一区二区三区青草影视| 亚洲欧美在线另类| 国产女主播一区| 26uuu久久天堂性欧美| 日韩西西人体444www| 欧美色视频一区| 欧美午夜电影一区| 欧美日韩在线综合| 欧美日韩成人一区二区| 欧美系列亚洲系列| 欧美综合一区二区三区| 色综合久久综合网欧美综合网| 国产suv一区二区三区88区| 极品瑜伽女神91| 国产又黄又大久久| 国产乱码精品一品二品| 激情伊人五月天久久综合| 久久疯狂做爰流白浆xx| 精品亚洲成a人| 国产在线播放一区三区四| 国产精品亚洲一区二区三区妖精 | 欧美高清在线一区二区| 久久噜噜亚洲综合| 国产女主播一区| 国产精品理伦片| 亚洲日本一区二区三区| 亚洲精品视频在线| 亚洲成人一区二区| 日本不卡一区二区三区| 美女视频黄 久久| 国产麻豆视频一区| www.日本不卡| 91久久精品一区二区二区| 欧美色视频一区| 日韩免费高清av| 亚洲国产高清在线| 一区二区三区精品在线观看| 午夜电影久久久| 国产在线精品一区二区不卡了| 国产福利精品导航| 成人理论电影网| 日本高清成人免费播放| 欧美精品第一页| 久久久久久久久久久黄色| 国产精品久久久久久久午夜片| 亚洲伦理在线精品| 日韩电影在线一区二区| 国产不卡视频在线播放| 91九色02白丝porn| 欧美成人在线直播| 国产精品免费aⅴ片在线观看| 亚洲精品乱码久久久久| 免费一级片91| 99视频有精品| 欧美一二三四区在线| 中文字幕欧美日本乱码一线二线| 一区二区三区四区精品在线视频| 美美哒免费高清在线观看视频一区二区| 国产精品18久久久久久久久 | 91九色最新地址| 日韩一区二区三区精品视频| 国产欧美日韩久久| 日韩主播视频在线| 成人精品国产福利| 欧美一卡二卡在线观看| 国产精品国产馆在线真实露脸 | 成人小视频在线| 欧美老女人在线| 国产精品区一区二区三区| 日韩国产欧美三级| 91在线观看污| 亚洲精品一区二区三区99 | 国产精品白丝jk白祙喷水网站| 97久久人人超碰| 日韩视频免费直播| 伊人夜夜躁av伊人久久| 国产麻豆欧美日韩一区| 8x8x8国产精品| 亚洲美女偷拍久久| 国产一区二区三区免费观看| 欧美日韩国产精品成人| 亚洲视频中文字幕| 国产成人综合精品三级| 欧美一区欧美二区| 亚洲综合区在线| 成人av电影免费观看| 精品国偷自产国产一区| 五月激情六月综合| 不卡的av电影在线观看| 26uuu精品一区二区| 日韩电影免费在线看| 91精品中文字幕一区二区三区 | 国内外成人在线| 欧美精品久久天天躁| 一区二区三区四区视频精品免费| 福利一区在线观看| 久久综合狠狠综合久久综合88| 偷拍一区二区三区四区| 欧美在线小视频| 一区二区在线电影| 91丨porny丨蝌蚪视频| 中文字幕av资源一区| 国产成人精品免费网站| 26uuu国产一区二区三区| 久久成人免费网| 欧美大片在线观看| 日本va欧美va欧美va精品| 欧美日韩国产美| 亚洲图片欧美一区| 欧美性猛交xxxxxx富婆| 亚洲二区在线视频| 欧美亚洲愉拍一区二区| 亚洲一区成人在线| 欧美日韩视频不卡| 午夜精品免费在线| 欧美一级淫片007| 精品一区二区三区的国产在线播放 | 国产一区二区影院| 久久夜色精品国产欧美乱极品| 精品影视av免费| 国产性色一区二区| 国产福利一区二区三区视频在线| 久久亚洲精华国产精华液| 国产成人精品免费一区二区| 国产精品免费久久| 91国产免费看| 亚洲国产aⅴ成人精品无吗| 欧美疯狂做受xxxx富婆| 蜜臀国产一区二区三区在线播放 | 欧美日韩国产成人在线免费| 日韩成人午夜精品| 欧美成人女星排名| 风流少妇一区二区| 伊人一区二区三区| 91麻豆产精品久久久久久| 精品视频1区2区3区| 中文av一区特黄| 91蝌蚪porny九色| 亚洲男帅同性gay1069| av一区二区三区在线| 亚洲情趣在线观看| 欧美狂野另类xxxxoooo| 九色|91porny| 国产精品每日更新| 男人的天堂亚洲一区| 精品奇米国产一区二区三区| 国产超碰在线一区| 亚洲国产精品一区二区久久| 欧美一区二区精品久久911| 国产精品乡下勾搭老头1| 亚洲免费观看高清完整版在线观看熊| 欧美日韩国产另类一区| 99久久婷婷国产| 亚洲国产乱码最新视频| 久久一区二区三区国产精品| 91老师片黄在线观看| 久久精品国产第一区二区三区 | 亚洲妇熟xx妇色黄| 国产视频一区二区在线| 在线日韩一区二区| 国产激情偷乱视频一区二区三区 | 五月激情综合婷婷| 欧美国产日韩精品免费观看| 欧美日韩成人在线| 成人av第一页| 久久精品72免费观看| 综合亚洲深深色噜噜狠狠网站| 欧美一卡二卡三卡四卡| 色综合天天性综合| 精品中文字幕一区二区| 伊人一区二区三区| 亚洲国产电影在线观看| 3751色影院一区二区三区| 91网站视频在线观看| 国产一区二区免费视频| 亚洲福中文字幕伊人影院| 国产精品电影一区二区三区| 精品对白一区国产伦| 精品视频在线免费|