// reference implementation of an FIR
template
static void reference (const NumericType* firCoefficients,
size_t numCoefficients,
const SampleType* input,
SampleType* output,
size_t n) noexcept
{
if (numCoefficients == 0)
{//輸出清零
zeromem (output, sizeof (SampleType) * n);
return;
}
//分配內(nèi)存
HeapBlock scratchBuffer (numCoefficients
#if JUCE_USE_SIMD
+ (SIMDRegister::SIMDRegisterSize / sizeof (SampleType))
#endif
);
#if JUCE_USE_SIMD
SampleType* buffer = reinterpret_cast
(SIMDRegister::getNextSIMDAlignedPtr
(reinterpret_cast (scratchBuffer.getData())));
#else
SampleType* buffer = scratchBuffer.getData();
#endif
//內(nèi)存清零
zeromem (buffer, sizeof (SampleType) * numCoefficients);
for (size_t i = 0; i < n; ++i)
{
//滑動,將數(shù)據(jù)向右移動一個位置
for (size_t j = (numCoefficients - 1); j >= 1; --j)
buffer[j] = buffer[j-1];
buffer[0] = input[i];//最新采集的數(shù)據(jù)
SampleType sum (0);//累加和清零
//重新相加
for (size_t j = 0; j < numCoefficients; ++j)
sum += buffer[j] * firCoefficients[j];
output[i] = sum;//更新輸出
}
}
新聞名稱:fir濾波器
本文URL:
http://weahome.cn/article/gssdih.html