📄 demo.cpp
字号:
}
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 + -