




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
基于FPGA的Cordic算法實現的設計與驗證CORDIC(CoordinateRotationDigitalComputer)算法即坐標旋轉數字計算方法,是J.D.Volder1于1959年首次提出,主要用于三角函數、雙曲線、指數、對數的計算。該算法通過基本的加和移位運算代替乘法運算,使得矢量的旋轉和定向的計算不再需要三角函數、乘法、開方、反三角、指數等函數。本文是基于FPGA實現Cordic算法的設計與驗證,使用VerilogHDL設計,初步可實現正弦、余弦、反正切函數的實現。將復雜的運算轉化成FPGA擅長的加減法和乘法,而乘法運算可以用移位運算代替。Cordic算法有兩種模式,旋轉模式和向量模式??梢栽趫A坐標系、線性坐標系、雙曲線坐標系使用。本文線初步實現在圓坐標系下的兩種模式的算法實現。Cordic算法簡化旋轉模式,迭代位移算法。假設有一點P0(x0,y0),經過逆時針旋轉角度θ,到達點Pm(xm,ym),我們根據數學運算可以得到公式如下:xm=x0cosθ-y0sinθ=cosθ(x0–y0tanθ)ym=y0cosθ+x0sinθ=cosθ(y0–x0tanθ)如果不考慮旋轉后的向量模值,只考慮旋轉角度,即去掉cosθ,得到如下方程式。這里旋轉的角度的正確的,但x和y的值增加。cosθ值是小于等于1的,值大于等于1,所以模值應該增大。我們不能通過適當的數學計算去掉cosθ,但是去掉cosθ項可以方便我們后面的坐標平面旋轉的計算。這里稱為偽旋轉。xm=x0–y0tanθym=y0–x0tanθCordic的方法核心就是偽旋轉,將旋轉角θ細化成若干個大小固定的角度θi,規定θi滿足tanθi=2^-i,通過一系列的迭代旋轉,每次旋轉θi,i為迭代次數,規定∑θi的范圍即旋轉角度θ的范圍為[-99.7,99.7]。如果θ的大于這個范圍則可通過三角運算操作轉化到該范圍的角度。我們通過事先將所有每次旋轉的角度計算出來,由于每次旋轉的角度是固定的,所以經過i次旋轉的∑θi可能會超過θ,所以就必須設置一個方向值di,如果旋轉角度之和已經小于θ,則di為1,下次旋轉繼續為順時針旋轉,如果旋轉角度之和大于θ,則di為-1,下次旋轉為逆時針。設置zi+1為旋轉剩余角度,zi+1=z0–dizi,z0=θ,隨著i值得增大,zi+1會趨向于0時,即旋轉結束。di與zi的符號位相同。采用偽旋轉的方法,每次提出一個cosθi,旋轉結束后會產生一個∏cosθi的累乘,一旦我們確定了迭代次數,∏cosθi就是一個常數,迭代公式可寫為。這是將cosθi提出、tanθi替換成2^-i后的結果。di與zi的符號位相同。xi+1=xi-di*yi*2^-iyi+1=yi+di*xi*2^-izi+1=z0-di*θi設迭代i=n-1,那么旋轉n次后得到Pm的坐標應該為(xn*∏cosθi,yn*∏cosθi)。應為每次迭代都會提出一個cosθi,旋轉n次后的xn和yn就會少乘一個∏cosθi,所以實際上最終的Pm坐標角度近似于(xn*∏cosθi,yn*∏cosθi)。xn*∏cosθi=x0cosθ-y0sinθyn*∏cosθi=y0cosθ+x0sinθxn=1/∏cosθi(x0cosθ–y0sinθ)yn=1/∏cosθi(y0cosθ–x0sinθ)伸縮因子,KN=1/∏cosθi,已知迭代次數,我們可以預先計算KN的值。如下這是博主使用MATLAB計算出的迭代結果數值。xn=KN(x0cosθ–y0sinθ)yn=KN(y0cosθ–x0sinθ)從上表可以得出,我們預先計算出KN的值,然后令x0=∏cosθi,y0=0,則上述公式可化簡為xn=cosθyn=sinθ即可實現正弦、余弦操作了。旋轉模式總結一下,Cordic算法旋轉模式使用VerilogHDL的實現流程(1)確定迭代次數,將每次迭代的角度計算出來,預先定義為參數,為了避免浮點運算,將角度值向左移位16位,取整數部分。(2)根據迭代公式進行迭代計算,本設計取16次迭代,從上表可以看出,當迭代次數越大時,1/∏cosθi會趨向于一個確定值。如果對結果精度要求更高,可以設置更高的迭代次數,根據迭代次數,可以將伸縮因子KN=1/∏cosθi計算出來。同樣將其左移16位。xi+1=xi-di*yi*2^-iyi+1=yi+di*xi*2^-izi+1=z0-di*θi(3)設置x0=∏cosθi,y0=0,則求出x16=cosθ,y16=sinθ。這里需要注意的是,我們在進行迭代運算的時候,將2^-i變成移位運算,對于正余弦來說是有正負的,所以在一開始定義的時候,就應該定義成有符號數,Verilog中也可以定義有符號數,最高位表示符號位,定義如下迭代寄存器定義為有符號數,那么我們移位運算就不能用》》邏輯右移《《邏輯左移或來移位了,而是用》》》算術右移和《《《算術左移。邏輯左移也就相當于算數左移,右邊統一添0,邏輯右移,左邊統一添0,算數右移,左邊添加的數和符號有關。例如1010_1010,[]是添加的位邏輯左移一位:0101_010[0]算數左移一位:0101_010[0]邏輯右移一位:[0]101_0101算數右移一位:[1]101_0101迭代運算采用16級流水線,進行運算,最終需要判斷輸出的正余弦值在哪個象限,前面講旋轉角度θ的范圍為[-99.7,99.7],不在這個范圍我們要進行三角運算使其滿足這個范圍,當輸入的角度小于90度即可進行計算,當輸入角度大于90度小于180度,將輸入角度減去90度并設定當前角度處于第二象限,然后進行計算,當輸入角度大于180度小于270度,將輸入的角度減去180度設置當前角度處于第三象限,進行計算,當輸入的角度大于270度,減去270設置當前角度處于第四象限,進行計算。象限的設定通過quarant寄存器實現。如果角度在第一象限,sin(x)=sin(a),cos(x)=sin(a)最后的結果x16=cosθ,y16=sinθ,這里我想起了那句口訣,一全正,二正弦,三正切,四余弦如果角度在第二象限,sin(x)=sin(a+90)=cos(a),cos(x)=cos(a+90)=-sin(a)如果角度在第三象限,sin(x)=sin(a+180)=-sin(a),cos(x)=cos(a+180)=-cos(a)如果角度在第四象限,sin(x)=sin(a+270)=cos(a),cos(x)=cos(a+270)=-sin(a)對于正數,我們直接賦值輸出,負數,這里使用有符號數表示,將其取反加1即可。最終使用modelsim對算法進行仿真,從波形圖上看已經初步實現了sin,cos函數。向量模式Cordic算法在向量模式下的計算方法和旋轉模式基本上是類似的,設有一點P0(x0,y0),經過順時針旋轉角度到與軸重合,得到點Pm(xm,ym),即ym=0。xm=x0cosθ-y0sinθ=cosθ(x0–y0tanθ)ym=y0cosθ+x0sinθ=cosθ(y0–x0tanθ)=0我們設置x0=x,y0=y,z0=0,迭代次數為16,經過16次迭代后得到zn=θ=arctan(y/x)和坐標所代表的向量的模值d=xm=xn*∏cosθi,di與yi方向相反,即當時結束運算。實現方法為判斷yi的符號位,符號位為1,di為1,符號位為0,di為-1。xi+1=xi-di*yi*2^-iyi+1=yi+di*xi*2^-izi+1=z0-di*θi關于反正切函數,由于在[-99.7°,99.7°]范圍內,所以我們輸入向量P0(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 舞蹈之美與力量
- 22讀不完的書教學設計-2024-2025學年三年級上冊語文統編版
- 小滿天氣研析與應對
- 《有趣的七巧板》(教學設計)-2024-2025學年蘇教版數學二年級上冊
- 二零二五車輛租賃合同終止協議書
- 二零二五演藝事務授權委托合同書范例
- 二零二五版餐飲公司股東協議書合同書協議書范例
- 保潔勞務派遣合同書二零二五年
- 物業停車位協議書
- 場院出租合同書范例二零二五年
- DB13T 1563-2012 淡水池塘標準化改造技術規范
- 偏頭痛PPT課件(PPT 43頁)
- 語料庫在英語教學中的應用.課件
- 工程管理專業畢業論文——施工組織設計
- 最新國際貿易術語培訓
- 2021年高考真題--化學(江蘇卷)(附解析)
- 項目功能需求調研表通用精選文檔
- 基于節約里程法的大潤發超市濟南地區配送路徑優化研究
- 工廠個人簡歷登記表格
- JJG機動車檢測專用軸輪重儀檢定規程
- 化工概論:典型化工工藝
評論
0/150
提交評論