我一直在编写一些vDSP代码,遇到了一个恼人的问题。我的代码是跨平台的,因此使用std::复杂来存储它的复杂值。
现在,我假设我可以设置如下的FFT:
DSPSplitComplex dspsc;
dspsc.realp = &complexVector.front().real();
dspsc.imagp = &complexVector.front().imag();然后在适当的vDSP_fft_*调用中使用2的步长。
然而,这似乎是行不通的。我可以通过做一个vDSP_ztoc来解决这个问题,但这需要临时缓冲区,而我真的不想在这里逗留。是否有任何方法直接在交织的复杂数据上使用vDSP_fft_*函数?还有谁能解释为什么我不能像上面那样以2的步调做这件事?
谢谢
编辑:,正如reference所指出的,真正的函数和imag函数实际上并不返回引用。
但是,如果我执行以下操作,它仍然不起作用
DSPSplitComplex dspsc;
dspsc.realp = ((float*)&complexVector.front()) + 0;
dspsc.imagp = ((float*)&complexVector.front()) + 1;所以我原来的问题仍然成立:
发布于 2011-09-24 10:48:21
复杂函数real()和imag()按值返回,它们不返回对complex成员的引用。
这意味着你不能这样得到他们的地址。
发布于 2015-07-18 11:02:37
你就是这样做的。
const COMPLEX *in = reinterpret_cast<const COMPLEX*>(std::complex);
来源:http://www.fftw.org/doc/Complex-numbers.html
编辑:澄清源代码;COMPLEX和fftw_complex使用相同的数据布局(尽管fftw_complex使用double和复杂float)
https://stackoverflow.com/questions/7538264
复制相似问题