我正在开发一个应用程序,它可以测量设备的运动。(xyz方向)
,现在我必须使用FFTW来过滤数据。
我不知道如何通过fftw调用数据。下面是我试图执行X数据的代码的一部分(我在每个方向上分别工作,所以X, Y,然后Z)
//FFTW for x数据
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] );
}
和下面是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在上面工作吗?
thanks for every try
不能简单地将真实数据转换为真实的虚对。每个复数由2个双数组成。
您需要将所有加速数据存储到一个更大的数组中(例如256个条目),其中x值分配给复数的实数部分,0分配给虚数部分。