我一直在研究一些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成员的引用。
这意味着您无法通过这种方式获取他们的地址。