📄 onset.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 + -