【问题标题】:How to use FFTW on deviceMotion.userAcceleration.x如何在 deviceMotion.userAcceleration.x 上使用 FFTW
【发布时间】:2014-05-18 00:51:06
【问题描述】:

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

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

我不知道如何通过fftw调用数据。下面是我尝试执行 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;

我收到此错误:

从不兼容的类型'double'分配给'fftw_complex *'(又名'_Complex double *')

知道如何让 fftw 工作吗?

感谢您的每次尝试

【问题讨论】:

    标签: ios fftw devicemotion


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回答。我按照你说的做了。所以我将 userAcceleration.x 保存在一个数组中,然后我定义了如下数据:data[i][0] = array [i][0]; Subscribed value is not an array, pointer, or vector data[i][1] = array [0][0]; Subscribed value is not an array, pointer, or vector 但我收到了这个错误。你知道怎么解决吗?很抱歉给你压力,但我是 xcode 的新手,希望你能帮助我。
    • 数组只有一维。所以 data[i][0] = array[i] 和 data[i][1] = 0.0.
    • 我像你说的那样写了它,但它仍然给我这个错误 - 订阅值不是数组、指针或向量 - 它显示在第二个数据数组上。(数据[i]>[0] = 数组 [i][0]; 数据[i]>[1] = 0.0;)
    • 它有效。是我的错。我在顶部包括#include &lt;complex.h&gt;,你看不到什么:) 非常感谢。
    猜你喜欢
    • 2013-08-13
    • 2015-01-16
    • 1970-01-01
    • 2014-11-28
    • 2015-10-11
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多