//referenceimplementationofanFIRtemplate<typenameSampleType,typenameNumericType>staticvoidreference(constNumericType*firCoefficients,size_tnumCoefficients,constSampleType*input,SampleType*output,size_tn)noexcept{if(numCoefficients==0){//输出清零zeromem(output,sizeof(SampleType)*n);return;}//分配内存HeapBlock<SampleType>scratchBuffer(numCoefficients#ifJUCE_USE_SIMD+(SIMDRegister<NumericType>::SIMDRegisterSize/sizeof(SampleType))#endif);#ifJUCE_USE_SIMDSampleType*buffer=reinterpret_cast<SampleType*>(SIMDRegister<NumericType>::getNextSIMDAlignedPtr(reinterpret_cast<NumericType*>(scratchBuffer.getData())));#elseSampleType*buffer=scratchBuffer.getData();#endif//内存清零zeromem(buffer,sizeof(SampleType)*numCoefficients);for(size_ti=0;i<n;++i){//滑动,将数据向右移动一个位置for(size_tj=(numCoefficients-1);j>=1;--j)buffer[j]=buffer[j-1];buffer[0]=input[i];//最新采集的数据SampleTypesum(0);//累加和清零//重新相加for(size_tj=0;j<numCoefficients;++j)sum+=buffer[j]*firCoefficients[j];output[i]=sum;//更新输出}}