• 沒有找到結果。

CORDIC(Coordinate Rotation Digital Computer)演算法

4.2 重要功能區塊 (F UNCTIONAL BLOCKS )

4.2.1 CORDIC(Coordinate Rotation Digital Computer)演算法

CORDIC 介紹

在西元1959 年 Jack E. Volder 提出CORDIC(Coordinate Rotation Digital Computer)演算法是,是用來做一些數值運算,例如三角函數、乘法、除法、二

接著將( 4-1)改寫為

1 個角度累加器去得到方向序列輸出

d ,此角度累加器(Angle Accumulator)數學方

i 程式可表示為下式: 種叫做 Rotating Mode,另一種則是 Vectoring Mode。這兩種模式在本論文的實現 中都會用到。Rotating Mode 是給將輸入向量旋轉一個給定的角度,再 Vectoring Mode 則是將原本輸入的向量,經由不斷的旋轉並轉至 x 軸之上。

¾ Rotating Mode

在頻率估測當中,在已經估出頻率偏移角度的情況下,我們要對之後的每 一個取樣值估頻率補償,也就是對取樣值做旋轉。在 Rotating Mode 中,我們先 讓角度累加器的初始值為欲旋轉的角度,並在每個疊代當中,試圖讓角度累加器

[ ]

經由這樣的機制,得到原本輸入訊號的角度(phase)與大小(magnitude)。與 Rotating Mode 不一定的地方,在於它會試著讓疊代

y 的值為 0,以便讓旋轉後的向量對

i

角度,又因為我們並不需要算出輸入訊號的大小

(magnitude)

,所以並不需要計算

A

n

不管是

Rotating Mode

或是

Vectoring Mode

,在每次疊代中,旋轉角度都

會有其最大限制,這個限制與 i 的起始位置有關,其最大旋轉角度的限制如下

:

1 1 狀況。首先我們針對 Rotating Mode 來做模擬,並針對論文主題中的頻率補償方 面,也就是向量的旋轉做模擬。假設輸入訊號為 1+i,旋轉角度為

3 / 2

π ,那麼輸 出訊號應該為 1-i 才對。由圖 4-3 中,我們可以看到,x(i)與 y(i)隨著 i 的增加慢 慢的逼進 1 與-1,這邊注意 x 與 y 的起始值 x(0)、y(0),原本應該都是 1 才對,

但在圖上為-1,這是因為旋轉的角度大於π (為

3 / 2

π ),所以我們已經先旋轉了一 個π 角度了,變為 x(0)=-1,y(0)=-1。而在 z(i)方面也逐漸變為 0,印證之前在 Rotating Mode 中所說的 z(n)會趨近於 0。

圖 4-3 CORDIC Algorithm with Vector Rotate (Rotating angle =

3 / 2

π )

假若輸入訊號仍為 1+i,如果旋轉角度為 4.93(約為 282.468 ),會發生什麼 情形呢?我們從圖 4-4 中,可以看到當 i 很大時,不論是 x(i)、y(i)或 z(i)都無法貼 上它們應有的值,但是還蠻接近的,這是因為這個角度稍稍超過了所能旋轉的臨 界值。這個臨界值是從可( 4-14)中看出,最大能旋轉的角度為 1.7433,由於之後 我們可以透過預先旋轉角度π ,所以最大能旋轉的角度為

1.7433 4.8849 279.884

π

+ = = 。不過這個問題不會造成我們的困擾,因為大於這

個角度的話,我們可以扣掉

2

π ,也就是將範圍限定在 π

與π 之間即可,或是改 變 i 的初始值(如 0 改為-1 或-2)等。

圖 4-4 CORDIC Algorithm with Vector Rotate (Rotating angle = 4.93)

接著討論在 Vectoring Mode,並針對論文主題中,估測頻率補償時的角度來 做模擬。假設輸入訊號為 1-i,預期估出的角度應該是

π

/ 4

(-0.7854)。我們由圖 4-5 可以看到,隨著 i 的增加,預求的角度 z(i)也慢慢貼近-0.7854,而 y(i)也如同 之前所提到的,在 i 很大時會趨近於 0。在 Vectoring Mode 並不像 Rotating Mode 中旋轉角度要小於 4.8849 的限制,因為這邊所算出來的角度,都定義在

π與π 之間。

由圖 4-3 與圖 4-5 可以看出,CORDIC Algorithm 的收斂速度還蠻快的,大 概在 i=6~8 之間就可達到收斂的效果,我們就以這個經驗法則來做為之後實作的 參考。

圖 4-5 CORDIC Algorithm with Angle Calculation (1 – i)

實作電路設計

在頻率估計中,我們必須先算出需要補償的角度,圖 4-6 為其架構圖,當 i 為 0 時,多工器(multiplexer)選擇初始值

x 、

0

y 與

0

z ,當 i 大於 1 之後,多工器

0 選擇由加法器運算出來的結果

x 、

i

y 與

i

z 。d

i i

y 的正負號來決定,進而影響

i

z ,

i 在這裡我們關心的只有

z 的最終值,依照之前的討論,我們取出

i

z 做為最後的角

6 度。

±

±

± di

di

di

圖 4-6 Iterative CORDIC structure

算出補償的角度之後,就是以補償的角度來對輸入訊號做旋轉。如果依照 圖 4-6 的架構的話,必需提高七倍的 clock rate 才行,這時我們可以利用 pipeline 的方式來設計,如圖 4-7 所示,

z 為旋轉的角度,而

0

x 與

0

y 是欲旋轉向量的實

0 部與虛部。

z 的運算由查表(LUT,Look Up Table)即 ROM 而來,而其正負號來

i 用來控制每個加(減)法器該加還是該減。

x 與

0

y 再經過七級的旋轉之後,即完成

0 了頻率補償的動作了。

± ± ±

± ± ±

± ± ±

± ± ±

± ± ±

± ± ±

± ± ±

圖 4-7 Pipeline CORDIC structure

相關文件