📄 spbpf.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 + -