复数:快速笛卡尔到极地转换

时间:2009-11-22 13:52:55

标签: signal-processing fixed-point complex-numbers

我正在寻找一种快速的方法将一组复数转换成极坐标表示。

例如,给定一个复数X,我想把它变成这样的极坐标:

  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的一些计算?或者有一种迭代方式来获得我的结果吗?

1 个答案:

答案 0 :(得分:2)

查看this CORDIC DSP optimization很难说出它对你的情况有帮助。