如何在c ++中使用octave来表示来自c ++的数据

时间:2017-06-07 18:03:58

标签: c++ octave

我有一个c ++文件,它将一些数据读入Float_t-arrays。在这些我想要应用一些八度函数(e.q。fft)。我怎么做?我首先必须将Float_t转换为八度变量吗? 谢谢!

我有:

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

如何在values-array上使用fft执行此操作?

1 个答案:

答案 0 :(得分:1)

Pantxo为您提供了正确的answer on the help mailinglist。我在这里添加它是为了完整性:

  

由于fft和相关功能是内置的,你可能会包含    并直接调用Ffft(没有   你的代码需要feval)。作为示例,以下代码可以是   用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))

修改

由于您在将其作为独立调整时遇到问题,我将创建另一个示例:

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