我正在寻找一种将复数数组转换为极坐标表示的快速方法。
例如,给定一个复数 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 的一些计算?或者有没有迭代方法来获得我的结果?
最佳答案
退房 this CORDIC DSP optimization很难说它是否对你的情况有帮助。
关于signal-processing - 复数 : fast cartesian to polar conversion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1778758/