0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

CORDIC算法簡介

sanyue7758 ? 來源:FPGA算法工程師 ? 2023-03-28 09:39 ? 次閱讀

CORDIC算法簡介

信號處理領(lǐng)域,CORDIC(Coordinate Rotation Digital Computer,坐標(biāo)旋轉(zhuǎn)數(shù)字計(jì)算機(jī))算法具有重大工程意義。CORDIC算法由Vloder于1959年在設(shè)計(jì)美國航空導(dǎo)航控制系統(tǒng)時(shí)提出,主要用于解決導(dǎo)航系統(tǒng)中三角函數(shù)、反三角函數(shù)和開方等運(yùn)算的實(shí)時(shí)計(jì)算問題。

1971年,Walther將圓周系統(tǒng)、線性系統(tǒng)和雙曲線系統(tǒng)統(tǒng)一到一個CORDIC迭代方程里,從而額提出了一種統(tǒng)一的CORDIC算法形式。

CORDIC算法的核心是利用加法和移位的迭代操作去替代復(fù)雜的運(yùn)算,從而非常有利于硬件實(shí)現(xiàn)。CORDIC算法應(yīng)用廣泛,如離散傅里葉變換(DFT)、離散余弦變換(DCT)、離散Hartley變換、Chirp-Z變換、各種濾波以及矩陣中的奇異值分解。

在工程領(lǐng)域,可采用CORDIC算法實(shí)現(xiàn)直接數(shù)字頻率合成器(DDS)、計(jì)算I/Q信號的幅度和相位。

01

CORDIC基本原理

我們假設(shè)在笛卡爾坐標(biāo)系(也就是我們常見的XY直角坐標(biāo)系)中,將點(diǎn)(x1,y1)旋轉(zhuǎn)θ角度到點(diǎn)(x2,y2)的標(biāo)準(zhǔn)方法如下所示:

7feca6fc-ccde-11ed-bfe3-dac502259ad0.png

根據(jù)上圖,我們利用高中學(xué)習(xí)的三角函數(shù)、圓方程和極坐標(biāo)等中學(xué)知識,可以得到:

800f489c-ccde-11ed-bfe3-dac502259ad0.png

這被稱為是平面旋轉(zhuǎn)、向量旋轉(zhuǎn)或者線性 ( 矩陣) 代數(shù)中的 Givens 旋轉(zhuǎn)。

上面的式子,我們將大學(xué)二年級學(xué)習(xí)的線性代數(shù)知識拿出來,用矩陣的形式來表示,于是得到:

8025b802-ccde-11ed-bfe3-dac502259ad0.png

例如,我們做一個90°的相移,即θ=90:

80391a00-ccde-11ed-bfe3-dac502259ad0.png

這里注意cos和sin函數(shù)在直角坐標(biāo)系下的物理意義,于是我們得到下面的圖示。

80522e78-ccde-11ed-bfe3-dac502259ad0.png

上面的第一個式子,我們假設(shè)提出一個公因子cosθ,那么我們可以得到:

806d3362-ccde-11ed-bfe3-dac502259ad0.png

如果去除項(xiàng),我們得到 偽旋轉(zhuǎn) 方程式 :

808455ba-ccde-11ed-bfe3-dac502259ad0.png

即旋轉(zhuǎn)的角度是正確的,但是x 與 y 的值增加cos-1θ 倍 ( 由于cos-1θ> 1),所以模值變大。

注意我們并不能通過適當(dāng)?shù)臄?shù)學(xué)方法去除cosθ 項(xiàng) , 然而隨后我們發(fā)現(xiàn)去除項(xiàng)可以簡化坐標(biāo)平面旋轉(zhuǎn)計(jì)算操。

怎么說呢?

在XY坐標(biāo)系中,結(jié)合上面的偽旋轉(zhuǎn)公式,我們可以用下圖表示:

80a06a16-ccde-11ed-bfe3-dac502259ad0.png

于是,我們得出以下結(jié)論:

經(jīng)過偽旋轉(zhuǎn)之后,向量 R 的模值將增加1/cosθ 倍。

向量旋轉(zhuǎn)了正確的角度 , 但模值出現(xiàn)錯誤。

經(jīng)過偽旋轉(zhuǎn)后, 輸出進(jìn)行適當(dāng)?shù)姆?strong>伸縮(1/cosθ),是不是就可以得到旋轉(zhuǎn)后的坐標(biāo)了。

02

CORDIC方法

CORDIC 方法的核心是 ( 偽) 旋轉(zhuǎn)角θ,其中,

80c992ec-ccde-11ed-bfe3-dac502259ad0.png

這個等式是怎么推導(dǎo)出來的呢?

所以方程為:

80deaa10-ccde-11ed-bfe3-dac502259ad0.png

下面的表格指出用于 CORDIC 算法中每個迭代 (i) 的旋轉(zhuǎn)角度 (精確到 9位小數(shù)):

80f76f6e-ccde-11ed-bfe3-dac502259ad0.png

note:由于i是整數(shù),所以對應(yīng)的角度值都是一一確定的,只能通過幾個角度的加減組合來達(dá)到你所想要的角度值.

注意有三個方面的變化:

角度累加(減)

坐標(biāo)值累加(減)

向量的模(也就是長度的,相對于橫縱坐標(biāo)的)累加(減)

這三個累加的變化時(shí)不一樣的,注意區(qū)別,角度的累加和長度的累加有一定的對應(yīng)關(guān)系。

81151758-ccde-11ed-bfe3-dac502259ad0.png

03

角度累加器

8167a36a-ccde-11ed-bfe3-dac502259ad0.png

81925164-ccde-11ed-bfe3-dac502259ad0.png

上述三個方程式為圓周坐標(biāo)系中用于角度旋轉(zhuǎn)的 CORDIC 算法的表達(dá)式。后續(xù)部分中我們還將看到CORDIC 算法被用于其它的坐標(biāo)系,通過使用這些坐標(biāo)系可以執(zhí)行更大范圍的函數(shù)計(jì)算。

04

移位-加法算法

因此, 原始的算法現(xiàn)在已經(jīng)被減化為使用向量的偽旋轉(zhuǎn)來表示的迭代移位-相加算法 :

81bcae14-ccde-11ed-bfe3-dac502259ad0.png

因此,每個迭代需要:

81d5e3c0-ccde-11ed-bfe3-dac502259ad0.png

note:前面提到的去除 cos 項(xiàng)的原因是顯而易見的。當(dāng)將該項(xiàng)去除時(shí),轉(zhuǎn)換公式已經(jīng)被簡化為偽旋轉(zhuǎn)的迭代移位相加計(jì)算。

CORDIC 硬件實(shí)現(xiàn)結(jié)構(gòu):

81fc226a-ccde-11ed-bfe3-dac502259ad0.png

05

伸縮因子

前面提到,為了得到偽旋轉(zhuǎn)公式,我們把公因子cosθ忽略了,但在實(shí)際運(yùn)算中,不能就這樣簡單粗暴拋棄。

我們再次對cosθ進(jìn)行變形:

82211570-ccde-11ed-bfe3-dac502259ad0.png

于是,我們可以得到:

8243c412-ccde-11ed-bfe3-dac502259ad0.png

如果我們已知了將被執(zhí)行的迭代次數(shù),我們便可以預(yù)先計(jì)算出 1/Kn 的值,并通過將 1/Kn 與 x(n) 和 y(n)相乘來校正x(n) 和 y(n) 的最終值。

CORDIC有兩種工作模式:旋轉(zhuǎn)模式向量模式

82749178-ccde-11ed-bfe3-dac502259ad0.png

82a304f4-ccde-11ed-bfe3-dac502259ad0.png

82dc04f2-ccde-11ed-bfe3-dac502259ad0.png

8300501e-ccde-11ed-bfe3-dac502259ad0.png

06

三種坐標(biāo)系下的CORDIC

83325c4e-ccde-11ed-bfe3-dac502259ad0.png

8365cd2c-ccde-11ed-bfe3-dac502259ad0.png

然而, 我們將會看到,通過考慮其它坐標(biāo)系中的旋轉(zhuǎn), 我們可以直接計(jì)算更多的函數(shù), 如乘法和除法, 進(jìn)而間接計(jì)算更多的其它函數(shù)。

838088ba-ccde-11ed-bfe3-dac502259ad0.png

使用其它坐標(biāo)系的 CORDIC 算法的優(yōu)點(diǎn)是可以計(jì)算更多的函數(shù), 而缺點(diǎn)則是系統(tǒng)將變得更加復(fù)雜。當(dāng)把CORDIC 算法用于線性或雙曲坐標(biāo)系時(shí), 在圓周坐標(biāo)系中的旋轉(zhuǎn)角度集將不再有效。所以, 這些系統(tǒng)應(yīng)使用其它的兩種旋轉(zhuǎn)角度集。

我們會發(fā)現(xiàn),可以推導(dǎo)出可在 3 個坐標(biāo)系中表示 CORDIC 方程的通用公式。這意味著在方程式中引入兩個新變量。其中一個新變量 (e(i)) 代表了適當(dāng)?shù)淖鴺?biāo)系中用于表示旋轉(zhuǎn)的角度集。

當(dāng)把CORDIC算法用于雙曲線旋轉(zhuǎn)時(shí),伸縮因子K與圓周旋轉(zhuǎn)的因子有所不同。

83bcc3ac-ccde-11ed-bfe3-dac502259ad0.png

我們通過引入一個新變量μ,得到CORDIC的通用方程

83d918d6-ccde-11ed-bfe3-dac502259ad0.png

至此,三個坐標(biāo)系下的CORDIC方程得到大一統(tǒng)。

842e27b8-ccde-11ed-bfe3-dac502259ad0.png

845fee92-ccde-11ed-bfe3-dac502259ad0.png

8491f608-ccde-11ed-bfe3-dac502259ad0.png

84b68b08-ccde-11ed-bfe3-dac502259ad0.png

在使用FPGA進(jìn)行CORDIC算法實(shí)現(xiàn)時(shí),理想CORDIC 架構(gòu)取決于具體應(yīng)用中速率面積的權(quán)衡。

可以將 CORDIC 方程直接翻譯成迭代型的位并行設(shè)計(jì),然而:

位并行變量移位器不能很好地映射到 FPGA 中

需要若干個 FPGA 單元。導(dǎo)致設(shè)計(jì)規(guī)模變大而設(shè)計(jì)時(shí)間變長。






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 信號處理
    +關(guān)注

    關(guān)注

    48

    文章

    1030

    瀏覽量

    103291
  • DDS
    DDS
    +關(guān)注

    關(guān)注

    21

    文章

    634

    瀏覽量

    152690
  • DFT
    DFT
    +關(guān)注

    關(guān)注

    2

    文章

    231

    瀏覽量

    22739
  • CORDIC算法
    +關(guān)注

    關(guān)注

    0

    文章

    17

    瀏覽量

    9741

原文標(biāo)題:什么是CORDIC算法

文章出處:【微信號:處芯積律,微信公眾號:處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    CORDIC理論分析

      1、CORDIC 理論   1.1、 坐標(biāo)旋轉(zhuǎn)數(shù)字計(jì)算機(jī)CORDIC   坐標(biāo)旋轉(zhuǎn)數(shù)字計(jì)算機(jī)CORDIC(COordinate Rotation DIgital Computer)
    發(fā)表于 07-28 17:57 ?1828次閱讀

    基于改進(jìn)的CORDIC算法的FFT復(fù)乘及其FPGA實(shí)現(xiàn)

    耗費(fèi)了FFT運(yùn)算中大量的乘法器資源。CORDIC算法只需簡單的移位與加減運(yùn)算就能實(shí)現(xiàn)向量旋轉(zhuǎn),具有使用資源少、硬件規(guī)模小等優(yōu)勢。因此在FFT蝶形運(yùn)算中用其代替?zhèn)鹘y(tǒng)FFT運(yùn)算中的復(fù)數(shù)乘法器,可以獲得更好
    發(fā)表于 07-11 21:32

    CORDIC算法求助

    請問CORDIC算法用verilog算法實(shí)現(xiàn)時(shí),角度累加器中的45度,26.56度,14.04度怎么跟verilog語言相對應(yīng)?
    發(fā)表于 07-11 20:18

    FPGA設(shè)計(jì)中必須掌握的Cordic算法

    大多數(shù)工程師在碰到需要在 FPGA 中實(shí)現(xiàn)諸如正弦、余弦或開平方這樣的數(shù)學(xué)函數(shù)時(shí),首先會想到的是用查找表,可能再結(jié)合線性內(nèi)插或者冪級數(shù)(如果有乘法器可用)。不過對這種工作來說,CORDIC 算法
    發(fā)表于 09-19 09:07

    高性能HPOR CORDIC算法及實(shí)現(xiàn)

    CORDIC 算法在通信和圖像處理等各個領(lǐng)域有著廣泛的應(yīng)用,但是浮點(diǎn)CORDIC 由于迭代延時(shí)大且實(shí)現(xiàn)復(fù)雜沒有得到很好的應(yīng)用,本文提出了一種修正浮點(diǎn)CORDIC
    發(fā)表于 12-15 14:27 ?15次下載

    基于CORDIC算法的載波同步鎖相環(huán)設(shè)計(jì)

    研究了一種利用CORDIC算法的矢量及旋轉(zhuǎn)模式對載波同步中相位偏移進(jìn)行估計(jì)并校正的方法。設(shè)計(jì)并實(shí)現(xiàn)了基于CORDIC算法的數(shù)字鎖相環(huán)。通過仿真,驗(yàn)證了設(shè)計(jì)的有效性和高效性。
    發(fā)表于 12-15 14:49 ?0次下載
    基于<b class='flag-5'>CORDIC</b><b class='flag-5'>算法</b>的載波同步鎖相環(huán)設(shè)計(jì)

    基于CORDIC算法2FSK調(diào)制器的FPGA設(shè)計(jì)

    本文提出了應(yīng)用CORDIC(Coordinate Rotation Digital Computer)算法實(shí)時(shí)計(jì)算正弦值的方案,并基于CORDIC算法在FPGA芯片上設(shè)計(jì)了2FSK調(diào)制
    發(fā)表于 05-31 10:22 ?1810次閱讀
    基于<b class='flag-5'>CORDIC</b><b class='flag-5'>算法</b>2FSK調(diào)制器的FPGA設(shè)計(jì)

    雙模式CORDIC算法的FPGA實(shí)現(xiàn)

    CORDIC算法將復(fù)雜的算術(shù)運(yùn)算轉(zhuǎn)化為簡單的加法和移位操作,然后逐次逼近結(jié)果。這種方法很好的兼顧了精度、速度和硬件復(fù)雜度,它與VLSI技術(shù)的結(jié)合對DSP算法的硬件實(shí)現(xiàn)具有極大的意義
    發(fā)表于 06-27 17:27 ?66次下載
    雙模式<b class='flag-5'>CORDIC</b><b class='flag-5'>算法</b>的FPGA實(shí)現(xiàn)

    cordic算法verilog實(shí)現(xiàn)(簡單版)

    cordic算法verilog實(shí)現(xiàn)(簡單版)(轉(zhuǎn)載)module cordic(clk, phi, cos, sin); parameter W = 13, W_Z = 14; input clk; input [W_Z-1
    發(fā)表于 02-11 03:06 ?3264次閱讀
    <b class='flag-5'>cordic</b><b class='flag-5'>算法</b>verilog實(shí)現(xiàn)(簡單版)

    高速低功耗CORDIC算法的研究與實(shí)現(xiàn)

    針對傳統(tǒng)CORDIC算法流水線結(jié)構(gòu)的迭代次數(shù)過多,運(yùn)算速度不夠快,消耗硬件資源較多的缺點(diǎn),改進(jìn)了一種基于旋轉(zhuǎn)模式并行運(yùn)算的CORDIC算法。該算法
    發(fā)表于 11-16 10:46 ?14次下載
    高速低功耗<b class='flag-5'>CORDIC</b><b class='flag-5'>算法</b>的研究與實(shí)現(xiàn)

    基于FPGA的Cordic算法實(shí)現(xiàn)的設(shè)計(jì)與驗(yàn)證

    本文是基于FPGA實(shí)現(xiàn)Cordic算法的設(shè)計(jì)與驗(yàn)證,使用Verilog HDL設(shè)計(jì),初步可實(shí)現(xiàn)正弦、余弦、反正切函數(shù)的實(shí)現(xiàn)。將復(fù)雜的運(yùn)算轉(zhuǎn)化成FPGA擅長的加減法和乘法,而乘法運(yùn)算可以用移位運(yùn)算代替
    發(fā)表于 07-03 10:18 ?2769次閱讀
    基于FPGA的<b class='flag-5'>Cordic</b><b class='flag-5'>算法</b>實(shí)現(xiàn)的設(shè)計(jì)與驗(yàn)證

    基于CORDIC的高速Sobel算法實(shí)現(xiàn)

    為提高圖像邊緣檢測的處理速度,提出一種基于CORDIC的高速Sobel算法實(shí)現(xiàn)。
    的頭像 發(fā)表于 10-05 09:54 ?3572次閱讀
    基于<b class='flag-5'>CORDIC</b>的高速Sobel<b class='flag-5'>算法</b>實(shí)現(xiàn)

    CORDIC算法的原理及具體應(yīng)用

    CORDIC(Coordinate Rotation Digital Computer)算法即坐標(biāo)旋轉(zhuǎn)數(shù)字計(jì)算方法,是J.D.Volder1于1959年首次提出,主要用于三角函數(shù)、雙曲線、指數(shù)、對數(shù)
    的頭像 發(fā)表于 11-13 07:09 ?6678次閱讀

    一文帶你們了解什么是CORDIC算法

    CORDIC算法簡介 在信號處理領(lǐng)域,CORDIC(Coordinate Rotation Digital Computer,坐標(biāo)旋轉(zhuǎn)數(shù)字計(jì)算機(jī))
    的頭像 發(fā)表于 04-11 11:16 ?1.5w次閱讀
    一文帶你們了解什么是<b class='flag-5'>CORDIC</b><b class='flag-5'>算法</b>

    深度解析CORDIC算法原理

    CORDIC算法的思想是通過迭代的方法,使得累計(jì)旋轉(zhuǎn)過的角度的和無限接近目標(biāo)角度。它是一種數(shù)值計(jì)算逼近的方法,運(yùn)算只有移位和加減。
    的頭像 發(fā)表于 04-29 16:48 ?2815次閱讀
    深度解析<b class='flag-5'>CORDIC</b><b class='flag-5'>算法</b>原理