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

📄 demo.cpp

📁 CP detector (CPD) only reports the onset and removal of a tone. The analysis of timing (if required)
💻 CPP
📖 第 1 页 / 共 4 页
字号:
			}
            else
            {
				_CpdCfg.sMinEnThr = dbs(Tmp);
            }
		}
        else if (str_cmp("DNOISETHR", &pArg) == 0)
		{
			if (sscanf(pArg, "%f", &Tmp) != 1)
			{
                Rc = 2;
			}
            else
            {
				_CpdCfg.sNoiseThr = dbs(Tmp);
            }
		}
        else if (str_cmp("DSTABLETHR", &pArg) == 0)
		{
			if (sscanf(pArg, "%f", &Tmp) != 1)
			{
                Rc = 2;
			}
            else
            {
				_CpdCfg.sStableThr = dbs(Tmp);
            }
		}
        else if (str_cmp("DCLEANTHR", &pArg) == 0)
		{
			if (sscanf(pArg, "%f", &Tmp) != 1)
			{
                Rc = 2;
			}
            else
            {
				_CpdCfg.sCleanThr = dbs(Tmp);
            }
		}
        else if (str_cmp("DMAXFREQDEVTHR", &pArg) == 0)
		{
			if (sscanf(pArg, "%f", &Tmp) != 1)
			{
                Rc = 2;
			}
            else
            {
				_CpdCfg.sMaxFreqDevThr = (S16)(170.1*Tmp);
            }
		}
        else if (str_cmp("DNORMSHIFT", &pArg) == 0)
		{
			if (sscanf(pArg, "%d", &iTmp) != 1)
			{
                Rc = 2;
			}
            else
            {
				_CpdCfg.sNormShift = S16(iTmp);
            }
		}
        else if (str_cmp("DMINTONEDURATION", &pArg) == 0)
		{

			if (sscanf(pArg, "%d", &iTmp) != 1)
			{
                Rc = 2;
			}
            else
            {
				_CpdCfg.sMinToneDuration = S16(iTmp);
            }
		}
        else if (str_cmp("DMINENDDURATION", &pArg) == 0)
		{

			if (sscanf(pArg, "%d", &iTmp) != 1)
			{
                Rc = 2;
			}
            else
            {
				_CpdCfg.sMinEndDuration = S16(iTmp);
            }
		}
        else if (str_cmp("DABORTTIMEOUT", &pArg) == 0)
		{
			if (sscanf(pArg, "%d", &iTmp) != 1)
			{
                Rc = 2;
			}
            else
            {
				_CpdCfg.sAbortTimeout = S16(iTmp);
            }
		}
        else
	    {
		    Rc = 3;
	    }
    } /* end of if */
    else
    {
        // that's a comment
    }
    return Rc;
}

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

/*                  O U T P U T                                            */

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


/*-------------------------------------------------------------------------*/
void                        dump_results
/*-------------------------------------------------------------------------*/
(
)
{
    if (_Control.pOutFile != NULL)
    {
#if 0
        fprintf(_Control.pOutFile, 
            "F1=%4d[%4.1f]; F2=%4d[%4.1f]: end=%3d; start=%3d; abort=%3d\n", 
            _Gen.sFLo,
            _Gen.fLoDev*100.,
            _Gen.sFHi,
            _Gen.fHiDev*100.,
            _Stat.sEnd,
            _Stat.sStart,
            _Stat.sAbort
            );
#else
        fprintf(_Control.pOutFile, 
            "%5d %5d %5d\n", 
            _Stat.sEnd,
            _Stat.sStart,
            _Stat.sAbort
            );

#endif
    }
    _Stat.sLastStart = _Stat.sStart;
    _Stat.sEnd = 0;
    _Stat.sStart = 0;
    _Stat.sAbort = 0;
}


/* ------------------------------------------------------------------- */
void                    graphic_init
/* ------------------------------------------------------------------- */
(
int Err
)
{
    val_out(XT6, YT0, WHITE, "ERR %d", Err);
    val_out(XT7, YT0, WHITE, "delay %6.2f", _Control.fDelay);

    val_out(XT0, YT1, LIGHTRED, "PreSilenceDur  %d", _Gen.iPreSilenceDuration);
    val_out(XT0, YT2, LIGHTRED, "SignalDur      %d", _Gen.iSignalDuration);
    val_out(XT0, YT3, LIGHTRED, "PostSilenceDur %d", _Gen.iPostSilenceDuration);

    val_out(XT2, YT1, LIGHTCYAN, "MaxDev %6.2f", _Gen.fFreqDevMax);
    val_out(XT2, YT2, LIGHTCYAN, "freqSteps %d", _Gen.iFreqSteps);
    val_out(XT2, YT3, LIGHTCYAN, "SameMax %d", _Gen.iSameCntrMax);
    val_out(XT2, YT4, LIGHTCYAN, "ToneCntr %d", _Gen.iToneCntr);
    val_out(XT2, YT5, LIGHTCYAN, "ToneInc %d", _Gen.iToneInc);

    val_out(XT4, YT1, WHITE, "dbg file: %p", _Control.pDbgFile);
    val_out(XT4, YT2, WHITE, "in file : %p", _Control.pInFile);
    val_out(XT4, YT3, WHITE, "out file: %p", _Control.pOutFile);


    val_out(XT6, YT1, LIGHTGREEN, "RxHi %d", _Gen.iRxHiLevel);
    val_out(XT6, YT2, LIGHTGREEN, "RxLo %d", _Gen.iRxLoLevel);
    val_out(XT6, YT3, LIGHTGREEN, "RxNo %d", _Gen.iRxNoise);

    val_out(XT7, YT1, LIGHTBLUE, "L1  %d", _Gen.Rev.iLevel1);
    val_out(XT7, YT2, LIGHTBLUE, "L2  %d", _Gen.Rev.iLevel2);
    val_out(XT7, YT3, LIGHTBLUE, "F1  %d", _Gen.Rev.iFreq1);
    val_out(XT7, YT4, LIGHTBLUE, "F2  %d", _Gen.Rev.iFreq2);
    val_out(XT7, YT5, LIGHTBLUE, "PRE %d", _Gen.Rev.iPreSilenceDuration);
    val_out(XT7, YT6, LIGHTBLUE, "SIG %d", _Gen.Rev.iSignalDuration);
    val_out(XT7, YT7, LIGHTBLUE, "POS %d", _Gen.Rev.iPostSilenceDuration);


}

/*-------------------------------------------------------------------------*/
void                    plt_x
/*-------------------------------------------------------------------------*/
(
int x, 
int dx, 
int y, 
S16 *pData, 
int Sz, 
double Norm, 
int color
)
{
    set_color(color);
    for (int k = 0; k < Sz; k++)
    {
        int d1 = int(pData[k-1]*Norm);
        int d0 = int(pData[k-0]*Norm);
        line(x, y-d1, x+dx, y-d0);
        x+= dx;
    }
}



double dbl(S16 in)
{
    double en = in/170.1;
    if (en < YEDBMIN) en = YEDBMIN;
    if (en > YEDBMAX) en = YEDBMAX;
    return en;
}
/*-------------------------------------------------------------------------*/
void                    plot_results
/*-------------------------------------------------------------------------*/
(
)
{
    CPD_tDb *pDb = &_CpdDb;
    CPD_tSc *pSc = &_CpdSc;

	int k;
    double afNew[10];
    int x;
    int clr;

    static int sOldState = 0;
    int iStateChange = 0;
    
    if (pDb->v.sState != sOldState)
    {
        sOldState = pDb->v.sState;
        iStateChange = TRUE;
    }

	/* plot curr packet */
    if ((_Control.iGmode & 0x1) == 0)
	{

		double Norm = YIA/(double(_Gen.iRxLoLevel+
                                  _Gen.iRxHiLevel+
                                  _Gen.Rev.iLevel1+
                                  _Gen.Rev.iLevel2+1)*2);
//		double Norm = 0.5*YIA/8159.0;
		x = X0 + (_Frame%IFR_MAX) * ICPD_FR_SZ;

// prepare
		bar(x+1, YI-YIA-2, x+ICPD_FR_SZ+ICPD_FR_SZ/2, YI+YIA+2);
        cline(x+ICPD_FR_SZ+1, YI-YIA, x+ICPD_FR_SZ+1, YI+YIA, LIGHTRED);

        cline(x+ICPD_FR_SZ,YI-YIA,x+ICPD_FR_SZ, YI+YIA, LIGHTGRAY); 
        cline(x, YI, x+ICPD_FR_SZ, YI, LIGHTGRAY);
        cline(x, YI-YIA, x+ICPD_FR_SZ, YI-YIA, LIGHTGRAY);
        cline(x, YI+YIA, x+ICPD_FR_SZ, YI+YIA, LIGHTGRAY);
        cline(x, YI-YIA/2, x+ICPD_FR_SZ, YI-YIA/2, LIGHTGRAY);
        cline(x, YI+YIA/2, x+ICPD_FR_SZ, YI+YIA/2, LIGHTGRAY);
        // the newest data, this is RxIn
//        plt_x(x, 1,  YI, &_aRx[1], ICPD_FR_SZ,Norm*0.75, BLUE);

        plt_x(x, 1,  YI, &pSc->asBpData[CPD_BP_SSZ-1],ICPD_FR_SZ,Norm, WHITE);

        plt_x(x, 10, YI-YIA/2, &pSc->asPgIData[CPD_PG_SSZ-1],ICPD_FR_SZ/10,Norm, GREEN);
        plt_x(x, 10, YI-YIA/2, &pSc->asPgQData[CPD_PG_SSZ-1],ICPD_FR_SZ/10,Norm, RED);

//#define NUM (0)
        {
            static S16 sC0 = 0;
            static S16 sS0 = 0;
            S16 sC1 = pSc->aOut[pSc->sLoIdx].sC;
            S16 sS1 = pSc->aOut[pSc->sLoIdx].sS;

            cline(x,    YI+YIA/2-int(sC0*Norm), 
                  x+40, YI+YIA/2-int(sC1*Norm),LIGHTBLUE);
            cline(x,    YI+YIA/2-int(sS0*Norm), 
                  x+40, YI+YIA/2-int(sS1*Norm),YELLOW);

            sC0 = sC1;
            sS0 = sS1;
        }

        if (pDb->v.sState == CPD_ST_GOOD_TONE)
        {
            cline(x, YI, x+ICPD_FR_SZ, YI, YELLOW);
        }

	}

    x = X0 + (_Frame % EDFR_MAX)*DX;

	/* plot Energy for current Packet */
    if ((_Control.iGmode & 0x2) == 0)
    {
        static int __aiLast[9];
        int t;
// prepare for drawing
        /* row 5 --------------------------------------------- */
        bar(XT0, YT7, XTM, YT7+YTD);

        bar(XE1, YE0-YEDBMAX*DBE2PX, XE1+100, YE0-YEDBMIN*DBE2PX);
        bar(x+1, YE0-YEDBMAX*DBE2PX, x+4*DX,  YE0-YEDBMIN*DBE2PX);
        cline(x+DX+1, YE0-YEDBMAX*DBE2PX, x+DX+1, YE0 - YEDBMIN*DBE2PX, LIGHTRED);

        if (iStateChange) 
            cline(x,YE0-YEDBMAX*DBE2PX, x, YE0 - YEDBMIN*DBE2PX, DARKGRAY);

        set_color(DARKGRAY);
        for (k = 0; k < -YEDBMIN/10+1; k++)
        {
            line(x+1,  YE0+DBE2PX*10*k,  x+DX, YE0+DBE2PX*10*k); 
            line(XE1,  YE0+DBE2PX*10*k,  XE1+100, YE0+DBE2PX*10*k); 
        }
// set data arrays and draw
        afNew[0] = dbl(pSc->sBpEn);
        afNew[1] = dbl(pSc->sSumEn);
        for (k = 0; k < CPD_FREQS; k++)
        {
            afNew[k+2] = dbl(cpd_en2log(pSc->aOut[k].slEn,CPD_EN_PG));
        }
        afNew[CPD_FREQS+2] = dbl(pDb->v.sAvrEn);

        for (k = 0; k < CPD_FREQS+1; k++)
        {
            val_out(XT0+k*XTD, YT7, _aiColor[k+2], "En%d: %7.2f", 
                k, afNew[k+2]);
        }

        for (k = 0; k < CPD_FREQS+3; k++)
        {
            t = int(afNew[k]*DBE2PX);

            cline(x, YE0-__aiLast[k], x+DX, YE0-t, _aiColor[k]);

            cline(XE1+k*10,   YE0-t, XE1+k*10,   YE0-YEDBMIN*DBE2PX, _aiColor[k]);
            cline(XE1+k*10+1, YE0-t, XE1+k*10+1, YE0-YEDBMIN*DBE2PX, _aiColor[k]);
            cline(XE1+k*10+2, YE0-t, XE1+k*10+2, YE0-YEDBMIN*DBE2PX, _aiColor[k]);

            __aiLast[k] = t;
        }
    }

    if ((_Control.iGmode & 0x4) == 0)
    {
        static int __aiLast[8];
        int aiNew[8];

// prepare for drawing
        /* row 6 --------------------------------------------- */
        bar(XT0, YT8, XTM, YT8+YTD);
        bar(XE1, YD0-DBD2PX*DM5-2, XE1+100, YD0+DBD2PX*DM5+2);
        bar(x+1, YD0-DBD2PX*DM5-2, x+DX*4,  YD0+DBD2PX*DM5+2);

        cline(x+DX+1,YD0-DBD2PX*DM5-2,x+DX+1,YD0+DBD2PX*DM5+2, LIGHTRED);

        cline (x+1,YD0, x+DX, YD0, LIGHTGRAY); 
        set_color(DARKGRAY);
        for (k=1; k < DM5+1;k++)
        {
            line (x+1,YD0-DBD2PX*k, x+DX, YD0-DBD2PX*k); 
            line (x+1,YD0+DBD2PX*k, x+DX, YD0+DBD2PX*k); 

            line (XE1,YD0-DBD2PX*k, XE1+100, YD0-DBD2PX*k); 
            line (XE1,YD0+DBD2PX*k, XE1+100, YD0+DBD2PX*k); 
        }

        if (iStateChange) 
            cline(x, YD0-DBD2PX*DM5, x, YD0+DBD2PX*DM5, DARKGRAY);

        for (k = 2; k < CPD_FREQS+2; k++)
        {
            double dEn  = pSc->aOut[k-2].slEn;
            double dDlt = 0;

            if ((k-2) == pSc->sLoIdx) dDlt = pSc->Lo.sErr/170.1;
            if ((k-2) == pSc->sHiIdx) dDlt = pSc->Hi.sErr/170.1;

            dDlt = dDlt/10.0;

            if (dDlt > 1.0) dDlt = 1.0;
            if (dDlt < -1.0) dDlt = -1.0;

            val_out(XT0 + XTD*(k-2), YT8, _aiColor[k], "Er%d %6.2f", 
                k-2, dDlt*10.0);
            aiNew[k] = int(dDlt*DBD2PX*DM5);

        }

        aiNew[0] = int(DBD2PX*(pDb->Stts.sLoErr/170.1)*0.5);
        if (aiNew[0] > DBD2PX*DM5) aiNew[0] = DBD2PX*DM5;
        if (aiNew[0] < -DBD2PX*DM5) aiNew[0] = -DBD2PX*DM5;
        aiNew[1] = int(DBD2PX*(pDb->Stts.sHiErr/170.1)*0.5);
        if (aiNew[1] > DBD2PX*DM5) aiNew[1] = DBD2PX*DM5;
        if (aiNew[1] < -DBD2PX*DM5) aiNew[1] = -DBD2PX*DM5;

        for (k = 0; k < CPD_FREQS+2; k++)
        {
            if (((k-2) == pSc->sLoIdx) || 
                ((k-2) == pSc->sHiIdx) ||
                (k == 0) ||
                (k == 1))
            {
                cline(x, YD0-__aiLast[k], x+DX, YD0-aiNew[k], _aiColor[k]);
            }

            cline(XE1+10*k,   YD0-aiNew[k], XE1+10*k,  YD0, _aiColor[k]);
            cline(XE1+10*k+1, YD0-aiNew[k], XE1+10*k+1,YD0, _aiColor[k]);
            cline(XE1+10*k+2, YD0-aiNew[k], XE1+10*k+2,YD0, _aiColor[k]);
            __aiLast[k] = aiNew[k];

        }
    }

⌨️ 快捷键说明

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