开发者

vDSP_ztoc producing odd results

I'm trying to figure out the vDSP functions and the results I'm getting are very strange.

This is related to this question:

Using std::开发者_如何学Pythoncomplex with iPhone's vDSP functions

Basically I am trying to make sense of vDSP_vdist as I start off with a vector of std::complex< float >. Now AFAIK I should be able to calculate the magnitude by, simply, doing:

// std::abs of a complex does sqrtf( r^2 + i^2 ).
pOut[idx]   = std::abs( pIn[idx] );

However when I do this I see the spectrum reflected around the midpoint of the vector. This is very strange.

Oddly, however, if I use a vDSP_ztoc followed by a vDSP_vdist I get exactly the results I expect. So I wrote a bit of code to try and understand whats going wrong.

bool VecMagnitude( float* pOut, const std::complex< float >* pIn, unsigned int num )
{
    std::vector< float > realTemp( num );
    std::vector< float > imagTemp( num );

    DSPSplitComplex dspsc;
    dspsc.realp = &realTemp.front();
    dspsc.imagp = &imagTemp.front();

    vDSP_ctoz( (DSPComplex*)pIn, 1, &dspsc, 1, num );

    int idx = 0;
    while( idx < num )
    {           
        if ( fabsf( dspsc.realp[idx] - pIn[idx].real() ) > 0.0001f ||
             fabsf( dspsc.imagp[idx] - pIn[idx].imag() ) > 0.0001f )
        {
            char temp[256];
            sprintf( temp, "%f, %f - %f, %f", dspsc.realp[idx], dspsc.imagp[idx], pIn[idx].real(), pIn[idx].imag() );
            fprintf( stderr, temp );
        }
    }
    return true;
}

Now whats strange is the above code starts failing when idx = 1 and continues to the end. The reason is that dspsc.realp[1] == pIn[0].imag(). Its like instead of splitting it into 2 different buffers that it has straight memcpy'd half the vector of std::complexes into dspsc.realp. ie the 2 floats at std::complex[0] then the 2 floats in std::complex[1] and so on. dspsc.imagp is much the same. dspsc.imagp[1] = pIn[1].real().

This just makes no sense. Can someone explain where on earth I'm failing to understand whats going on?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜