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

📄 spbpf.cpp

📁 The line echo canceller (LEC) is designed to provide the maximum attainable transparent voice qualit
💻 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 "spbpf.h"

#if defined (_dsp)
#pragma DATA_SECTION(_asBandPassFlt, ".bpfp")
#endif

#if (SPBPF_NEW != 0)

static const S16 _asBpf[SPBPF_FSZ] = 
{
  25404,   -267, -12669,   -363,  -8752,   -582,  -5330,   -768,  
  -2592,   -780,   -661,   -544,    462,    -95,    922,    409,   
   1056,   1210,    893,    784,    571,    487,    346,    278,    
    196,    142,    100,     63,     43,     22,     12,      4

#else

static const S16 _asBpf[SPBPF_HSZ] = 
{
29527, -9592, -7602, -5666, -3858, 
-2204,  -441,  -147,  -26,    5 

#endif

};
  
/*-------------------------------------------------------------------------*/
void                    sp_bpf_init
/*-------------------------------------------------------------------------*/
(
SPBPF_tDb *pDb
)
{
    S16 k;
    for (k = 0; k < SPBPF_SSZ; k++)
        pDb->asSav[k] = 0;
}
/*-------------------------------------------------------------------------*/
void                    sp_bpf
/*-------------------------------------------------------------------------*/
(
SPBPF_tDb *pDb,
SPBPF_tSc *pSc,
S16 *psData
)
{
    S16 k;

    for (k = 0; k < SPBPF_SSZ; k++)
    {
        pSc->asTmp[k] = pDb->asSav[k];
    }
    for (k = 0; k < SP_FR_SZ; k++)
    {
        pSc->asTmp[k+SPBPF_SSZ] = psData[k];
    }

    for (k = 0; k < SPBPF_SSZ; k++)
    {
        pDb->asSav[SPBPF_SSZ-1-k] = psData[SP_FR_SZ-1-k];
    }

    for (k = 0; k < SP_FR_SZ; k++)
    {
        S16 i;
        S32 slAcc = 0;

#if SPBPF_NEW
        for (i = 0; i < SPBPF_FSZ; i++)
        {
			S32 slData = pSc->asTmp[k+SPBPF_FSZ-1-i];
#else
        for (i = 0; i < SPBPF_HSZ; i++)
        {
            S32 slData = pSc->asTmp[k + SPBPF_FSZ - 1 - i*2];
#endif            
            slAcc += slData * _asBpf[i];
        }

        slAcc += 0x4000;
        slAcc >>= 15;
        psData[k] = (S16)slAcc;
    }
}

⌨️ 快捷键说明

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