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

📄 onset.f

📁 lpc 2400 bps语音编解码程序
💻 F
字号:
*******************************************************************
*
*	ONSET Version 49
*
*******************************************************************
*
*	Floating point version
*

	SUBROUTINE ONSET( PEBUF, OSBUF, OSPTR, OSLEN,
     1                   SBUFL, SBUFH, LFRAME )
	INCLUDE 'config.fh'
	INTEGER OSLEN, SBUFL, SBUFH, LFRAME
	REAL PEBUF(SBUFL:SBUFH)
	INTEGER OSBUF(OSLEN), 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

	INTEGER L2LAG, L2WID, OSHYST, TEMP
	REAL L2
	PARAMETER (L2=1.7, L2LAG=9, L2WID=16, OSHYST=10)
	PARAMETER (TEMP=1+L2WID/2)

	REAL N, D, FPC
	REAL L2BUF(L2WID), L2SUM1, L2SUM2
	INTEGER L2PTR1, L2PTR2, I, LASTI
	LOGICAL HYST

	DATA L2BUF/L2WID*0./, L2PTR1/1/, L2PTR2/TEMP/
	DATA L2SUM1/0./, L2SUM2/0./
	DATA HYST/.FALSE./
	DATA N/0./, D/1./
	SAVE N, D, FPC
	SAVE L2BUF, L2PTR1, L2PTR2, L2SUM1, L2SUM2
	SAVE HYST, LASTI

	IF (HYST) LASTI = LASTI - 180
	DO I = SBUFH-LFRAME+1, SBUFH

*   Compute FPC; Use old FPC on divide by zero; Clamp FPC to +/- 1.
	   N=(PEBUF(I)*PEBUF(I-1)+63.*N) / 64.
	   D=(PEBUF(I-1)**2+63.*D) / 64.
	   IF (D .NE. 0.) THEN
	      IF (ABS(N) .GT. D) THEN
	         FPC = SIGN (1., N)
	      ELSE
	         FPC=N/D
	      END IF
	   END IF
*   Filter FPC
	   L2SUM2 = L2BUF(L2PTR1)
	   L2SUM1 = L2SUM1 - L2BUF(L2PTR2) + FPC
	   L2BUF(L2PTR2) = L2SUM1
	   L2BUF(L2PTR1) = FPC
	   L2PTR1 = MOD(L2PTR1,L2WID)+1
	   L2PTR2 = MOD(L2PTR2,L2WID)+1
	   IF (ABS(L2SUM1-L2SUM2) .GT. L2) THEN
	      IF (.NOT. HYST) THEN
*   Ignore if buffer full
	         IF (OSPTR .LE. OSLEN) THEN
	            OSBUF (OSPTR) = I - L2LAG
	            OSPTR = OSPTR + 1
	         END IF
	         HYST = .TRUE.
	      END IF
	      LASTI = I
	   ELSE IF (HYST .AND. I - LASTI .GE. OSHYST) THEN
	      HYST = .FALSE.
	   END IF
	END DO
	RETURN
	END

⌨️ 快捷键说明

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