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

📄 dtmfi.h

📁 Express DSP compliant C55x DTMF detector software is proposed in two versions: one with a 5 ms frame
💻 H
字号:
/*---------------------------------------------------------------------*
 *                                                                     *
 * THIS IS AN UNPUBLISHED WORK CONTAINING CONFIDENTIAL AND PROPRIETARY *
 * INFORMATION.  IF PUBLICATION OCCURS, THE FOLLOWING NOTICE APPLIES:  *
 *     "COPYRIGHT 2001 MICHAEL TSIROULNIKOV, ALL RIGHTS RESERVED"      *
 *                                                                     *
 *---------------------------------------------------------------------*/
#ifndef _dtmfi_h 
#define _dtmfi_h 

#include "dtmf_miket.h"

#ifndef TRUE
#define TRUE  (1)
#endif

#ifndef FALSE
#define FALSE (0)
#endif

#if ! defined (_std_defs_)
#define _std_defs_
typedef unsigned short U16;
typedef short S16;
typedef unsigned long  U32;
typedef long S32;
#endif
/*--------------------- local defs ------------------------------------*/
#define	DTMF_ST_IDLE  		(0)
#define	DTMF_ST_MAYBE       (1)
#define	DTMF_ST_TONE		(2)
#define	DTMF_ST_GOOD_TONE	(3)
#define	DTMF_ST_END			(4)
#define	DTMF_ST_ABORT		(5)
#define	DTMF_ST_MAX			(6)



#define DTMF_2KFLT_SZ   	(19)
#define DTMF_2KFLT_HSZ  	(5)

#define DTMF_DR         	(10) /* decimation ratio */
#define DTMF_2KDR       	(2)
#define DTMF_BPDR       	(5)

#define DTMF_BPFR_SZ    	(IDTMF_FR_SZ/DTMF_2KDR)
#define DTMF_DFR_SZ     	(IDTMF_FR_SZ/DTMF_DR)

#define DTMF_BPFLT_SZ   	(31)
#define DTMF_LO_DFT_SZ  	(12)
#define DTMF_LOSD_SZ    	((DTMF_LO_DFT_SZ-DTMF_DFR_SZ)*2)
#define DTMF_HI_DFT_SZ  	(8)
#define DTMF_HISD_SZ    	((DTMF_HI_DFT_SZ-DTMF_DFR_SZ)*2)

#define DTMF_MASK_MIN_EN    (1<<0)
#define DTMF_MASK_SUM_EN    (1<<1)
#define DTMF_MASK_RS_EDGE   (1<<2)
#define DTMF_MASK_FL_EDGE   (1<<3)

#define DTMF_MASK_STABLE    (1<<4)
#define DTMF_MASK_2K_BOUND  (1<<5)
#define DTMF_MASK_FWD_TWIST (1<<6)
#define DTMF_MASK_REV_TWIST (1<<7)

#define DTMF_MASK_ENERGY    (0x00ff)

#define DTMF_MASK_LO_PART   (1<<8)
#define DTMF_MASK_LO_CLEAN  (1<<9)
#define DTMF_MASK_LO_INRANGE (1<<10)
#define DTMF_MASK_SAME_FRQ  (1<<11)

#define DTMF_MASK_HI_PART   (1<<12)
#define DTMF_MASK_HI_CLEAN  (1<<13)
#define DTMF_MASK_HI_INRANGE (1<<14)

#define DTMF_MASK_SPECTRUM  (0x7f00)

typedef struct DTMF_tStats {
    S16 sEn;
    S16 sLoEn;
    S16 sHiEn;
    S16 sLoFreqDev;
    S16 sHiFreqDev;

} DTMF_tStats;

typedef struct DTMF_tSc { 
#if (IDTMF_FR_SZ != 80)
    S32 slFrameEn;   
#endif
    S32 slLoBpEn;
    S32 slHiBpEn;
    S32 slDialEn;
    S16 asLoMainEn[4];
    S16 asLoDevEn[4];
    S16 asHiMainEn[4];
    S16 asHiDevEn[4];
	S16 as2kData[IDTMF_FR_SZ+DTMF_2KFLT_SZ];  /* 40+19 */
	S16 asBpData[IDTMF_FR_SZ/2+DTMF_BPFLT_SZ];/* 20+31 */
	S16 asLoData[DTMF_LO_DFT_SZ*2];         /* 12*2 */
	S16 asHiData[DTMF_HI_DFT_SZ*2];         /* 8*2 */
	
    S16 sLoBpEn;
    S16 sLoMaxFreqEn;
    S16 sLoNextEn;
    S16 sLoFreqNo;
    S16 sLoFreqDev;
    S16 sHiBpEn;
    S16 sHiMaxFreqEn;
    S16 sHiNextEn;
    S16 sHiFreqNo;
    S16 sHiFreqDev;
    S16 s2kEnDlt;
    S16 sSumEn;                             /* 8 */
    S16 sSumDialEn;
#if (IDTMF_FR_SZ == 80)
    S16 sDialEn;
    S16 sFrameEn;
#else
#endif
    S16 sTestFailed;
    S16 sDigit;
} DTMF_tSc;

typedef struct DTMF_tDbv
{
#if (IDTMF_FR_SZ == 80)
#else
    S32 slDialEn;
    S32 slFrameEn;
#endif
	S16 sState;				/* state of DTMF state machine */
    S16 sLastDigit;         /* low + high*4 */
	S16 sGood;				/* good frame counter */
	S16 sBad;				/* bad frame counter */
	S16 asSumEn[6];         /* 6w frame energy history */
#if (IDTMF_FR_SZ == 80)
#else
    S16 sZFrameEn;
#endif
    DTMF_tStats Stat;       /* 5w */
} DTMF_tDbv;   /* 20 words */


typedef struct DTMF_tDb /* 92 words */
{
	DTMF_tDbv v;                    /* 20 */
    const IDTMF_tCfg *pCfg;         /* 2 */
    S16 sIsOff;                     /* 1 */
	S16 as2kDataSav[DTMF_2KFLT_SZ]; /* 19 */
	S16 asBpDataSav[DTMF_BPFLT_SZ]; /* 31 */
	S16 asLoDataSav[DTMF_LOSD_SZ];  /* 16 */
#if (IDTMF_FR_SZ != 80)
	S16 asHiDataSav[DTMF_HISD_SZ];  /* 8 */
#endif
} DTMF_tDb;                       


/*--------------------- public vars- ----------------------------------*/

/*--------------------- local vars ------------------------------------*/

extern const S16 dtmf_aLoBpI[];
extern const S16 dtmf_aHiBpI[];
extern const S16 dtmf_aDialI[];
extern const S16 dtmf_aLoBpQ[];
extern const S16 dtmf_aHiBpQ[];
extern const S16 dtmf_aDialQ[];
extern const S16 dtmf_aLo[];
extern const S16 dtmf_aHi[];
extern const S16 dtmf_a697[];
extern const S16 dtmf_a770[];
extern const S16 dtmf_a852[];
extern const S16 dtmf_a941[];
extern const S16 dtmf_a1209[];
extern const S16 dtmf_a1336[];
extern const S16 dtmf_a1477[];
extern const S16 dtmf_a1633[];

/*--------------------- local functions -------------------------------*/
extern S16  dtmf_en2log(S32 slEn);
extern void dtmf_filter_test (DTMF_tDb *pDb, DTMF_tSc *pSc, S16 *psIn);

/*--------------------- public  functions -----------------------------*/

/*---------------------------------------------------------------------*/

#endif  /* _dtmfi_h */

⌨️ 快捷键说明

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