Exemple #1
0
Error_t
DecimatorProcessD(DecimatorD*   decimator,
                  double*       outBuffer,
                  const double* inBuffer,
                  unsigned      n_samples)
{
    if (decimator && outBuffer)
    {
        unsigned declen = n_samples / decimator->factor;
        double temp_buf[declen];
        ClearBufferD(outBuffer, declen);

        for (unsigned filt = 0; filt < decimator->factor; ++filt)
        {
            CopyBufferStrideD(temp_buf, 1, inBuffer, decimator->factor, declen);
            FIRFilterProcessD(decimator->polyphase[filt], temp_buf, temp_buf, declen);
            VectorVectorAddD(outBuffer, (const double*)outBuffer, temp_buf, declen);
        }
        return NOERR;
    }
    else
    {
        return NULL_PTR_ERROR;
    }
}
Exemple #2
0
Error_t
UpsamplerProcessD(UpsamplerD*   upsampler,
                 double*        outBuffer,
                 const double*  inBuffer,
                 unsigned       n_samples)
{
    double tempbuf[n_samples];
    if (upsampler && outBuffer)
    {
        for (unsigned filt = 0; filt < upsampler->factor; ++ filt)
        {
            FIRFilterProcessD(upsampler->polyphase[filt], tempbuf, inBuffer, n_samples);
            CopyBufferStrideD(outBuffer+filt, upsampler->factor, tempbuf, 1, n_samples);
        }

        VectorScalarMultiplyD(outBuffer, (const double*)outBuffer,
                             upsampler->factor, n_samples * upsampler->factor);
        return NOERR;
    }
    else
    {
        return NULL_PTR_ERROR;
    }
}