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