2

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);

最終的な配列はどのように見えますか?「分割実数形」と「分割実数ベクトル」の違いがわかりません。それが何を意味するのかはある程度理解しているかもしれませんが、正しい考えを持っていることを確認したいと思います。

加速度などの入力データを表す開始データであるdoubleの配列は、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であり、2番目は最初のビンの実数部であり、3番目は最初のビンの虚数部であり、以下同様です。または、2番目の要素はそのセットアップのようなナイキスト周波数であり、3番目と4番目の要素を最初のビンの実数成分と虚数成分にしますか?

少しわかりにくいですが、この質問は非常に簡単で、必要なのは迅速な確認/修正だけだと思います。

ありがとう!

4

1 に答える 1

1

したがって、最終的な形式{C [0]、C [1]、C [2]、...、C [n/2]}は正しいです。

また、各ビンの頻度は、他の同様のスレッドで説明されているように、F = Fs / Nです。ここで、Fsはサンプリング頻度、Nは入力配列内の要素の総数です。最終的にN/2の複素数になります(実数の半分は虚数の半分)。

于 2012-05-21T16:45:57.420 に答える