2014-05-18 1 views
0

Je travaille sur une application. que c'est mesurer le mouvement d'un appareil. (direction xyz)Comment utiliser FFTW sur deviceMotion.userAcceleration.x

et maintenant je dois utiliser fftw pour filtrer les données.

Je ne sais pas comment appeler les données via fftw. hier ci-dessous est une partie de mon code en essayant d'exécuter les données X (je travaille sur chaque direction séparée afin X, Y, Z) et

// FFTW pour les données 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]); 
     } 

et hier est le userAcceleration:

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

par exemple, quand je suis en train d'écrire:

Datax = deviceMotion.userAcceleration.x;

Je reçois cette erreur:

Attribution de 'fftw_complex *' (alias '_Complex double *') de type incompatible 'double'

toute idée comment faire fonctionner fftw là-dessus?

merci pour tous les essayer

Répondre

0

Vous ne pouvez pas simplement convertir des données réelles à une véritable paire imaginaire. Chaque nombre complexe est composé de 2 doubles.

Vous devez stocker toutes vos données d'accélération dans un tableau plus grand (256 entrées par exemple) où la valeur x est affectée à la partie réelle du nombre complexe et 0 est affecté à la partie imaginaire.

+0

merci pour votre réponse. J'ai suivi ce que tu as dit. J'ai donc enregistré le userAcceleration.x dans un tableau, puis j'ai défini des données comme: 'data [i] [0] = array [i] [0]; La valeur souscrite n'est pas un tableau, un pointeur ou un vecteur data [i] [1] = array [0] [0]; La valeur souscrite n'est pas un tableau, un pointeur ou un vecteur mais j'obtiens cette erreur. Savez-vous comment le résoudre? désolé de stresser mais je suis nouveau avec xcode, j'espère que vous pouvez m'aider. – josef

+0

tableau est seulement 1 dimensionnelle. Donc données [i] [0] = tableau [i] et données [i] [1] = 0.0. – Goz

+0

Je l'ai écrit comme vous l'avez dit, mais il me donne toujours cette erreur - La valeur du sousscrit n'est pas un tableau, un pointeur ou un vecteur - et il me montre sur le second tableau de données. (Data [i]> [0] = array [i] [0]; données [i]> [1] = 0.0;) – josef

Questions connexes