signal-processing - 复数 : fast cartesian to polar conversion

标签 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 的一些计算?或者有没有迭代方法来获得我的结果?

最佳答案

退房 this CORDIC DSP optimization很难说它是否对你的情况有帮助。

关于signal-processing - 复数 : fast cartesian to polar conversion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1778758/

相关文章:

python - 在 Python 中实现复数比较?

matlab - Matlab 中的卷积实践

audio - 使用 RealFFT 改变频率幅度,闪烁的声音

c - 定点处理 : what is the difference between uint16_t and uint_fast16_t?

android - 定点数学 - 从浮点安全到总是产生相同结果的转换?

将有符号定点转换为 float

Python Sympy 复数的角度?

audio - Unity3D中音频信号谐波的幅度

c++ - 我没有从使用FFTW的重叠相加FFT卷积中获得预期的结果

c++ - 将 STL complex<double> 转换为 fftw_complex 的问题