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

📄 onset.c

📁 语音LPC压缩算法源代码(C语音)
💻 C
字号:
/*********************************************************************	ONSET Version 49**********************************************************************	Floating point version*/#include "config.ch"#include "lpcdefs.h"#include <math.h>onset( pebuf, osbuf, osptr)float pebuf[];int osbuf[], *osptr;{/*   Detection of onsets in (or slightly preceding) the futuremost frame*   of speech.*   Arguments*    PEBUF	Preemphasized speech*    OSBUF	Buffer which holds sorted indexes of onsets (Modified)*    OSPTR	Free pointer into OSBUF (Modified)*   Parameters for onset detection algorithm:*    L2		Threshold for filtered slope of FPC (function of L2WID!)*    L2LAG	Lag due to both filters which compute filtered slope of FPC*    L2WID	Width of the filter which computes the slope of FPC*    OSHYST	The number of samples which of slope(FPC) which must be below*	        the threshold before a new onset may be declared.*   Variables*    N, D       Numerator and denominator of prediction filters*    FPC        Current prediction coefs*    L2BUF, L2SUM1, L2SUM2    State of slope filter*/int l2lag=9, l2wid=16, oshyst=10;float l2=1.7;static float n=0., d=1., fpc;static float l2buf[16], l2sum1=0., l2sum2=0.;static int l2ptr1=1, l2ptr2=9, lasti;int i;static short hyst=0;static short first=1;if (hyst) lasti -= 180;for(i=SBUFH-LFRAME+1; i<=SBUFH;i++)  {/*   Compute FPC; Use old FPC on divide by zero; Clamp FPC to +/- 1.	*/   n=(pebuf[i]*pebuf[i-1]+63.*n) * 0.015625;   d=(pebuf[i-1]*pebuf[i-1]+63.*d) * 0.015625;   if (d != 0.) {      if ((float)fabs((double)n) > d) {         /*fpc = sign(1., n);*/	fpc = (n<0)?-1.:1.;      }      else         fpc=n/d;   }/*   Filter FPC	*/   l2sum2 = l2buf[l2ptr1-1];   l2sum1 = l2sum1 - l2buf[l2ptr2-1] + fpc;   l2buf[l2ptr2-1] = l2sum1;   l2buf[l2ptr1-1] = fpc;   l2ptr1 = (l2ptr1%l2wid)+1;   l2ptr2 = (l2ptr2%l2wid)+1;   if ((float)fabs((double)(l2sum1-l2sum2)) > l2) {        if (!hyst) { /*   Ignore if buffer full	*/         if (*osptr <= OSLEN) {             osbuf[*osptr] = i - l2lag;            *osptr = *osptr + 1;         }          hyst = 1;      }       lasti = i;   }   else  if (hyst && i - lasti >= oshyst) {       hyst = 0;   } } /* end while */}

⌨️ 快捷键说明

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