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

📄 demo.cpp

📁 TI公司DSP/tms320c55x/tms320c54x系列的声学回声消除代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
        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                                            */

/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
#define DUMP_MODE 4
/* ------------------------------------------------------------------- */
void                    _dump_vars
/* ------------------------------------------------------------------- */
(
)
{
#if 0
    fprintf(_Control.pTmpFile, "%f %f %f %f %f %f\n", 
        _LecDb.VadTx.sEn/170.1,
        _LecSc.sRxEn/170.1,
        _LecDb.VadErr.sEn/170.1,
        GAEC_pkt_energy(_asRxOut)/170.1,
        _LecSc.sErle/170.1,
        -(_LecDb.Adf2.sMSE/170.1)
        );
#endif

#if (DUMP_MODE == 1)
	fprintf(_Control.pTmpFile, "%f\n", _dTCLw);
#elif (DUMP_MODE == 2)
    for (int blk = 0; blk < GAEC_BLKS; blk++)
    {
        int iRcv = GAEC_RCV_SZ-GAEC_BLKS+blk;
        fprintf(_Control.pTmpFile, "%d %d \n", 
            _GaecDb.psRcv[GAEC_RCV_SZ*(           1) + iRcv], 
            _GaecDb.psRcv[GAEC_RCV_SZ*(GAEC_BANDS+1) + iRcv]);
    }
#elif (DUMP_MODE == 3)
    fprintf(_Control.pTmpFile, "%f\n", _GaecDb.sEpcXcr/170.1);
#elif (DUMP_MODE == 4)
	fprintf(_Control.pTmpFile, "%f %f %f %f %f %f\n", 
			gaec_utl_pkt_energy(_asTxIn)/170.1,
			gaec_utl_pkt_energy(_asRxIn)/170.1,
			gaec_utl_pkt_energy(_asCnl)/170.1,
			gaec_utl_pkt_energy(_asTxOut)/170.1,
			gaec_utl_pkt_energy(_asRxOut)/170.1,
			_dTCLw);
#else
#endif
}

/* ------------------------------------------------------------------- */
void                    _dump_wav
/* ------------------------------------------------------------------- */
(
)
{
    static S16 aTmp[IGAEC_FR_SZ];
    S16 k;

    for (k = 0; k < IGAEC_FR_SZ; k++) aTmp[k] = _asTxIn[k] << 2;
    fwrite(aTmp, sizeof(S16), IGAEC_FR_SZ, _Control.pTxWavFile);

    for (k = 0; k < IGAEC_FR_SZ; k++) aTmp[k] = _asTxOut[k] << 2;
    fwrite(aTmp, sizeof(S16), IGAEC_FR_SZ, _Control.pTxOutWavFile);

    for (k = 0; k < IGAEC_FR_SZ; k++) aTmp[k] = _asRxIn[k] << 2;
    fwrite(aTmp, sizeof(S16), IGAEC_FR_SZ, _Control.pRxWavFile);

    for (k = 0; k < IGAEC_FR_SZ; k++) aTmp[k] = _asCnl[k] << 2;
    fwrite(aTmp, sizeof(S16), IGAEC_FR_SZ, _Control.pCnlWavFile);

    for (k = 0; k < IGAEC_FR_SZ; k++) aTmp[k] = _asRxOut[k] << 2;
    fwrite(aTmp, sizeof(S16), IGAEC_FR_SZ, _Control.pNlpWavFile);

    _WavHdr.ulLen1 += 80;
    _WavHdr.ulLen3 += 80;
}

/* ------------------------------------------------------------------- */
void                    _dump_filters
/* ------------------------------------------------------------------- */
(
)
{
	rewind(_Control.pAdfFile);
//	if (_Frame % 100 == 0)
	if (_Frame % 200 == 0)
	{
//        double fDiv = double(1<<_LecDb.Adf1.sShift);
        double fDiv = 1.;//double(1<<_LecDb.Adf2.sShift);

//		fprintf(gControl.pDbgFile, "\n--- frame %ld\n", Frame);
		for(int i = 0; i < GAEC_ADF_SZ; i++)
		{
            int k;
            for (k = 0; k < GAEC_BANDS; k++)
            {
				fprintf(_Control.pAdfFile,"%+012.5g ",
                    _GaecDb.psAdf[k*GAEC_ADF_SZ*2+i*2+0]/32767.);
            }
            for (k = 0; k < GAEC_BANDS; k++)
            {
				fprintf(_Control.pAdfFile,"%+012.5g ",
                    _GaecDb.psAdf[k*GAEC_ADF_SZ*2+i*2+1]/32767.);
            }
			fprintf(_Control.pAdfFile,"\n");
		}
	}
}

/* ------------------------------------------------------------------- */
void                        plot_band
/* ------------------------------------------------------------------- */
(
S16 *p,
int size,
int x,
int y,
int amp,
S16 fMax,
int color
)
{
	int t,k;

	bar(x, y-amp, x+size, y+amp+10);
    cline(x, y,x+size, y, color);

	set_color(DARKGRAY);
	for (k = 0; k <= (size+1)/IGAEC_FR_SZ; k++)
	{
		line(k*IGAEC_FR_SZ+x,y-amp,k*IGAEC_FR_SZ+x,y+amp);
	}
	line(x, y-amp, x+size, y-amp);
	line(x, y+amp, x+size, y+amp);
	line(x+size, y-amp, x+size, y+amp);

	set_color(color);


	if (fMax > 0)
	{
    	double f = amp /(fMax + _EPS);
		for (k = 0; k < size; k++)
		{
			t = (int)(f * p[k]);
            line(k+x, y, k+x, y-t);
		}
	}
}
/* ------------------------------------------------------------------- */
void                        plot_band_adf
/* ------------------------------------------------------------------- */
(
S16 *p,
S16 *psSav,
int x,
int y,
int amp,
int color
)
{
	int t,k;
    int iMax;
	S16 asNew[GAEC_ADF_SZ*2];


    iMax = 0;
    for (k = 0; k < GAEC_ADF_SZ*2; k++)
	{
        int x = p[k];
        x = (x > 0) ? x : -x;
        iMax = (iMax > x) ? iMax : x;
    }

	if (iMax > 0)
	{
		U16 uChanged = FALSE;
    	double f = (amp - 3)/(double(iMax) + _EPS);
		for (k = 0; k < GAEC_ADF_SZ*2; k++)
		{
			t = (int)(f * p[k]);
			asNew[k] = (S16)(p[k] * f);
			if (asNew[k] != psSav[k])
				uChanged = TRUE;
		}
		if (uChanged)
		{
			for (k = 0; k < GAEC_ADF_SZ*2; k++)
			{
				psSav[k] = asNew[k];
			}
			bar(x, y-amp, x+GAEC_ADF_SZ, y+amp+1);

			set_color(DARKGRAY);
			line(x, y,x+GAEC_ADF_SZ, y);
			for (k = 0; k <= (GAEC_ADF_SZ+1)/IGAEC_FR_SZ; k++)
			{
				line(k*IGAEC_FR_SZ+x,y-amp,k*IGAEC_FR_SZ+x,y+amp);
			}
			line(x, y-amp, x+GAEC_ADF_SZ, y-amp);
			line(x, y+amp, x+GAEC_ADF_SZ, y+amp);
			line(x+GAEC_ADF_SZ, y-amp, x+GAEC_ADF_SZ, y+amp);

			set_color(color);
			for (k = 0; k < GAEC_ADF_SZ; k++)
			{
				line(k+x, y-3, k+x, y-psSav[k]-3);
				line(k+x, y+3, k+x, y-psSav[GAEC_ADF_SZ*2-1-k]+3);
			}
		    val_out(x+GAEC_ADF_SZ-70, y-amp, color, "%-6d", iMax);
		}
	}
}
/* ------------------------------------------------------------------- */
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);

	set_color(DARKGRAY);
	for (k = 0; k <= (size+1)/IGAEC_FR_SZ; k++)
	{
		line(k*IGAEC_FR_SZ+x,y-amp,k*IGAEC_FR_SZ+x,y+amp);
	}
	line(x, y-amp, x+size, y-amp);
	line(x, y+amp, x+size, y+amp);
	line(x+size, y-amp, x+size, 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);
		}
	}

    if (pTitle)
    {
	    val_out(x-70, y-amp, color, "%s %-6d", pTitle, iMax);
    }

	return iMax;
}

/* ------------------------------------------------------------------- */
int                         plot_outp
/* ------------------------------------------------------------------- */
(
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 = p[k]; 
		if(t > iMax) iMax = t;
	}
	bar(x, y-amp, x+size, y+amp+10);

	set_color(DARKGRAY);
	for (k = 0; k <= (size+1)/IGAEC_FR_SZ; k++)
	{
		line(k*IGAEC_FR_SZ+x,y-amp,k*IGAEC_FR_SZ+x,y+amp);
	}
	line(x, y-amp,   x+size, y-amp);
	line(x, y-amp/2, x+size, y-amp/2);
    line(x, y,       x+size, y);
	line(x, y+amp,   x+size, y+amp);
	line(x, y+amp/2, x+size, y+amp/2);
	line(x+size, y-amp, x+size, y+amp);

	set_color(color);

	f = 2*amp /((double(iMax) + _EPS));

	if (iMax > 0)
	{
		for (k = 0; k < size; k++)
		{
			t = (int)(f * p[k]);
            line(k+x, y+amp, k+x, y+amp-t);
		}
	}

    if (pTitle)
    {
	    val_out(x-30, y, color, "%-2d", iMax);
    }

	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)/IGAEC_FR_SZ; k++)
	{
		line(k*IGAEC_FR_SZ+x,y-amp,k*IGAEC_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++)
	{
		_asEchoS16[k] = S16(_afEcho[k]*32767.0);
	}

	plot_out(_asEchoS16, ECHO_SZ, XADF, YADF, YWIN, "  ECHO", RED);

    val_out(XT0, YT0, WHITE,    "ERR %d", Err);
    val_out(XT0, YT1, WHITE,    "gr_mode %d", _Control.iGmode);
    val_out(XT0, YT2, LIGHTRED, "RxCorr  %f", _Control.fRxCorr);
    val_out(XT0, YT3, LIGHTRED, "TxCorr  %f", _Control.fTxCorr);
    val_out(XT0, YT4, LIGHTRED, "RxDelay %d", _Control.iRxDelay);
    val_out(XT0, YT5, LIGHTRED, "TxDelay %d", _Control.iTxDelay);
    val_out(XT0, YT6, LIGHTBLUE, "AddRxDelay %d", _Control.iAddRxDelay);
    val_out(XT0, YT7, LIGHTBLUE, "AddRxBypass %d", _Control.iAddRxBypass);

⌨️ 快捷键说明

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