c++ - 我应该为 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
,或者我应该为指针分配内存?
解决方案
您可以将实数值表示为使用复数值的实部和虚部的奇偶配置。有关完整讨论,请参阅 Apple 的傅里叶变换数据打包文章。
推荐阅读
- c++ - 保持对其他类的成员函数的引用
- ionic-framework - Http 获取请求 URL 显示 [object promise]
- javascript - 在 Javascript 中使用 $http 将 int 数组传递给 Api 控制器
- unit-testing - 带有离子输入的 Ionic v4 jasmine 单元测试
- ios - 如何在 iOS 证书上添加功能
- r - 如何根据输出列中的值提取列名并获取计数
- java - 在java中改变颜色的亮度/饱和度
- python - 正则表达式拆分以拆分字符串
- reactjs - 如何将组件导出到故事书
- python - 我怎么能提到我自己,负责任的主持人:谁静音