首页 > 解决方案 > 我应该为 vDSP 中的真正 FFT 函数提供什么?

问题描述

vDSP_fft_zrop(实际上是 vDSP 中的大多数 FFT 函数)的函数签名接受两个DSPSplitComplex结构作为输入和输出。然而,对于真正的 FFT 计算,前向 FFT 只接受实数值的输入,而后向 FFT 只产生实数值的输出。那么我应该如何填充DSPSplitComplex全实值的输入/输出结构呢?

为了更清楚地声明,如果我要在下面实现一个更常见的 API:

void forward_fft( std::complex<float>* output, const float* input, unsigned size);

很明显,我应该使用 将 vDSP 函数的输出交错到output内存中vDSP_ztoc,但是我应该如何处理input内存呢?我应该这样做:

DSPSplitComplex input_for_vdsp;
input_for_vdsp.realp = input;
input_for_vdsp.imagp = nullptr

imagp,或者我应该为指针分配内存?

标签: c++accelerate-frameworkvdsp

解决方案


您可以将实数值表示为使用复数值的实部和虚部的奇偶配置。有关完整讨论,请参阅 Apple 的傅里叶变换数据打包文章。


推荐阅读