2009-11-22 213 views
3

我正在尋找一種將複數數組轉換爲極座標表示的快速方法。複數:快速笛卡爾到極座標轉換

E.g,給定一個複數X我希望把它變成極座標表示像這樣:

Q.phase = atan2 (X.imag/X.real); 
    Q.magniude = sqrt (X.imag * X.imag + X.real * X.real); 

我需要做這種轉換每秒約400萬次的定點DSP。我的數字是1.15.16定點格式,我想保持這種方式。當我在無條件循環中執行某些事情時,DSP非常快速,例如,當循環數提前知道。它在必須執行子程序調用和分區時進行爬網。緩存未命中也非常緩慢,所以如果可能的話,我不想使用大的查找表(4k會好起來的。我可以爲此任務留出一點片上內存)。

目前我處理atan2作爲一個多項式近似和使用衆所周知的按位算法的整數平方根。這還不夠快。

我有這樣的感覺,應該有一種更有效的方式來獲得結果。也許sqrt和atan的一些計算可以共享?或者是否有一種迭代的方式來獲得我的結果?

回答

2

退房this CORDIC DSP optimization很難判斷它是否對您有幫助。

+0

好文章!喜歡使用乘法器來加速計算並移除分支的想法..我會試試看。 – 2009-11-22 16:10:45

+0

這就是我正在尋找的..非常感謝。 – 2009-11-23 12:30:58

+0

關於同一主題,另請參閱http://www.ddj.com/cpp/207000448 – Clifford 2009-11-25 13:30:54

相關問題