📄 demo.cpp
字号:
/*-------------------------------------------------------------------------*
* *
* THIS IS AN UNPUBLISHED WORK CONTAINING CONFIDENTIAL AND PROPRIETARY *
* INFORMATION. IF PUBLICATION OCCURS, THE FOLLOWING NOTICE APPLIES: *
* "COPYRIGHT 2001 MICHAEL TSIROULNIKOV, ALL RIGHTS RESERVED" *
* *
*-------------------------------------------------------------------------*/
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#define M_PI 3.14159265
#include "sim.h"
#include "stddefs.h"
#include "gaeci.h"
#include "spbpf.h"
#include "stdafx.h"
#include <mmsystem.h>
/*--------------------- local defs ----------------------------------------*/
#define _GR_FR (200*0)
#define IN_MODE (0)
#define LEV0 (4096.0)
#define _EPS (1.0e-8)
#define ECHO_SZ (500*8)
#define _HST_SZ (GAEC_FR_SZ*8)
#define _SOUT_SZ (_HST_SZ - GAEC_FBS_SZ+10)
#define _ROUT_SZ (_HST_SZ - GAEC_FBS_SZ+10)
#define GAEC_MAX (8158)
#define X0 (20)
#define DX (1)
#define FR_MAX (200*3)
#define XM (X0+FR_MAX*DX)
#define YCC (619)
#define YCM (80)
#define XADFE (XM - GAEC_ADF_SZ)
#define XEN (XM+45)
#define XADF (XEN+203)
#define XHST (XADF+2*GAEC_ADF_SZ+8)
#define XSND (XHST+2*GAEC_RCV_SZ+8)
#define XERR (XSND+2*GAEC_SND_SZ+8)
#define YADF (60)
#define YWIN (40)
#define YSIGWIN (22)
#define YSIG (24)
#define XSIG (70)
#define YDLT (2*((YWIN)+1))
#define DYEN (1.5)
#define DYAD (2.75)
#define YRCVEN (23)
#define YADFE (10)
#define XT (XADF+210)
#define YTA 75
#define YDBMAX (+6.0)
#define YDBMIN (-80.0)
#define YG (465)
#define YV (86*3)
#define YDHMAX (+6.0)
#define YDHMIN (-50.0)
#define YGH (245)
#define YVH (56*2)
#define XTD (120)
#define XT0 (10)
#define XT1 (XT0+XTD)
#define XT2 (XT1+XTD)
#define XT3 (XT2+XTD)
#define XT4 (XT3+XTD)
#define XTM (XT4+XTD)
#define YTD (20)
#define YT0 (745)
#define YT1 (YT0+YTD)
#define YT2 (YT1+YTD)
#define YT3 (YT2+YTD)
#define YT4 (YT3+YTD)
#define YT5 (YT4+YTD)
#define YT6 (YT5+YTD)
#define YT7 (YT6+YTD)
#define YT8 (YT7+YTD)
typedef struct tControl
{
double fBypass;
int iGmode;
double fRxCorr;
double fTxCorr;
int iRxDelay;
int iTxDelay;
int iReplaceRx;
int iAddReflections;
double fAddPinkNoise;
double fAddTxQNoise;
double fAddRxQNoise;
int iAddRxDelay;
int iAddRxBypass;
double fAddRxCorr;
FILE *pAddRxTrxFile;
FILE *pAddRxTxFile;
FILE *pInTrxFile;
FILE *pInTxFile;
FILE *pInRxFile;
FILE *pInTxBinFile;
FILE *pInRxBinFile;
FILE *pAdfFile;
FILE *pTmpFile;
FILE *pRespFile;
FILE *pNlpWavFile;
FILE *pCnlWavFile;
FILE *pTxWavFile;
FILE *pTxOutWavFile;
FILE *pRxWavFile;
} tControl;
typedef struct tGen {
double fRxNoise;
double fRxLevel;
double fTxNoise;
double fTxLevel;
double fWordLen;
double fPauseLen;
double fDoubleTalk;
long liSentenceLen;
int iBeginFrom;
int iState;
long liStateCntr;
long liCurrWord;
int iDirection;
} tGen;
typedef struct {
char acRiff[4];
U32 ulLen1;
char acWave[4];
char acFmt[4];
U32 ulLen2;
U16 uMode;
U16 uNumber;
U32 ulFs;
U32 ulBps;
U16 uBytes;
U16 uBits;
char acData[4];
U32 ulLen3;
} tWavHdr;
/*--------------------- public vars ---------------------------------------*/
U16 DEMO_StepMode;
/*--------------------- local vars ----------------------------------------*/
U16 _uIsSeriaOver;
static char _aBuff[81];
tGen _Gen;
tControl _Control;
tWavHdr _WavHdr;
static int _aiColor[10] =
{
RED, GREEN,
3 , 3 +(2<<2), 3 +(3<<2), 3 +(3<<2) + 0x20,
48, 48+(2<<2), 48+(3<<2), 48+(3<<2) + 0x02,
};
long _Frame;
long _lStartFrame;
double _fReflection;
S16 _asRinHst [_HST_SZ];
S16 _asRoutHst [_ROUT_SZ];
S16 _asSinHst [_HST_SZ];
S16 _asSoutHst [_SOUT_SZ];
S16 _asCnlHst [_SOUT_SZ];
S16 _asRx [IGAEC_FR_SZ];
S16 _asTx [IGAEC_FR_SZ];
S16 _asTxIn [IGAEC_FR_SZ];
S16 _asTxOut [IGAEC_FR_SZ];
S16 _asRxIn [IGAEC_FR_SZ];
S16 _asRxOut [IGAEC_FR_SZ];
S16 _asEchoTx [ECHO_SZ+3*IGAEC_FR_SZ];
float _afEcho [ECHO_SZ];
S16 _asEchoS16 [ECHO_SZ];
double _aasAdf [GAEC_BANDS*2][GAEC_ADF_SZ];
S16 _asHst [GAEC_BANDS*2*GAEC_RCV_SZ];
S16 _asAdfBuff [GAEC_BANDS*2*GAEC_ADF_SZ];
S16 _asAdfMBuf [GAEC_BANDS*2*GAEC_ADF_SZ];
S16 _asTmp [512];
S16 _aasAdfEn [GAEC_BANDS+1][GAEC_ADF_SZ-GAEC_BLKS];
double _dTCLv;
double _dTCLw;
double _dTCLwa;
GAEC_MIKET_tStts _GaecStts;
GAEC_tDb _GaecDb;
GAEC_tSc _GaecSc;
//IGAEC_tCfg _LecCfg;
IGAEC_Status _GAEC_Status;
extern "C" GAEC_tScRcv _GaecScRcv;
extern "C" GAEC_tScEpc _GaecScEpc;
extern "C" S16 _asCnl [GAEC_FR_SZ];
extern "C" S16 _asNr [GAEC_FR_SZ];
extern "C" U16 _auCopyAdf [GAEC_BANDS+1];
extern "C" S16 _asErr0EnC [GAEC_BANDS+1];
SPBPF_tDb _SpBpfDb;
SPBPF_tSc _SpBpfSc;
char *_acOn[] =
{
"off",
"on"
};
char *aVad[] =
{
"IDLE",
"PRE",
"ACTIVE",
"HANGOVER"
};
int st_x;
/*--------------------- local functions -----------------------------------*/
void dump_results(void);
/*-------------------------------------------------------------------------*/
static void _err
/*-------------------------------------------------------------------------*/
(
int no,
int line,
char *pStr
)
{
val_out(400, 0, LIGHTRED, "ERR %d : %s (line %d)", no, pStr, line);
}
/*-------------------------------------------------------------------------*/
void gaec_adf_energy
/*-------------------------------------------------------------------------*/
(
GAEC_tDb *pDb
)
{
int band;
for (band = 0; band < GAEC_BANDS+1; band++)
{
S16 *psAdf = &pDb->psAdf[band*GAEC_ADF_SZ*2];
int idx;
if (band == GAEC_BANDS)
psAdf = &pDb->psAdf[1];
for (idx = 0; idx < GAEC_ADF_SZ-GAEC_BLKS; idx++)
{
S32 ac0 = 0;
int blk;
for (blk = 0; blk < GAEC_BLKS; blk++)
{
S16 x = psAdf[(idx+blk)*2];
ac0 += x * (S32)x;
if ((band != 0) && (band != GAEC_BANDS))
{
x = x = psAdf[(idx+blk)+2+1];
ac0 += x * (S32)x;
}
}
_aasAdfEn[band][idx] = gaec_utl_en2log(ac0);
}
}
}
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
/* I N P U T , G E N E R A T O R */
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
S16 _limit
/*-------------------------------------------------------------------------*/
(
double f
)
{
S16 s = (S16)(f+0.5);
if (f > GAEC_MAX)
{
s = GAEC_MAX;
}
if (f < -GAEC_MAX)
{
s = -GAEC_MAX;
}
return s;
}
/*-------------------------------------------------------------------------*/
void _add_rx_corr
/*-------------------------------------------------------------------------*/
(
)
{
int k;
for (k = 0; k < IGAEC_FR_SZ; k++)
{
_asRx[k] = _limit(_asRx[k] * _Control.fRxCorr);
}
}
/*-------------------------------------------------------------------------*/
void _add_tx_corr
/*-------------------------------------------------------------------------*/
(
)
{
int k;
for (k = 0; k < IGAEC_FR_SZ; k++)
{
_asTx[k] = _limit(_asTx[k] * _Control.fTxCorr);
}
}
/*-------------------------------------------------------------------------*/
void _add_tx_delay
/*-------------------------------------------------------------------------*/
(
)
{
static S16 __asTxDelay[1000];
int k;
if (_Control.iTxDelay != 0)
{
for (k = 0; k < _Control.iTxDelay; k++)
{
__asTxDelay[k] = __asTxDelay[k + GAEC_FR_SZ];
}
for (k = 0; k < GAEC_FR_SZ; k++)
{
__asTxDelay[_Control.iTxDelay+k] = _asTx[k];
}
for (k = 0; k < GAEC_FR_SZ; k++)
{
_asTx[k] = __asTxDelay[k];
}
}
}
/*-------------------------------------------------------------------------*/
void _add_rx_delay
/*-------------------------------------------------------------------------*/
(
)
{
static S16 __asRxDelay[1000];
int k;
if (_Control.iRxDelay != 0)
{
for (k = 0; k < _Control.iRxDelay; k++)
{
__asRxDelay[k] = __asRxDelay[k + GAEC_FR_SZ];
}
for (k = 0; k < GAEC_FR_SZ; k++)
{
__asRxDelay[_Control.iRxDelay+k] = _asRx[k];
}
for (k = 0; k < GAEC_FR_SZ; k++)
{
_asRx[k] = __asRxDelay[k];
}
}
}
/*-------------------------------------------------------------------------*/
void _read_rx_bin
/*-------------------------------------------------------------------------*/
(
)
{
int k;
int Read;
int Tries = 0;
Read = fread(_asRx, sizeof(S16), IGAEC_FR_SZ, _Control.pInRxBinFile);
if (Read != IGAEC_FR_SZ)
{
DEMO_StepMode = TRUE;
rewind(_Control.pInRxBinFile);
for(k = 0; k < IGAEC_FR_SZ; k++) _asRx[k] = 0;
}
}
/*-------------------------------------------------------------------------*/
void _read_tx_bin
/*-------------------------------------------------------------------------*/
(
)
{
int k;
int Read;
int Tries = 0;
Read = fread(_asTx, sizeof(S16), IGAEC_FR_SZ, _Control.pInTxBinFile);
if (Read != IGAEC_FR_SZ)
{
DEMO_StepMode = TRUE;
rewind(_Control.pInTxBinFile);
for(k = 0; k < IGAEC_FR_SZ; k++) _asTx[k] = 0;
}
}
/*-------------------------------------------------------------------------*/
void _read_tx_txt
/*-------------------------------------------------------------------------*/
(
)
{
int k;
for (k = 0; k < IGAEC_FR_SZ; k++)
{
int Read;
int Tries = 0;
do
{
int iTx;
Read = fscanf(_Control.pInTxFile, "%d", &iTx);
if (Read != EOF)
{
_asTx[k] = iTx;
}
else /* end of file, rewind */
{
rewind(_Control.pInTxFile);
}
if (++Tries == 5)
{
exit(15);
}
}
while (Read != 1);
}
}
/*-------------------------------------------------------------------------*/
void _read_rx_txt
/*-------------------------------------------------------------------------*/
(
)
{
int k;
for (k = 0; k < IGAEC_FR_SZ; k++)
{
int Read;
int Tries = 0;
do
{
int iRx;
Read = fscanf(_Control.pInRxFile, "%d", &iRx);
if (Read != EOF)
{
_asRx[k] = iRx;
}
else /* end of file, rewind */
{
rewind(_Control.pInRxFile);
}
if (++Tries == 5)
{
exit(15);
}
}
while (Read != 1);
}
}
/*-------------------------------------------------------------------------*/
void _read_trx_txt
/*-------------------------------------------------------------------------*/
(
)
{
static int Cntr = 0;
static char aBuffer[81];
if (Cntr == 0)
{
int k;
for (k = 0; k < IGAEC_FR_SZ; k++)
{
int iRx = 0;
int iTx = 0;
int Tries = 0;
char *p = fgets(aBuffer, 80, _Control.pInTrxFile);
if (p != NULL)
{
sscanf(aBuffer, "%d %d", &iTx, &iRx);
_asTx[k] = iTx;
_asRx[k] = iRx;
}
else /* end of file, rewind */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -