Exemplo n.º 1
0
/* *****************************************************************************
 DecimatorProcess */
Error_t
DecimatorProcess(Decimator      *decimator,
                 float          *outBuffer,
                 const float    *inBuffer,
                 unsigned       n_samples)
{
    if (decimator && outBuffer)
    {
        unsigned declen = n_samples / decimator->factor;
        float temp_buf[declen];
        ClearBuffer(outBuffer, declen);

        for (unsigned filt = 0; filt < decimator->factor; ++filt)
        {
            CopyBufferStride(temp_buf, 1, inBuffer, decimator->factor, declen);
            FIRFilterProcess(decimator->polyphase[filt], temp_buf, temp_buf, declen);
            VectorVectorAdd(outBuffer, (const float*)outBuffer, temp_buf, declen);
        }
        return NOERR;
    }
    else
    {
        return NULL_PTR_ERROR;
    }
}
Exemplo n.º 2
0
TEST(DSPSingle, TestStrideCopy)
{
    float out[10];
    float in1[5] = {1.,2.,3.,4.,5.};
    float in2[10] = {1., 2., 3., 4., 5., 6., 7., 8., 9., 10.};
    float ex1[10] = {1., 0., 2., 0., 3., 0., 4., 0., 5., 0.};
    float ex2[5] = {1., 3., 5., 7., 9.};
    
    ClearBuffer(out, 10);
    CopyBufferStride(out, 2, in1, 1, 5);
    for (unsigned i = 0; i < 10; ++i)
    {
        ASSERT_FLOAT_EQ(ex1[i], out[i]);
    }
    
    ClearBuffer(out, 10);
    CopyBufferStride(out, 1, in2, 2, 5);
    for (unsigned i = 0; i < 5; ++i)
    {
        ASSERT_FLOAT_EQ(ex2[i], out[i]);
    }
}
Exemplo n.º 3
0
/* UpsamplerProcess ****************************************************/
Error_t
UpsamplerProcess(Upsampler      *upsampler,
                 float          *outBuffer,
				 const float    *inBuffer,
				 unsigned       n_samples)
{
    float tempbuf[n_samples];
    if (upsampler && outBuffer)
    {
        for (unsigned filt = 0; filt < upsampler->factor; ++filt)
        {
            FIRFilterProcess(upsampler->polyphase[filt], tempbuf, inBuffer, n_samples);
            CopyBufferStride(outBuffer+filt, upsampler->factor, tempbuf, 1, n_samples);
        }

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