我有一个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执行此操作?
答案 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)