我一直在研究一些vDSP代码,遇到了一个令人讨厌的问题。我的代码是跨平台的,因此使用std::complex来存储其复杂值。

现在,我假设我将能够按如下所示设置FFT:

DSPSplitComplex dspsc;
dspsc.realp = &complexVector.front().real();
dspsc.imagp = &complexVector.front().imag();

然后在适当的vDSP_fft_ *调用中使用2的步幅。

但是,这似乎不起作用。我可以通过执行vDSP_ztoc来解决此问题,但这需要临时缓冲区,而这些缓冲区我真的不想闲逛。有什么方法可以直接在交错的复杂数据上使用vDSP_fft_ *函数?还有谁能解释为什么我无法像上面那样大步前进2?

谢谢

编辑:正如Bo Persson所指出的那样,real和imag函数实际上并不返回引用。

但是,如果我改为执行以下操作,仍然无法正常工作
DSPSplitComplex dspsc;
dspsc.realp = ((float*)&complexVector.front()) + 0;
dspsc.imagp = ((float*)&complexVector.front()) + 1;

所以我原来的问题仍然存在:(

最佳答案

std::complex函数real()imag()按值返回,它们不返回对complex成员的引用。

这意味着您无法通过这种方式获取他们的地址。

10-04 14:44