我应该向 vDSP 中的真正 FFT 函数提供什么?
What should I feed to real FFT functions in vDSP?
vDSP_fft_zrop
的函数签名(实际上是 vDSP 中的大多数 FFT 函数)接受两个 DSPSplitComplex
结构作为输入和输出。但是,对于实数 FFT 计算,前向 FFT 只接受实数值的输入,而后向 FFT 只产生实数值的输出。那么我应该如何填充 input/output DSPSplitComplex
结构以获得全实数值?
为了声明得更清楚,如果我要在下面实现一个更常见的API:
void forward_fft( std::complex<float>* output, const float* input, unsigned size);
显然我应该使用 vDSP_ztoc
将 vDSP 函数的输出交错到 output
内存,但我应该如何处理 input
内存?我应该这样做吗:
DSPSplitComplex input_for_vdsp;
input_for_vdsp.realp = input;
input_for_vdsp.imagp = nullptr
,或者我应该为 imagp
指针分配内存?
您可以将实数值表示为同时使用复数值的实部和虚部的奇偶配置。有关完整讨论,请参阅 Apple 的 Data Packing for Fourier Transforms 文章。
vDSP_fft_zrop
的函数签名(实际上是 vDSP 中的大多数 FFT 函数)接受两个 DSPSplitComplex
结构作为输入和输出。但是,对于实数 FFT 计算,前向 FFT 只接受实数值的输入,而后向 FFT 只产生实数值的输出。那么我应该如何填充 input/output DSPSplitComplex
结构以获得全实数值?
为了声明得更清楚,如果我要在下面实现一个更常见的API:
void forward_fft( std::complex<float>* output, const float* input, unsigned size);
显然我应该使用 vDSP_ztoc
将 vDSP 函数的输出交错到 output
内存,但我应该如何处理 input
内存?我应该这样做吗:
DSPSplitComplex input_for_vdsp;
input_for_vdsp.realp = input;
input_for_vdsp.imagp = nullptr
,或者我应该为 imagp
指针分配内存?
您可以将实数值表示为同时使用复数值的实部和虚部的奇偶配置。有关完整讨论,请参阅 Apple 的 Data Packing for Fourier Transforms 文章。