複素数の配列を極座標表現に変換する高速な方法を探しています。
たとえば、与えられた複素数 XI は、次のように極座標表現に変換したいと考えています。
Q.phase = atan2 (X.imag / X.real);
Q.magniude = sqrt (X.imag * X.imag + X.real * X.real);
固定小数点 DSP では、この変換を毎秒約 40 万回行う必要があります。私の数値は 1.15.16 の固定小数点形式であり、そのまま維持したいと考えています。
DSP は、ループ回数が事前にわかっている場合など、無条件ループで実行する場合に非常に高速です。サブルーチンの呼び出しと除算を行う必要がある場合は、クロールします。キャッシュ ミスも非常に遅いため、可能であれば大きなルックアップ テーブルを使用したくありません (4k で問題ありません。そのタスクのためにオンチップ メモリを少し取っておくことができます)。
現在、atan2 を多項式近似として処理し、よく知られたビット単位のアルゴリズムを整数の平方根に使用しています。それは十分に速くありません。
結果を得るにはもっと効率的な方法が必要だと感じています。sqrt と atan からの計算の一部を共有できるのではないでしょうか? または、結果を取得するための反復的な方法はありますか?