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