加速框架FFT vDSPztoc拆分实数形式以分割实数向量

时间:2012-05-09 01:23:21

标签: ios signal-processing fft accelerate-framework

我正在使用Accelerate Framework在iOS中实现基于加速度计的FFT,但我仍然有点困惑的一件事就是这部分:

/* The output signal is now in a split real form.  Use the  function
 * vDSP_ztoc to get a split real vector. */
 vDSP_ztoc(&A, 1, (COMPLEX *) obtainedReal, 2, nOver2);

最终阵列是什么样的? 我对“分裂真实形式”和“分裂真实矢量”之间的区别感到困惑。我可能对它的含义有所了解,但我想确定我有正确的想法。

表示输入数据(如加速度)的起始数据,一个双打数组,通过vDSP_ctoz以奇偶形式输入。然后结果就是这种形式(从Apple的vDSP指南中复制):

{[DC,0],C[1],C[2],...,C[n/2],[NY,0],Cc[n/2],...,Cc[2],Cc[1]}

 where
 1. DC and NY are the dc and nyquist components (real valued),
 2. C is complex in a split representation,
 3. Cc is the complex conjugate of C in a split representation.

For an n size real array A, the complex results require 2n
 spaces.  In order to fit the 2n size result into an n size  input and
 since the complex conjugates are duplicate information, the  real
 FFT produces its results as follows:
   {[DC,NY],C[1],C[2],...,C[n/2]}

在我的实现中(有效,我只是对输出感到困惑),我也调用了vDSP_ztoc。是否应该进行此调用,或者仅在示例中完成,因为他们想要恢复数组以匹配原始数组(因为它们执行了反向转换)?

如果你应该打电话给那个,那么vDSP_ztoc之后的最终形式是什么?是吗:

   {[DC,NY],C[1],C[2],...,C[n/2]}

或者输出数组中的第一个元素是DC,第二个是第一个bin的实部,第三个是第一个bin的虚部,依此类推?或者是奈奎斯特频率在该设置中的第二个元素,使第三和第四个元素成为第一个元素的实部和虚部?

有点不清楚,但我想这个问题非常简单,我只需要快速确认/纠正。

谢谢!

1 个答案:

答案 0 :(得分:1)

所以最后的形式     {C [0],C [1],C [2],...,C [N / 2]} 是对的。

每个bin的频率如其他类似的线程所述    F = Fs / N. 其中Fs是采样频率,N是输入数组中元素的总数。最终得到N / 2个复数(半实半虚)。