資源描述:
《fpga環(huán)境下基于cordic運(yùn)算實(shí)現(xiàn)反正切運(yùn)算(vhdl)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、CORDIC算法實(shí)現(xiàn)反正切運(yùn)算算法1.前言CORDIC算法包括圓周系統(tǒng)、線性系統(tǒng)、雙曲系統(tǒng)三種旋轉(zhuǎn)系統(tǒng),每種系統(tǒng)又分別具有旋轉(zhuǎn)模式和向量模式兩種運(yùn)算模式。其中,運(yùn)用最為廣泛的時(shí)圓周系統(tǒng)的兩種運(yùn)算模式,本文也立足與項(xiàng)目應(yīng)用,僅闡述圓周系統(tǒng),其余系統(tǒng)可參看相關(guān)資料。2.算法分析要充分理解圓周系統(tǒng),我們需先引入其旋轉(zhuǎn)模式的概念,再以旋轉(zhuǎn)模式引申到向量的概念中去。CORDIC算法的旋轉(zhuǎn)模式運(yùn)算的實(shí)質(zhì)就是執(zhí)行一個(gè)平面內(nèi)旋轉(zhuǎn),如圖1所示,就是從一個(gè)坐標(biāo)點(diǎn)轉(zhuǎn)換到另一個(gè)坐標(biāo)點(diǎn)的過(guò)程.圖1.平面旋轉(zhuǎn)模式運(yùn)算示意圖如圖1中所示,原向量的坐標(biāo)表達(dá)式為(1)其中,r為向量的長(zhǎng)度,由于本文的目的是
2、討論角度的計(jì)算,所以,都假定向量旋轉(zhuǎn)過(guò)程中的長(zhǎng)度是固定不變的,這樣,我們可以專注于角度的變化。所以,目標(biāo)向量的坐標(biāo)表達(dá)式為(2)即用向量統(tǒng)一表示為(3)公式1表示由向量到向量的旋轉(zhuǎn)過(guò)程,即轉(zhuǎn)過(guò)的相角為,可以通過(guò)迭代運(yùn)算分多步執(zhí)行角度旋轉(zhuǎn),每一步完成旋轉(zhuǎn)的一部分.單步表述為:(4)其中表示下一步迭代需要執(zhí)行的運(yùn)算。根據(jù)公式2,必須確切知道每單步要旋轉(zhuǎn)的角度,具體計(jì)算方法闡述如下:為方便表示,并簡(jiǎn)化方程中的參量,方程(4)提取COS后變成(5)規(guī)定每一步所調(diào)整的角度為(6)即單次調(diào)整最大為當(dāng)n=0時(shí)調(diào)整,其后每次調(diào)整值逐步減小,如此多次調(diào)整后最終調(diào)整角度值即為目標(biāo)值,向量旋轉(zhuǎn)
3、完畢。即,其中為角度調(diào)整的方向,取值為{-1,+1},每次的取值由上次調(diào)整完后的角度剩余量的符號(hào)決定,將仍舊需要調(diào)整的角度定義為。(7)于是(8)<0表示調(diào)整過(guò)度,需要回調(diào),所以=-1,下一步要逆時(shí)針旋轉(zhuǎn),反之,=1,繼續(xù)按照逆時(shí)針調(diào)整。綜上所述,結(jié)合(5)、(6)式和(7)式以及旋轉(zhuǎn)模式下旋轉(zhuǎn)方向問(wèn)題,(5)式在工程實(shí)現(xiàn)時(shí)應(yīng)為(9)公式(9)是可以工程實(shí)現(xiàn)的迭代公式,試想,通過(guò)n次迭代運(yùn)算后,向量由原來(lái)位置經(jīng)過(guò)了n次不同角度的旋轉(zhuǎn),形成的新位置為(10)由上式可以看出,對(duì)于給定次數(shù)的向量旋轉(zhuǎn)(n為有限次),所有的cos乘積趨近于固定值,為(11)于是,令(12)此K值與
4、具體的迭代次數(shù)有關(guān),對(duì)于所有的初始向量(n=0)和旋轉(zhuǎn)角度而言,K時(shí)一個(gè)常數(shù)。而當(dāng)?shù)螖?shù)N趨向于無(wú)窮大時(shí),K值收斂且K0.67253。通常定義K叫做聚焦常數(shù),其倒數(shù)P1.64676,通常稱作旋轉(zhuǎn)增益,于是旋轉(zhuǎn)向量又寫為(13)在旋轉(zhuǎn)模式下,經(jīng)N次迭代運(yùn)算后,已趨近于0,即=1,CORDIC公式的輸出為,(14)公式(14)即為工程實(shí)現(xiàn)中的指導(dǎo)公式。在此種模式下,可以根據(jù)上式很方便的計(jì)算出一個(gè)給定角度的正弦、余弦和正切值。但在數(shù)字計(jì)算中,使用向量模式求取一個(gè)向量的角度更容易,我們此次的工程中需要求取的就是反正切的角度,這樣使用向量模式非常方便。向量模式的計(jì)算方法和旋轉(zhuǎn)模式
5、很相似,區(qū)別在于向量模式的輸入只有一組坐標(biāo)值,求取此向量的角度,只需要將此向量旋轉(zhuǎn),使向量的Y坐標(biāo)趨近于0,即,使向量旋轉(zhuǎn)到與實(shí)軸重合,所轉(zhuǎn)過(guò)的角度即為此向量的角度。如圖2所示圖2.向量模式下旋轉(zhuǎn)求角度示意圖并且,在計(jì)算過(guò)程中,的取值需取決于調(diào)整過(guò)程中的符號(hào),因?yàn)樵谙蛄磕J较乱{(diào)整的目標(biāo)位置為,故可根據(jù)的正負(fù)符號(hào)判斷向量轉(zhuǎn)動(dòng)的角度是否已經(jīng)超過(guò)目標(biāo)值。當(dāng)?shù)\(yùn)算N次后,,=1,實(shí)現(xiàn)指導(dǎo)公式變?yōu)椋海?15)注意,此時(shí)的取值與旋轉(zhuǎn)模式下的區(qū)別。其原則仍是+1表示要正向(逆時(shí)針)調(diào)整,-1表示要逆向(順時(shí)針)調(diào)整。將Z值初始化為,經(jīng)迭代運(yùn)算,當(dāng)運(yùn)算持續(xù)到Y(jié)=0時(shí),此時(shí)(16),此
6、即為我們需要的向量的反正切值,即為向量的角度。1.代碼實(shí)現(xiàn)基于以上算法原理,可實(shí)現(xiàn)計(jì)算的精確值,按照式(15),將Z賦初始值,由上一層模塊產(chǎn)生此反正切計(jì)算模塊的數(shù)據(jù)錄入使能load_dat_en,使能信號(hào)一個(gè)時(shí)鐘周期寬度,在此使能下錄入向量的坐標(biāo)值,在芯片化項(xiàng)目中,,即,把IK、QK分別看做平面坐標(biāo)下向量的實(shí)部與虛部,進(jìn)而計(jì)算此坐標(biāo)的相角。IK、QK值與load_dat_en一起有效,并隨之產(chǎn)生本模塊內(nèi)部的運(yùn)算時(shí)序計(jì)數(shù)器,根據(jù)運(yùn)算精度要求,目前需要8次迭代運(yùn)算即可逼近目標(biāo)值,而不是一定要計(jì)算到,所以此時(shí)序計(jì)數(shù)器安排為1~10循環(huán),在相應(yīng)位置執(zhí)行相應(yīng)操作,每個(gè)時(shí)鐘周期都計(jì)算
7、當(dāng)前X、Y、Z的值,并在8此迭代都計(jì)算完畢后檢測(cè)所有步驟的Y值是否為0,有為0的即輸出對(duì)應(yīng)的Z值作為相角值,如果沒有,則將第8次迭代結(jié)果作為最終結(jié)果輸出。輸出時(shí)產(chǎn)生一個(gè)數(shù)據(jù)輸出使能,一個(gè)時(shí)鐘周期寬度,告知上層調(diào)用模塊,可以讀取本模塊計(jì)算結(jié)果。在迭代運(yùn)算過(guò)程中,為方便計(jì)算,規(guī)定I/O口及模塊內(nèi)部的16bit數(shù)據(jù)在表征相角時(shí)涵蓋范圍是-180°~+180°,用16bit中的低15bit表示0°~180°,最高位表示符號(hào)位。這樣,可以得出相應(yīng)的一些關(guān)鍵角度所對(duì)應(yīng)的數(shù)值。角度數(shù)值90°X”4000”-90°X”C000”45°X”20