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

📄 tbdm.c

📁 语音LPC压缩算法源代码(C语音)
💻 C
字号:
/*************************************************************************	TBDM Version 49*************************************************************************  TURBO DIFMAG: Compute High Resolution Average Magnitude Difference Function** Inputs:*  SPEECH - Low pass filtered speech*  LPITA  - Length of speech buffer*  TAU    - Table of lags*  LTAU   - Number of lag values to compute* Outputs:*  AMDF   - Average Magnitude Difference for each lag in TAU*  MINPTR - Index of minimum AMDF value*  MAXPTR - Index of maximum AMDF value within +/- 1/2 octave of min*  MINTAU - Lag corresponding to minimum AMDF value*/#include "lpcdefs.h"tbdm( speech, tau, amdf, minptr, maxptr, mintau )float speech[], amdf[];int *minptr, *maxptr, *mintau, tau[];{int minamd;int i, ptr, ltau2, minp2, maxp2;float amdf2[6];static int tau2[6];static int count=0;/*	REAL SPEECH(LPITA+TAU(LTAU)), AMDF(LTAU), AMDF2(6)/*   Compute full AMDF using log spaced lags, find coarse minimum	*/difmag(speech, tau, LTAU, tau[LTAU], amdf, minptr, maxptr );*mintau = tau[*minptr];minamd = amdf[*minptr];/*   Build table containing all lags within +/- 3 of the AMDF minimum*    excluding all that have already been computed	*/ltau2 = 0;ptr = *minptr - 2;for(i=mmax(*mintau-3,41); i<=mmin(*mintau+3,tau[LTAU]); i++)	{	while( tau[ptr] < i )	{		ptr++;	}	if( tau[ptr] !=i) {		ltau2++;		tau2[ltau2-1] = i;	}}/*   Compute AMDF of the new lags, if there are any, and choose one*    if it is better than the coarse minimum	*/if( ltau2 > 0 ) {    difmag(speech, &tau2[0]-1, ltau2, tau[LTAU], &amdf2[0]-1, &minp2, &maxp2);		if( amdf2[minp2-1] < minamd ) {		*mintau = tau2[minp2-1];		minamd = amdf2[minp2-1];	}}/*   Check one octave up, if there are any lags not yet computed	*/if( *mintau >= 80 ) {	i = *mintau*0.5;	if( (i & 1) == 0 ) {		ltau2 = 2;		tau2[0] = i-1;		tau2[1] = i+1;	}	else	{		ltau2 = 1;		tau2[0] = i;	}    difmag(speech, &tau2[0]-1, ltau2, tau[LTAU], &amdf2[0]-1, &minp2, &maxp2 );		if( amdf2[minp2-1] < minamd ) {		*mintau = tau2[minp2-1];		minamd = amdf2[minp2-1];		*(minptr) -= 20;	}}/*   Force minimum of the AMDF array to the high resolution minimum	*/	amdf[*minptr] = minamd;	/*   Find maximum of AMDF within 1/2 octave of minimum	*/*maxptr = mmax(*minptr-5,1);for(i=*maxptr+1; i<= mmin(*minptr+5,LTAU); i++)	{	if( amdf[i] > amdf[*maxptr]) *maxptr = i;}}

⌨️ 快捷键说明

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