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

📄 cpdi.h

📁 CP detector (CPD) only reports the onset and removal of a tone. The analysis of timing (if required)
💻 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 _cpdi_h 
#define _cpdi_h 

#include "stddefs.h"
#include "cpd_miket.h"

/*--------------------- local defs ------------------------------------*/

#define	CPD_ST_IDLE  		(0)
#define	CPD_ST_MAYBE        (1)
#define	CPD_ST_TONE		    (2)
#define	CPD_ST_GOOD_TONE    (3)
#define	CPD_ST_ABORT		(4)
#define	CPD_ST_MAX		    (5)

/* bandpass filtering */
#define CPD_BP_DR           (10)
#define CPD_BP_FSZ   	    (60)
#define CPD_BP_HSZ  	    (CPD_BP_FSZ/2)
#define CPD_BP_SSZ   	    (CPD_BP_FSZ-CPD_BP_DR)
#define CPD_BP_ASZ   	    (CPD_BP_SSZ+ICPD_FR_SZ)

//#define CPD_DR         	(20) /* decimation ratio */
//#define CPD_2KDR       	(2)
//#define CPD_BPDR       	(10)

/* periodogram analysis */
#define CPD_PG_DR           (4)
#define CPD_PG_FSZ   	    (56)
#define CPD_PG_HSZ   	    (CPD_PG_FSZ/2)
#define CPD_PG_SSZ   	    (CPD_PG_FSZ-ICPD_FR_SZ/CPD_BP_DR)
#define CPD_PG_ASZ   	    (CPD_PG_FSZ)

#define CPD_EN_SZ       	(8)

#define CPD_MASK_DUAL      (1<<0)
#define CPD_MASK_MAX_EN    (1<<1)
#define CPD_MASK_RS_EDGE   (1<<2)
#define CPD_MASK_FL_EDGE   (1<<3)

#define CPD_MASK_LO_STABLE (1<<4)
#define CPD_MASK_HI_STABLE (1<<5)
#define CPD_MASK_TWIST     (1<<6)
#define CPD_MASK_CLEAN     (1<<7)

#define CPD_MASK_LO_OK     (1<<8)
#define CPD_MASK_HI_OK     (1<<9)
#define CPD_MASK_SAME_DGT  (1<<10)
#define CPD_MASK_CLEAN_MB  (1<<11)

#define CPD_MASK_SINGLE    (1<<12)
#define CPD_MASK_SINGLE_MB (1<<13)

#define CPD_EN_BP          ((S16)(170*5.0))
#define CPD_EN_PG          ((S16)(170*7.5))

#define CPD_FREQS           (5)

/* statistics */
typedef struct CPD_tStts {

    Int sLoEn;  /* average energy in dBm*170, for low freq comp */
    Int sLoErr; /* average frequency deviation in Hz *170, for low freq comp */
    Int sHiEn;
    Int sHiErr;
    
} CPD_tStts;


typedef struct CPD_tElem {

    S16 sCpred;
    S16 sSpred;
    S16 sDist;
    S16 sErr;
    S16 sEn;

} CPD_tElem;

typedef struct CPD_tOutSav {

    S16 sC;
    S16 sS;
} CPD_tOutSav;

typedef struct CPD_tOut {

    S16 sC;
    S16 sS;
    S32 slEn;

} CPD_tOut;

typedef struct CPD_tSc {

    CPD_tOut aOut[CPD_FREQS];
    S32 aslEnSort[CPD_FREQS];
    S32 slBpEn;

    CPD_tElem Lo;
    CPD_tElem Hi;

    S16 sBpEn;
    S16 sSumEn;

    S16 asBpData[CPD_BP_ASZ];  
	S16 asPgIData[CPD_PG_ASZ];  
	S16 asPgQData[CPD_PG_ASZ];  
	
	/* Sum shall be followed by Dif */
    S16 asPgISum[CPD_PG_HSZ];
    S16 asPgIDif[CPD_PG_HSZ];
    S16 asPgQSum[CPD_PG_HSZ];
    S16 asPgQDif[CPD_PG_HSZ];

    S16 sMaxIdx;
    S16 sNextIdx;
    S16 sRestIdx;
    S16 sMaxEn;
    S16 sNextEn;
    S16 sRestEn;

    S16 sLoIdx;
    S16 sHiIdx;

    S16 sTestFailed;
    S16 sDigit;

} CPD_tSc;

typedef struct CPD_tDbv
{
	S16 sState;				
    S16 sDigit;             
	S16 sFrCntr;
    S16 sAvrEn;
//    S16 sLastFrEn;
//    S16 sPrevFrEn;

	S16 asSumEn[CPD_EN_SZ];         /* 6w frame energy history */

} CPD_tDbv;   /*  words */


typedef struct CPD_tDb /*  words */
{
    const ICPD_tCfg *pCfg;              /* 2 */
    CPD_tOutSav aOutSav[CPD_FREQS];				/* 12 */
	S16 asBpDataSav[CPD_BP_SSZ]; 		/* 70 */
	S16 asPgIDataSav[CPD_PG_SSZ]; 	/* 12 */
	S16 asPgQDataSav[CPD_PG_SSZ]; 	/* 12 */
    CPD_tStts Stts;				/* 4 */
	CPD_tDbv v;                  		/* 12 */

    S16 sIsOn;                   		/* 1 */

} CPD_tDb;                       


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

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

extern const S16 CPD_aaDigit[5][6];

/*--------------------- local functions -------------------------------*/
extern S16  cpd_en2log(S32 slEn, S16 sCorr);
extern void cpd_avrg(S16 *psOld, S16 sNew, S16 sCoef);

extern void cpd_move_data_in (CPD_tDb *pDb, CPD_tSc *pSc, S16 *psIn);

extern void cpd_filter_bp    (CPD_tSc *pSc);
extern void cpd_sum_sub      (CPD_tSc *pSc);
extern void cpd_filter_pg    (CPD_tSc *pSc);
extern void cpd_sort_freqs   (CPD_tSc *pSc);
extern void cpd_get_lohi     (CPD_tDb *pDb, CPD_tSc *pSc);

extern void cpd_get_elem_data(CPD_tDb *pDb, CPD_tSc *pSc, 
                              CPD_tElem *pElem,
                              S16 sIdx);

extern void cpd_test         (CPD_tDb *pDb, CPD_tSc *pSc);
extern void cpd_move_data_out(CPD_tDb *pDb, CPD_tSc *pSc);

extern void cpd_update_statistics(CPD_tDb *pDb, CPD_tSc *pSc);

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

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

#endif  /* _cpd_h */

⌨️ 快捷键说明

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