cordic 算法學習記錄

參考:b站教學視頻FPGA:Cordic算法介紹與實現_嗶哩嗶哩_bilibili

? ? ? ?FPGA硬件實現加減法、移位等操作比較簡單,但是實現乘除以及函數計算復雜度高且占用資源多,常見的計算三角函數/平方根的求解方式有①查找表:先把函數對應結果存在存儲器中,根據輸入地址確定計算結果;②泰勒展開:把三角函數等函數求解展開成乘、除、加法進行求解。這兩種方法耗費ram/乘法器的資源巨大,為了僅用簡單的移位/加減法運算求解出復雜三角函數,提出了cordic算法。

????????cordic算法:coordinate rootation digital computer 坐標旋轉數字計算方法(硬件加速算法)。

類似于二分法,反復迭代,逐次逼近最終值,計算結果達到一定精度即可終止。與二分法不同的是,這里不是每次都改變二分之一的角度,而是改變二分之一的tan值,計算出對應角度,從而把復雜運算轉換為簡單的移位運算。

????????問題:已知某點坐標,①求旋轉到X軸需要的角度(向量模式);②求旋轉某角度后的坐標(旋轉模式); ???

對于旋轉模式:

模塊輸入為:坐標(x,y),要旋轉的角度z。輸出為:新的坐標(x1,y1)

根據新坐標的表達式,當輸入x=1/k,y=0時,輸出新的坐標為(cosz,sinz),即求出了cosz和sinz的值。

對于向量模式:

模塊輸入為:坐標(x,y),要旋轉的角度z。輸出為:新點的模長和角度。

根據輸出的表達式,當輸入為x=1,z=0時,輸出為(x,y)的角度:arctan(y/x)。

除此(圓周旋轉系統)之外,還有線性旋轉、雙曲旋轉兩種系統(迭代方程不同),根據需要查看文獻了解。

cordic算法用途之一:求相位角!

算法原理:

已知點(x1,y1),求旋轉角度z后的坐標(x2,y2);

? ? ? ? ? ? ? ? ? ? ? ?

讓point1以θ1、θ2...... θn逐次逼近point2(此過程需調節正負號),直到誤差在可接受的范圍內:

為了確保數值準確,即不取約等于,我們從函數值入手,只確保tan θn?=1/2n-2?,不去管θn的具體值,即存在

?求得如下角度:

后續的旋轉角度均按這個表格來旋轉:

?即把求解tanx函數轉化成了移位運算:

求解坐標就轉化成了加減運算和移位運算

對于系數cos,當角度趨近于0時,cos值趨近于1,可以知道當迭代次數足夠高時,伸縮因子基本是一個常數。按照上面角度的表格,通過計算可知,當迭代次數大于16次時,伸縮因子固定為0.6073,所以我們可以設置迭代次數高于16,把伸縮因子固定為0.673,在所有運算結束后再乘上去。

相位誤差取決了迭代的次數,用上述表格,當迭代次數確定為16次時,求解的相位誤差小于等于18°。

假定每次坐標旋轉θ,且tanθn=1/2n-2?,則可以得出單次迭代的坐標公式(沒考慮伸縮因子):

其中,di是旋轉方向的判定因子(正負)。對于di的值,引入角度累加器來判定,當累加的角度大于原始角度時,di為負,小于則di為正,

cordic算法即迭代算法(如以上迭代公式),通過多次迭代降低誤差,逼近目標值。

迭代有兩種模式:

①串行模塊:控制復雜,資源較少,速度較慢

②并行模塊:資源較多,速度較快,吞吐量大

atan函數:返回(-pi/2,pi/2)范圍的相位角;

atan2函數:返回(-pi,pi)范圍的相位角;

項目中用的是atan2函數。

quartus cordic ip核:

包含:

①sin cos

②atan2: 返回(-pi,pi)范圍的相位角;

③vector translate function:向量模式

④vector rotate function:旋轉模式

quartus 的cordic IP核用modelsim-se進行仿真時需要添加altera庫,暫時沒有進行仿真。(貌似如果用altera-modelsim就不需要再手動添加)

cordic算法的fpga實現:

?????? 求相位角:對于串行的方法來說,只需要根據迭代的表達式通過狀態機即可實現(線性序列機也可以,就是比較啰嗦,對于有相同迭代表達式的算法來說,狀態機方便)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/215348.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/215348.shtml
英文地址,請注明出處:http://en.pswp.cn/news/215348.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JVM面試連環炮:你準備好迎接挑戰了嗎?

在Java開發領域,JVM面試一直是一個熱門話題。作為一名優秀的開發者,你是否已經準備好迎接這場挑戰了呢?今天,我們就來深度解析一下JVM面試的熱點問題,幫助你更好地應對面試,一舉拿下offer! 1、…

Python 使用sphinx生成API文檔

目錄 前言: 項目層級 Python項目docstring規范 Example Google Style Python Docstrings Example NumPy Style Python Docstrings reStructuredText Style 設置代碼docstrings風格(pycharm) 安裝sphinx 創建sphinx文檔項目 配置conf.py文件 編譯代碼為api文檔 編譯…

vim + ctags 跳轉, 查看函數定義

yum install ctags Package ctags-5.8-13.el7.x86_64 already installed and latest version 創建 /home/mzh/pptp-master/tags.sh #!/usr/bin/shWORKDIR/home/mzh/pptp-masterfind ${WORKDIR} -name "*.[c|h]" | xargs ctags -f ${WORKDIR}/tags find /usr/inclu…

final的安全發布

final的安全發布 兩個關鍵字“發布”“安全” 所謂發布通俗一點的理解就是創建一個對象,使這個對象能被當前范圍之外的代碼所使用 比如Object o new Object(); 然后接下來使用對象o 但是對于普通變量的創建,之前分析過,大致分為三個步驟&am…

k8s之身份認證與權限

Kubernetes 中提供了良好的多租戶認證管理機制,如 RBAC、ServiceAccount 還有各種策略等。 通過該文件可以看到已經配置了 RBAC 訪問控制 /usr/lib/systemd/system/kube-apiserver.service 1.1 認證 所有 Kubernetes 集群有兩類用戶:由 Kubernetes 管理的…

mysql數據庫學習筆記(1)

今天開始學mysql數據庫,為什么要學這個呢,因為數據庫可結構化存儲大量的數據信息,方便用戶進行有效的檢索和訪問。數據庫可有效地保持數據信息的一致性、完整性、降低數據冗余。數據庫可滿足應用的共享和安全方面的要求,把數據放在…

java--認識異常、自定義異常

1.異常體系 Error:代表的系統級別錯誤(屬于嚴重問題),也就是說系統一旦出現問題,sun公司會把這些問題封裝成Error對象給出來,說白了,Error是給sun公司自己用的,不是給我們程序員用的,因此我們開…

MacOS下homebrew的安裝與使用

安裝Homebrew //刪除原來的文件,可以在刪除前查看下Cellar文件夾下已安裝的包,homebrew將工具安裝在這個文件夾下,并在/usr/local/bin下建立連接 sudo -irm -rf /usr/local/Cellar /usr/local/.gi sudo chown -R liudong /usr/local //更新文件屬主為liu…

114. 二叉樹展開為鏈表 --力扣 --JAVA

題目 給你二叉樹的根結點 root ,請你將它展開為一個單鏈表: 展開后的單鏈表應該同樣使用 TreeNode ,其中 right 子指針指向鏈表中下一個結點,而左子指針始終為 null 。展開后的單鏈表應該與二叉樹 先序遍歷 順序相同。 解題思路 …

通過Ai幫我們寫前端界面設計

現在我要寫一個前端界面,from表單,讓用戶登錄使用的,提交表單之前先分析用戶名和密碼是否填的完成,并且檢查密碼必須滿足 包含大小寫,數字,密碼長度必須在8到20之間,不滿足不可以提交。用戶名必…

ethtool

ethtool ethtool是一個常用的命令行工具,用于配置和查詢以太網接口的驅動程序和硬件參數。它提供了一種簡單的方式來檢查和修改網絡接口的設置,以及獲取與以太網接口相關的統計數據和狀態信息。 ethtool可以執行以下常見的操作: 查詢接口信息…

【Hadoop】修改YARN配置文件

本節需要修改的 YARN 配置文件保存在$HADOOP_HOME/etc/haoop 目錄下,需要修改的文件共有 7 個,分別是:core-site.xml, hadoop-env.sh, hdfs-site.xml, yarn-site.xml, yarn-env.sh, mapred-site.xml, slave. 這些文件的用途: core…

Mysql:慢cpu過高慢sql查詢方法

通過 processlist查詢較為便捷,只是結果的info中只會顯示sql的前100個字符。 show processlist 通過下面語句查詢可顯示當前正在執行的完整sql。 SELECT * FROM information_schema.processlist WHERE COMMAND ‘Query’; 借助navicate數據庫工具的監控功能查詢庫的…

大數據技術2:大數據處理流程

前言:下圖是一個簡化的大數據處理流程圖,大數據處理的主要流程包括數據收集、數據存儲、數據處理、數據應用等主要環節。 1.1 數據收集 大數據處理的第一步是數據的收集。現在的中大型項目通常采用微服務架構進行分布式部署,所以數據的采集需…

【常用字符大全】含emoji表情

常用符號大全 ?????????????▲???↑↓◆◇⊙■□△▽─│??♂♀?????????▼???≈←→?◎☉★☆⊿※¡━┃??ツ?????©?Σ????卐√↖↗●?Θ◤◥︻〖〗┄┆℃℉?????¢€£∞?★?↙↘○?⊕◣◢︼【】┅┇…

Java 中適合使用隊列(Queue)的場景

在 Java 中,隊列(Queue)適合用于以下場景: 先進先出(FIFO)數據處理:當需要按照數據的添加順序進行處理時,可以使用隊列。例如,處理任務隊列、消息隊列等。 示例&#xff…

MySQL慢SQL優化思路

MySQL慢SQL優化思路 具體思路: 1、慢查詢日志記錄慢 SQL 2、explain 分析 SQL 的執行計劃 3、profile 分析執行耗時 4、Optimizer Trace 分析詳情 5、確定問題并采用相應的措施 1、查看慢日志 1.1 使用命令查詢慢日志配置 mysql> show variables like s…

mysql 5.7.34升級到5.7.44修補漏洞

mysql 5.7.34舊版本,漏掃有漏洞,升級到最新版本 舊版本5.7.34在 /home/mysql/mysql中安裝 備份舊版本數據還有目錄 數據庫備份升級 tar -xf mysql-5.7.44-el7-x86_64.tar #覆蓋舊版本數據庫文件 #注意看看文件是否和你起服務的用戶一樣 \cp -r mysql-5…

decomposition-based multi-objective algorithm4SPDPTW

關鍵詞 文章概述 研究背景 多目標選擇性接送和配送問題(PDPs):研究涉及多目標選擇性接送和配送問題,這些問題傳統上從單一目標角度進行探討,以尋找最具盈利性的請求集合,同時遵守一系列限制條件。 經濟和…

基于OpenCV+CNN+IOT+微信小程序智能果實采摘指導系統——深度學習算法應用(含python、JS工程源碼)+數據集+模型(五)

目錄 前言總體設計系統整體結構圖系統流程圖 運行環境Python環境TensorFlow 環境Jupyter Notebook環境Pycharm 環境微信開發者工具OneNET云平臺 模塊實現1. 數據預處理2. 創建模型并編譯3. 模型訓練及保存4. 上傳結果5. 小程序開發1)查詢圖片2)查詢識別結…