我一直在研究一些 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;
所以我原来的问题仍然存在:(