如何在deviceMotion.userAcceleration.x上使用FFTW

时间:2014-05-18 00:51:06

标签: ios fftw devicemotion

我正在开发一款应用。它测量设备的运动。 (xyz方向)

现在我必须使用fftw来过滤数据。

我不知道如何通过fftw 调用数据。下面的hier是我的代码试图执行X数据的一部分(我正在分别处理每个方向,所以X,Y,然后是Z)

//用于X数据的FFTW

        int SIZE = 97;
        fftw_complex   *dataX, *fft_resultX;
        fftw_plan       plan_X;
        int             i ;
        dataX       = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * SIZE);
        fft_resultX  = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * SIZE);
        plan_X  = fftw_plan_dft_1d(SIZE, dataX, fft_resultX,
                                         FFTW_FORWARD, FFTW_ESTIMATE); // FFTW_MEASURE
        for( i = 0 ; i < SIZE ; i++ ) {
            dataX[i][0] = 1.0; // real
            dataX[i][1] = 0.0; // complex 
        for( i = 0 ; i < SIZE ; i++ ) {
            fprintf( stdout, "dataX[%d] = { %2.2f, %2.2f }\n",
                    i, dataX[i][0], dataX[i][1] );
        }

        fftw_execute( plan_X);

        for( i = 0 ; i < SIZE ; i++ ) {
            fprintf( stdout, "fft_resultX[%d] = { %2.2f, %2.2f }\n",
                    i, fft_resultX[i][0], fft_resultX[i][1] );
        }

和hier是userAcceleration:

        [[weakSelf.graphViews objectAtIndex:kDeviceMotionGraphTypeUserAcceleration] addX:deviceMotion.userAcceleration.x y:deviceMotion.userAcceleration.y z:deviceMotion.userAcceleration.z];

例如,当我写作时:

dataX = deviceMotion.userAcceleration.x;

我收到此错误:

分配给&f; fftw_complex *&#39; (又名&#39; _Complex double *&#39;)来自不兼容的类型&#39; double&#39;

任何想法如何使fftw工作?

感谢每一次尝试

1 个答案:

答案 0 :(得分:0)

您无法简单地将实际数据转换为真实的虚拟对。每个复数由2个双精度组成。

您需要将所有加速度数据存储到一个更大的数组中(例如256个条目),其中x值分配给复数的实部,0分配给虚部。