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 、
0y 與
0z ,當 i 大於 1 之後,多工器
0 選擇由加法器運算出來的結果x 、
iy 與
iz 。d
i i由y 的正負號來決定,進而影響
iz ,
i 在這裡我們關心的只有z 的最終值,依照之前的討論,我們取出
iz 做為最後的角
6 度。±
±
± di
−
di
di
−
圖 4-6 Iterative CORDIC structure
算出補償的角度之後,就是以補償的角度來對輸入訊號做旋轉。如果依照 圖 4-6 的架構的話,必需提高七倍的 clock rate 才行,這時我們可以利用 pipeline 的方式來設計,如圖 4-7 所示,
z 為旋轉的角度,而
0x 與
0y 是欲旋轉向量的實
0 部與虛部。z 的運算由查表(LUT,Look Up Table)即 ROM 而來,而其正負號來
i 用來控制每個加(減)法器該加還是該減。x 與
0y 再經過七級的旋轉之後,即完成
0 了頻率補償的動作了。± ± ±
± ± ±
± ± ±
± ± ±
± ± ±
± ± ±
± ± ±
圖 4-7 Pipeline CORDIC structure