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番目の要素を最初のビンの実数成分と虚数成分にしますか?
少しわかりにくいですが、この質問は非常に簡単で、必要なのは迅速な確認/修正だけだと思います。
ありがとう!