2017-06-07 2 views
-4

J'ai un fichier C++ qui lit dans certaines données comme Float_t-arrays. Sur ceux-ci je veux appliquer quelques fonctions d'octave (par exemple fft). Comment je fais ça? Dois-je d'abord convertir Float_t en une variable d'octave? Merci!Comment utiliser octave pour les données de C++ en C++

Je:

int main() 
{ 
Float values[10]; 

//do magic with octave, e.q. fft 

// store the data back into values or keep them (?) 
} 

Je sais que je peux faire ce qui suit:

int main() 
{ 
Float values[10]={0,1,2,3,4,5,6,7,8,9}; 

Matrix a_matrix = Matrix (2,2); 
a_matrix(0,0) = values[0]; 

cout << "Matrix: " << a_matrix << endl; 
} 

Comment puis-je faire avec fft sur les valeurs-tableau?

+0

Qu'avez-vous essayé? Montrez votre code et expliquez quels sont les problèmes – UnholySheep

+0

@UnholySheep D'abord merci! J'ai édité la question un peu, j'espère que c'est maintenant compréhensible? – Ben

+2

@Ben cela pourrait aider: https://www.gnu.org/software/octave/doc/v4.2.1/External-Code-Interface.html#External-Code-Interface (en particulier les sections oct et autonome) –

Répondre

1

Pantxo vous a donné le bon answer on the help mailinglist. Je l'ajoute ici pour être complet:

Depuis fft et la fonction connexe sont vous builtin pouvez probablement inclure et appelez directement TMCPP (sans la nécessité pour feval) dans votre code. À titre d'exemple, le code suivant peut être compilé avec mkocfile et fonctionne pour moi:

//////////////////////////testfft.cc////////////////// 
#include <octave/oct.h> 
#include <octave/builtin-defun-decls.h> 

DEFUN_DLD(testfft, args, nargout, "\ 
testfft\n\ 
") 
{ 
    octave_value_list retval; 
    int nargin = args.length(); 

    retval = Ffft (args); 
    return retval; 
} 
///////////////////////////////////////////////////// 

Compile and test in Octave: 

mkoctfile testfft.cc 
x = 1:10; 
all (testfft (x) == fft (x)) 

EDIT

Puisque vous avez des problèmes d'adaptation cela comme autonome, je vais créer un autre exemple:

// file main.cc 
// compile and link with mkoctfile --link-stand-alone main.cc -o bentest 
#include <iostream> 
#include <octave/oct.h> 
#include <octave/builtin-defun-decls.h> 

int main() 
{ 
    Matrix a = Matrix (1,4); 
    for (int k = 0; k < a.columns(); ++k) 
    a(0, k) = k % 2; 

    std::cout << "in:" << a << std::endl; 

    octave_value_list in; 
    in(0) = a; 

    octave_value_list out = Ffft (in, 1); 
    ComplexMatrix o = out(0).complex_matrix_value(); 
    std::cout << "out:" << o << std::endl; 

    return 0; 
} 

qui émet.

in: 0 1 0 1 

out: (2,0) (0,0) (-2,0) (0,0) 
+0

Cela ne sonne pas bien. Cela semble produire un octfile à utiliser dans Octave. Les questions semblent demander une version autonome de C++ qui utilise des bibliothèques d'octaves à la place. –

+0

@Tasos: bien sûr, seule la partie à l'intérieur "{}" La clé ici est d'utiliser 'Ffft()'. Ce n'est pas grave si vous l'appelez dans un fichier oct ou une application autonome – Andy

+0

@Andy merci! Désolé pour la publication croisée. J'avais un peu peur à cause de tant de downvotes. Sur cs.ex 3 de 4 de mes messages ont été bloqués avec moins de votes vers le bas. Alors j'ai pensé avant que cela se reproduise ici, je vais à la plate-forme naturelle. Mais de toute façon, je vais suivre la discussion maintenant là. – Ben