2017-06-07 25 views
-4

私はFloat_t配列としていくつかのデータを読み込むC++ファイルを持っています。これらについては、いくつかのオクターブ関数(e.q.fft)を適用したいと考えています。それ、どうやったら出来るの?最初にFloat_tをオクターブ変数に変換する必要がありますか? ありがとう!C++のデータにoctaveを使用する方法

私が持っている:

int main() 
{ 
Float values[10]; 

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

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

は、私は次の操作を行うことができます知っている:

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; 
} 

どのように私は値-アレイ上のFFTでこれを行うのですか?

+0

何をやってみましたか?コードを表示し、問題点を説明してください – UnholySheep

+0

@UnholySheep最初に感謝!私はちょっと質問を編集しました、それが今理解できることを願っていますか? – Ben

+2

@Benこれは役に立ちます:https://www.gnu.org/software/octave/doc/v4.2.1/External-Code-Interface.html#External-Code-Interface(特にoctセクションとスタンドアロンセクション) –

答えて

1

Pantxoが正しいanswer on the help mailinglistを教えてくれました。私は完全を期すため、ここでそれを追加します:FFTと関連する機能がビルトインされている

ので、おそらく を含むことができ、あなたのコード内(fevalのため 必要としない)直接Ffftを呼び出します。例として、次のコードは、mkocfileでコンパイルさ をすることができ、私の作品:スタンドアロンとしてこれを適応問題を抱えているので、私は別の例を作成します

//////////////////////////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:

// 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; 
} 

出力します。

in: 0 1 0 1 

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

これは正しく聞こえません。これは、Octave内で使用するためのoctfileを生成しているようです。疑問は、代わりにオクターブライブラリを使用するC++スタンドアロンを求めているようです。 –

+0

@Tasos:もちろん "{}"の中の部分だけです。ここの鍵は 'Ffft()'を使うことです。あなたがoctファイルかスタンドアロンアプリケーションで呼び出すかどうかは関係ありません – Andy

+0

@Andyありがとう!クロスポストに申し訳ありません。私は非常に多くのdownvotesのために少し怖がっていた。 cs.exの4つのうち、3つのポストが下位投票でブロックされました。だから私はこれがここで再び起こる前に私は自然なplattformに行くと思った。 しかし、どういうわけか、私はここで議論に従います。 – Ben

関連する問題