我正在寻找一种快速的方法将一组复数转换成极坐标表示。
例如,给定一个复数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的一些计算?或者有一种迭代方式来获得我的结果吗?