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

📄 demo.cpp

📁 TI公司DSP/tms320c55x/tms320c54x系列的声学回声消除代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    }
    else
    {
//        _make_input();
        _make_input2();
    }

#endif

    _add_tx_corr();
    _add_rx_corr();

    if (_Control.iReplaceRx)
    {
        for (k = 0; k < IGAEC_FR_SZ; k++) 
        {
            _asRx[k] = 0;
        }
		_add_reflections();
        iReflectionAdded = TRUE;
    }
	else if (_Control.iAddReflections)
    {
		_add_reflections();
        iReflectionAdded = TRUE;
    }
    _add_pink_noise();
    if (!iReflectionAdded)
        _add_tx_delay();
    _add_rx_delay();

	_add_rx_trx_txt();

}



/*-------------------------------------------------------------------------*/
S16                     dbs
/*-------------------------------------------------------------------------*/
(
double dB
)
{
    return (S16)(dB*170.1);
}

/*-------------------------------------------------------------------------*/
void                     _set_wav
/*-------------------------------------------------------------------------*/
(
)
{
    _WavHdr.acRiff[0] = 'R';
    _WavHdr.acRiff[1] = 'I';
    _WavHdr.acRiff[2] = 'F';
    _WavHdr.acRiff[3] = 'F';

    _WavHdr.ulLen1 = 36;
    _WavHdr.acWave[0] = 'W';
    _WavHdr.acWave[1] = 'A';
    _WavHdr.acWave[2] = 'V';
    _WavHdr.acWave[3] = 'E';

    _WavHdr.acFmt[0] = 'f';
    _WavHdr.acFmt[1] = 'm';
    _WavHdr.acFmt[2] = 't';
    _WavHdr.acFmt[3] = ' ';

    _WavHdr.ulLen2 = 16;
    _WavHdr.uMode  = 1;
    _WavHdr.uNumber = 1;
    _WavHdr.ulFs = 8000;
    _WavHdr.ulBps = 16000;
    _WavHdr.uBytes = 2;
    _WavHdr.uBits = 16;

    _WavHdr.acData[0] = 'd';
    _WavHdr.acData[1] = 'a';
    _WavHdr.acData[2] = 't';
    _WavHdr.acData[3] = 'a';
    _WavHdr.ulLen3 = 0;
    
    fwrite(&_WavHdr, 1, sizeof(_WavHdr), _Control.pNlpWavFile);
    fwrite(&_WavHdr, 1, sizeof(_WavHdr), _Control.pCnlWavFile);
    fwrite(&_WavHdr, 1, sizeof(_WavHdr), _Control.pTxWavFile);
    fwrite(&_WavHdr, 1, sizeof(_WavHdr), _Control.pTxOutWavFile);
    fwrite(&_WavHdr, 1, sizeof(_WavHdr), _Control.pRxWavFile);
}

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

/*                  C O N F I G U R A T I O N                              */

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


/*-------------------------------------------------------------------------*/
int                     str_cmp
/*-------------------------------------------------------------------------*/
(
const char *pBasis, 
char **ppArg
)
{
    if (_strnicmp(pBasis, *ppArg, strlen(pBasis)) == 0)
    {
        *ppArg += strlen(pBasis);
        return 0;
    }
    else
    {
        return -1;
    }
}

/*-------------------------------------------------------------------------*/
int                     get_cfg_line
/*-------------------------------------------------------------------------*/
(
char *pArg
)
/* returns :
        0 - no errs
        1 - file err
        2 - arg scanf err
        3 - switch err
        */
{
    int Rc = 0;
    float fTmp;
    int iTmp;
    

    if ( *pArg == '-' || *pArg == '/')
    {
        pArg++;

        if (str_cmp("ADF", &pArg) == 0)
	    {
		    _Control.pAdfFile = fopen("adf.f", "w");
		    if ( _Control.pAdfFile == NULL )
		    {
			    Rc = 1;
		    } /* end-of-if */
	    }
	    else if (str_cmp("WAV", &pArg) == 0)
	    {
		    _Control.pNlpWavFile = fopen("nlp.wav", "wb");
		    _Control.pCnlWavFile = fopen("cnl.wav", "wb");
		    _Control.pTxWavFile = fopen("tx.wav", "wb");
		    _Control.pTxOutWavFile = fopen("txo.wav", "wb");
		    _Control.pRxWavFile = fopen("rx.wav", "wb");
		    if ((_Control.pNlpWavFile == NULL ) ||
		        (_Control.pCnlWavFile == NULL ) ||
		        (_Control.pTxWavFile == NULL ) ||
		        (_Control.pTxOutWavFile == NULL ) ||
		        (_Control.pRxWavFile == NULL ))
		    {
			    Rc = 1;
		    }
            else
            {
                _set_wav();
            }/* end-of-if */
	    }
	    else if (str_cmp("TMP", &pArg) == 0)
	    {
		    _Control.pTmpFile = fopen("tmp.txt", "w");
		    if ( _Control.pTmpFile == NULL )
		    {
			    Rc = 1;
		    } /* end-of-if */
	    }
	    else if (str_cmp("BYPASS", &pArg) == 0)
	    {
		    if (sscanf(pArg, "%f", &fTmp) != 1)
		    {
                Rc = 2;
		    }
            else
            {
                _Control.fBypass = fTmp;
            }
	    }
	    else if (str_cmp("GRMODE", &pArg) == 0)
	    {
		    if (sscanf(pArg, "%x", &_Control.iGmode) != 1)
            {
                Rc = 2;
            }
	    }
        else if (str_cmp("STEPMODE", &pArg) == 0)
	    {
		    if (sscanf(pArg, "%d", &iTmp) != 1)
		    {
                Rc = 2;
		    }
            else
            {
    		    DEMO_StepMode = iTmp;
            }
	    }
        else if (str_cmp("ADD_RX_CORR", &pArg) == 0)
	    {
		    if (sscanf(pArg, "%f", &fTmp) != 1)
		    {
                Rc = 2;
		    }
            else
            {
                _Control.fAddRxCorr = pow(10., fTmp/20.);
            }
        }
        else if (str_cmp("ADD_RX_DELAY", &pArg) == 0)
	    {
			if (sscanf(pArg, "%f", &fTmp) != 1)
			{
				Rc = 2;
			}
			else
			{
				_Control.iAddRxDelay = int(fTmp*200.0 + 0.5);
			}
        }
	    else if (str_cmp("ADD_RX_BYPASS", &pArg) == 0)
	    {
		    if (sscanf(pArg, "%f", &fTmp) != 1)
		    {
                Rc = 2;
		    }
            else
            {
                _Control.iAddRxBypass = int(fTmp*8000.0 + 0.5);;
            }
	    }
        else if (str_cmp("ADD_RX_TRX_FILE", &pArg) == 0)
	    {
		    _Control.pAddRxTrxFile = fopen(pArg+1, "r");
		    if ( _Control.pAddRxTrxFile == NULL )
		    {
			    Rc  = 1;
		    } /* end-of-if */
            else
            {
				if (_Control.iAddRxBypass > 0)
				{
					for (long i = 0; i < _Control.iAddRxBypass; i++)
					{
						S16 x, y;
                        fscanf(_Control.pAddRxTrxFile, "%d %d", &x, &y);
						if (i%8000 == 0)
						{
							val_out(0,0, WHITE, "second %ld   ", (i+1)/8000);
						}
					}
				}

            }
	    }
        else if (str_cmp("ADD_RX_TX_FILE", &pArg) == 0)
	    {
		    _Control.pAddRxTxFile = fopen(pArg+1, "r");
		    if ( _Control.pAddRxTxFile == NULL )
		    {
			    Rc  = 1;
		    } /* end-of-if */
	    }
        else if (str_cmp("TRX_FILE", &pArg) == 0)
	    {
		    _Control.pInTrxFile = fopen(pArg+1, "r");
		    if ( _Control.pInTrxFile == NULL )
		    {
			    Rc  = 1;
		    } /* end-of-if */
            else
            {
				if (_Control.fBypass > 0)
				{
					for (long i = 0; i < _Control.fBypass * 8000; i++)
					{
						S16 x, y;
                        fscanf(_Control.pInTrxFile, "%d %d", &x, &y);
						if (i%8000 == 0)
						{
							val_out(0,0, WHITE, "second %ld   ", (i+1)/8000);
						}
					}
				}

            }
	    }
        else if (str_cmp("TX_FILE", &pArg) == 0)
	    {
		    _Control.pInTxFile = fopen(pArg+1, "r");
		    if ( _Control.pInTxFile == NULL )
		    {
			    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("RX_FILE", &pArg) == 0)
	    {
		    _Control.pInRxFile = fopen(pArg+1, "r");
		    if ( _Control.pInRxFile == NULL )
		    {
			    Rc  = 1;
		    } /* end-of-if */
            else
            {
				if (_Control.fBypass > 0)
				{
					for (long i = 0; i < _Control.fBypass * 8000; i++)
					{
						S16 x;
                        fscanf(_Control.pInRxFile, "%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.pInTxBinFile = fopen(pArg+1, "rb");
		    if ( _Control.pInTxBinFile == NULL )
		    {
			    Rc  = 1;
		    } /* end-of-if */
            else
            {
				if (_Control.fBypass > 0)
				{
					for (long i = 0; i < _Control.fBypass * 8000; i++)
					{
						S16 x;
                        fread(&x, sizeof(S16), 1, _Control.pInTxBinFile);
						if (i%8000 == 0)
						{
							val_out(0,0, WHITE, "second %ld   ", (i+1)/8000);
						}
					}
				}

            }
	    }
        else if (str_cmp("RX_BIN", &pArg) == 0)
	    {
		    _Control.pInRxBinFile = fopen(pArg+1, "rb");
		    if ( _Control.pInRxBinFile == NULL )
		    {
			    Rc  = 1;
		    } /* end-of-if */
            else
            {
				if (_Control.fBypass > 0)
				{
					for (long i = 0; i < _Control.fBypass * 8000; i++)
					{
						S16 x;
                        fread(&x, sizeof(S16), 1, _Control.pInRxBinFile);
						if (i%8000 == 0)
						{
							val_out(0,0, WHITE, "second %ld   ", (i+1)/8000);
						}
					}
				}

            }
	    }
        else if (str_cmp("ECHO_FILE", &pArg) == 0)
	    {
#define __DELAY     (0)
			FILE *pFile = fopen(pArg+1, "r");
			if ( pFile == NULL )
			{
				Rc = 10;
			}
			else
			{
				int i;

				for (i = 0; i < 80; i++) fscanf(pFile, "%f", &fTmp);

				for (i = 0; i < ECHO_SZ-__DELAY; i++)
				{
					if (fscanf(pFile, "%f", &fTmp) == 1)
                    {
                        _afEcho[i+__DELAY] = fTmp;
                    }
                    else
                    {
                        break;
                    }
				}
				fclose(pFile);
			} /* end-of-if */

        }
        else if (str_cmp("SBADF", &pArg) == 0)
	    {
			FILE *pFile = fopen(pArg+1, "r");
			if ( pFile == NULL )
			{
				Rc = 10;
			}
			else
			{
                int idx;
                for (idx = 0; idx < GAEC_ADF_SZ; idx++)
				{
    				int band;
	    			for (band = 0; band < GAEC_BANDS*2; band++)
                    {
                        if (fscanf(pFile, "%f", &fTmp) == 1)
                        {
//                            _SbecDb.aasAdf[band][idx] = fTmp;
                            _aasAdf[band][idx] = fTmp;
                        }
                        else
                        {
//                            _SbecDb.aasAdf[band][idx] = 0.1;
                        }
                    }
				}
				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("ADD_PINK_NOISE", &pArg) == 0)
	    {
		    if (sscanf(pArg, "%f", &fTmp) != 1)
		    {
                Rc = 2;
		    }
            else
            {
                _Control.fAddPinkNoise = 4096.* pow(10., fTmp/20.);
            }
        }
        else if (str_cmp("ADD_TX_QNOISE", &pArg) == 0)
	    {
		    if (sscanf(pArg, "%f", &fTmp) != 1)
		    {
                Rc = 2;
		    }
            else
            {
                _Control.fAddTxQNoise = fTmp;
            }
        }
        else if (str_cmp("ADD_RX_QNOISE", &pArg) == 0)
	    {
		    if (sscanf(pArg, "%f", &fTmp) != 1)
		    {
                Rc = 2;
		    }
            else
            {
                _Control.fAddRxQNoise = fTmp;
            }
        }
        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);
			}
        }

⌨️ 快捷键说明

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