📄 demo.cpp
字号:
Rc = 1;
} /* end-of-if */
else
{
if (_Control.fBypass > 0)
{
for (long i = 0; i < _Control.fBypass * 8000; i++)
{
S16 x;
fscanf(_Control.pInTxFile, "%d", &x);
if (i%8000 == 0)
{
val_out(0,0, WHITE, "second %ld ", (i+1)/8000);
}
}
}
}
}
else if (str_cmp("TX_BIN", &pArg) == 0)
{
_Control.pInTxBin = fopen(pArg+1, "rb");
if ( _Control.pInTxBin == NULL )
{
Rc = 1;
} /* end-of-if */
else
{
long i;
S16 x;
for (i = 0; i < sizeof(tWavHdr)/sizeof(x); i++)
{
fread(&x,sizeof(x),1,_Control.pInTxBin);
}
if (_Control.fBypass > 0)
{
for (i = 0; i < _Control.fBypass * 8000; i++)
{
fread(&x,sizeof(x),1,_Control.pInTxBin);
if (i%8000 == 0)
{
val_out(0,0, WHITE, "second %ld ", (i+1)/8000);
}
}
}
}
}
else if (str_cmp("RX_BIN", &pArg) == 0)
{
_Control.pInRxBin = fopen(pArg+1, "rb");
if ( _Control.pInRxBin == NULL )
{
Rc = 1;
} /* end-of-if */
else
{
long i;
S16 x;
for (i = 0; i < sizeof(tWavHdr)/sizeof(x); i++)
{
fread(&x,sizeof(x),1,_Control.pInRxBin);
}
if (_Control.fBypass > 0)
{
for (i = 0; i < _Control.fBypass * 8000; i++)
{
fread(&x,sizeof(x),1,_Control.pInRxBin);
}
}
}
}
else if (str_cmp("ECHO_FILE", &pArg) == 0)
{
FILE *pFile = fopen(pArg+1, "r");
if ( pFile == NULL )
{
Rc = 10;
}
else
{
int i;
for (i = 0; i < ECHO_SZ; i++)
{
if (fscanf(pFile, "%f", &fTmp) == 1)
{
_afEcho[i] = fTmp;
}
else
{
break;
}
}
fclose(pFile);
} /* end-of-if */
}
else if (str_cmp("REPLACE_RX", &pArg) == 0)
{
if (sscanf(pArg, "%d", &iTmp) != 1)
{
Rc = 2;
}
else
{
_Control.iReplaceRx = iTmp;
}
}
else if (str_cmp("ADD_REFLECTIONS", &pArg) == 0)
{
if (sscanf(pArg, "%d", &iTmp) != 1)
{
Rc = 2;
}
else
{
_Control.iAddReflections = iTmp;
}
}
else if (str_cmp("TX_CORR", &pArg) == 0)
{
if (sscanf(pArg, "%f", &fTmp) != 1)
{
Rc = 2;
}
else
{
_Control.fTxCorr = pow(10., fTmp/20.);
}
}
else if (str_cmp("RX_CORR", &pArg) == 0)
{
if (sscanf(pArg, "%f", &fTmp) != 1)
{
Rc = 2;
}
else
{
_Control.fRxCorr = pow(10., fTmp/20.);
}
}
else if (str_cmp("TX_DELAY", &pArg) == 0)
{
if (sscanf(pArg, "%f", &fTmp) != 1)
{
Rc = 2;
}
else
{
_Control.iTxDelay = int(fTmp*8 + 0.5);
}
}
else if (str_cmp("GTXSIGNAL", &pArg) == 0)
{
if (sscanf(pArg, "%f", &fTmp) != 1)
{
Rc = 2;
}
else
{
_Gen.fTxLevel = LEV0 * pow (10.0, fTmp/20.0);
}
}
else if (str_cmp("GTXNOISE", &pArg) == 0)
{
if (sscanf(pArg, "%f", &fTmp) != 1)
{
Rc = 2;
}
else
{
_Gen.fTxNoise = LEV0 * pow (10.0, fTmp/20.0);
}
}
else if (str_cmp("RX_DELAY", &pArg) == 0)
{
if (sscanf(pArg, "%f", &fTmp) != 1)
{
Rc = 2;
}
else
{
_Control.iRxDelay = int(fTmp*8 + 0.5);
}
}
else if (str_cmp("GRXSIGNAL", &pArg) == 0)
{
if (sscanf(pArg, "%f", &fTmp) != 1)
{
Rc = 2;
}
else
{
_Gen.fRxLevel = LEV0 * pow (10.0, fTmp/20.0);
}
}
else if (str_cmp("GRXNOISE", &pArg) == 0)
{
if (sscanf(pArg, "%f", &fTmp) != 1)
{
Rc = 2;
}
else
{
_Gen.fRxNoise = LEV0 * pow (10.0, fTmp/20.0);
}
}
else if (str_cmp("GWORDLEN", &pArg) == 0)
{
if (sscanf(pArg, "%f", &fTmp) != 1)
{
Rc = 2;
}
else
{
_Gen.fWordLen = fTmp;
}
}
else if (str_cmp("GPAUSELEN", &pArg) == 0)
{
if (sscanf(pArg, "%f", &fTmp) != 1)
{
Rc = 2;
}
else
{
_Gen.fPauseLen = fTmp;
}
}
else if (str_cmp("GSENTENCELEN", &pArg) == 0)
{
if (sscanf(pArg, "%f", &fTmp) != 1)
{
Rc = 2;
}
else
{
_Gen.liSentenceLen = long(fTmp);
}
}
else if (str_cmp("GSTATE", &pArg) == 0)
{
if (sscanf(pArg, "%d", &iTmp) != 1)
{
Rc = 2;
}
else
{
_Gen.iState = iTmp;
}
}
else if (str_cmp("GDOUBLETALK", &pArg) == 0)
{
if (sscanf(pArg, "%f", &fTmp) != 1)
{
Rc = 2;
}
else
{
_Gen.fDoubleTalk = fTmp;
}
}
else
{
Rc = 3;
}
} /* end of if */
else
{
// that's a comment
}
return Rc;
}
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
/* O U T P U T */
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
/* ------------------------------------------------------------------- */
void _dump_vars
/* ------------------------------------------------------------------- */
(
)
{
fprintf(_Control.pTmpFile, "%f %f %f %f %f %f\n",
_LecSc.sTxEn/170.1,
_LecSc.sRxEn/170.1,
_LecDb.VadErr.sEn/170.1,
lec_en2log(lec_pkt_energy(_asRxOut))/170.1,
_LecSc.sErle/170.1,
-(_LecDb.Adf2.sMSE/170.1)
);
}
/* ------------------------------------------------------------------- */
void _dump_out
/* ------------------------------------------------------------------- */
(
)
{
static S16 aTmp[ILEC_FR_SZ];
S16 k;
for (k = 0; k < ILEC_FR_SZ; k++)
{
aTmp[k] = _asRxOut[k] << 2;
}
fwrite(aTmp, sizeof(S16), ILEC_FR_SZ, _Control.pPcmFile);
}
/* ------------------------------------------------------------------- */
void _dump_wav
/* ------------------------------------------------------------------- */
(
)
{
static S16 aTmp[ILEC_FR_SZ];
S16 k;
for (k = 0; k < ILEC_FR_SZ; k++) aTmp[k] = _asRxOut[k] << 2;
fwrite(aTmp, sizeof(S16), ILEC_FR_SZ, _Control.pNlpWavFile);
for (k = 0; k < ILEC_FR_SZ; k++) aTmp[k] = _asRxIn[k] << 2;
fwrite(aTmp, sizeof(S16), ILEC_FR_SZ, _Control.pRxWavFile);
for (k = 0; k < ILEC_FR_SZ; k++) aTmp[k] = _asTx[k] << 2;
fwrite(aTmp, sizeof(S16), ILEC_FR_SZ, _Control.pTxWavFile);
for (k = 0; k < ILEC_FR_SZ; k++) aTmp[k] = _asCnl[k] << 2;
fwrite(aTmp, sizeof(S16), ILEC_FR_SZ, _Control.pCnlWavFile);
_WavHdr.ulLen1 += 80;
_WavHdr.ulLen3 += 80;
}
/* ------------------------------------------------------------------- */
void _dump_filters
/* ------------------------------------------------------------------- */
(
)
{
rewind(_Control.pAdfFile);
// if (_Frame % 100 == 0)
if (_Frame % (1000/5) == 0)
{
// double fDiv = double(1<<_LecDb.Adf1.sShift);
double fDiv = double(1<<_LecDb.Adf2.sShift);
// fprintf(gControl.pDbgFile, "\n--- frame %ld\n", Frame);
for(int i = 0; i < ADF_SZ; i++)
{
fprintf(_Control.pAdfFile,"%+07.5f\n",
// _LecDb.psFlt1[i+ILEC_FR_SZ]/32767.0/fDiv);
_LecDb.asAdf2[i+ILEC_FR_SZ]/32767.0/fDiv);
}
}
}
/* ------------------------------------------------------------------- */
int plot_out
/* ------------------------------------------------------------------- */
(
S16 *p,
int size,
int x,
int y,
int amp,
char *pTitle,
int color
)
{
int iMax = 0;
int t;
double f;
for(int k=0; k < size; k++)
{
t = abs(p[k]);
if(t > iMax) iMax = t;
}
bar(x, y-amp, x+size, y+amp+10);
cline(x, y,x+size, y, color);
val_out(x, y+amp, color, "%s %-6d", pTitle, iMax);
set_color(DARKGRAY);
for (k = 0; k <= (size+1)/ILEC_FR_SZ; k++)
{
line(k*ILEC_FR_SZ+x,y-amp,k*ILEC_FR_SZ+x,y+amp);
}
set_color(color);
f = amp /((double(iMax) + EPS));
if (iMax > 0)
{
for (k = 0; k < size; k++)
{
t = (int)(f * p[k]);
line(k+x, y, k+x, y-t);
}
}
return iMax;
}
/* ------------------------------------------------------------------- */
int plot_out32
/* ------------------------------------------------------------------- */
(
S32 *p,
int size,
int x,
int y,
int amp,
char *pTitle,
int color
)
{
S32 iMax = 0;
S32 t;
double f;
for(int k=0; k < size; k++)
{
t = abs(p[k]);
if(t > iMax) iMax = t;
}
bar(x, y-amp, x+size, y+amp+10);
val_out(x, y+amp, color, "%s %-6ld", pTitle, iMax);
set_color(DARKGRAY);
for (k = 0; k <= (size+1)/ILEC_FR_SZ; k++)
{
line(k*ILEC_FR_SZ+x,y-amp,k*ILEC_FR_SZ+x,y+amp);
}
set_color(color);
f = amp /((double(iMax) + EPS));
if (iMax > 0)
{
for (k = 0; k < size; k++)
{
t = (int)(f * p[k]);
line(k+x, y, k+x, y-t);
}
}
return iMax;
}
/* ------------------------------------------------------------------- */
void graphic_init
/* ------------------------------------------------------------------- */
(
int Err
)
{
int k;
float fMax = 0.0;
float fReflection = 0;
set_color(WHITE);
line(X0, YG, XM, YG);
for (k = 0; k < 9; k++)
{
int y = int(YG+(YV/(YDBMAX-YDBMIN))*(10*k+YDBMAX));
val_out(0, y-8, BROWN, "%d", -k*10);
cline(X0, y, XM, y, DARKGRAY);
}
for (k = 0; k < 6; k++)
{
int y = int(YGH+(YVH/(YDHMAX-YDHMIN))*(10*k+YDHMAX));
val_out(0, y-8, BROWN, "%d", -k*10);
cline(X0, y, XM, y, DARKGRAY);
}
for (k = 1; k < 12; k++)
{
val_out(X0+50*k-20, YG+YV+5, DARKGRAY, "%5.2f", k*0.25);
cline(X0+50*k, YG+YV, X0+50*k, YG+YV+10, LIGHTGRAY);
}
for (k = 0; k < ECHO_SZ; k++)
{
if(fabs(_afEcho[k]) > fMax)
{
fMax = float(fabs(_afEcho[k]));
}
fReflection += _afEcho[k]*_afEcho[k];
}
_fReflection = fReflection;
val_out(XADF, 0, RED, "ERL %5.2f", -10.0*log10(fReflection+EPS));
for(k = 0; k < ECHO_SZ; k++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -