在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

FPGA實(shí)現(xiàn)Cordic算法求解arctanθ

FPGA研究院 ? 來(lái)源:FPGA之旅 ? 2023-09-27 09:30 ? 次閱讀

一. 簡(jiǎn)介

由于在項(xiàng)目中需要使用的MPU6050,進(jìn)行姿態(tài)解算,計(jì)算中設(shè)計(jì)到arctan 和 sqr(x*2 + y * 2),這兩部分的計(jì)算,在了解了一番之后,發(fā)現(xiàn)Cordic算法可以很方便的一次性求出這兩個(gè)這兩部分的計(jì)算。另外也可以一次性求出sin和cos的值。另外該算法還可以計(jì)算其他的一些公式(沒(méi)做過(guò)多的了解)。

二.Cordic算法

該算法的核心實(shí)現(xiàn)就是旋轉(zhuǎn)逼近,每次旋轉(zhuǎn)一定的角度,無(wú)限的逼近所給定的角度值。

1. 理論基礎(chǔ)

首先有向量P0,現(xiàn)在要將其旋轉(zhuǎn)θ角度,到Pm。那么Pm的坐標(biāo)值如下

xm = x0cosθ - y0sinθ = cosθ(x0 – y0tanθ)

ym = x0sinθ + y0cosθ = cosθ(y0 + x0tanθ)

P0和Pm均在單位圓上,另外假設(shè)現(xiàn)在P0在X軸上,即 X0 = 1,y0 = 0。上式就可以變?yōu)槿缦嘛@示

xm = x0cosθ - y0sinθ = cosθ

ym = x0sinθ + y0cosθ = sinθ

可以看到Pm的坐標(biāo)值,就是sinθ 和 cosθ的值。這就是理論基礎(chǔ)。

52cb0070-5cc5-11ee-939d-92fbcf53809c.png

2. sinθ 和 cosθ 算法實(shí)現(xiàn)

有了理論支持后,我們只需要求解Pm的坐標(biāo)即可。直接旋轉(zhuǎn)θ不太可能,但是我們可以每次旋轉(zhuǎn)特定的角度θi (tanθi = 1/2^i),讓我們的角度值逼近θ即可。于是就有了如下迭代公式。

x(i+1) = cosθi* (xi – yi * tanθi)

y(i+1) = cosθi * (yi + xi * tanθi)

θ(i+1) = θi (+-) dθi

如果當(dāng)前角度小于設(shè)定角度,那么就加dθ ,大于設(shè)定角度 , 那么就減dθ。由于每次旋轉(zhuǎn)的dθ,會(huì)越來(lái)越小,所以旋轉(zhuǎn)的當(dāng)前角度會(huì)越來(lái)越來(lái)接近設(shè)定角度。

計(jì)算過(guò)程中 ,cosθi,只充當(dāng)縮放因子,對(duì)旋轉(zhuǎn)方向沒(méi)有影響。可以先在軟件中提取技術(shù)出來(lái)。每次旋轉(zhuǎn)角度值 和 對(duì)應(yīng)的 cos值如下。

52d742ea-5cc5-11ee-939d-92fbcf53809c.png

3. arctan (x,y)和 sqr(x*2 + y * 2)算法實(shí)現(xiàn)

在求解sinθ 和 cosθ 的時(shí)候,知道,給定一個(gè)角度,按照上述方法就可以求解。現(xiàn)在將其反過(guò)來(lái),給定sinθ 和 cosθ的值,也就是Pm的坐標(biāo)(可能不在單位圓上,只是模值縮放了),現(xiàn)在只需要將其旋轉(zhuǎn)到X軸的正半軸上,即Y = 0 ,X > 0的時(shí)候,所旋轉(zhuǎn)過(guò)的角度值即arctan (x,y)。

然后P0的X坐標(biāo)值即sqr(x*2 + y * 2)。旋轉(zhuǎn)過(guò)程中,向量的模值是不會(huì)改變的,而Pm的模值就是sqr(x*2 + y * 2)。

三.Cordic算法實(shí)現(xiàn)

首先將上述角度值,存儲(chǔ)到verilog中,需要進(jìn)行擴(kuò)大處理。由于tanθi = 1/2^i),所以對(duì)應(yīng)的tanθ也是知道的。在相乘的時(shí)候,只需要將對(duì)應(yīng)的數(shù)右移對(duì)應(yīng)的位數(shù)即可

`define rot0 32'd2949120    //45度*2^16
`define rot1 32'd1740992    //26.5651度*2^16
`define rot2 32'd919872    //14.0362度*2^16
`define rot3 32'd466944    //7.1250度*2^16
`define rot4 32'd234368    //3.5763度*2^16
`define rot5 32'd117312    //1.7899度*2^16
`define rot6 32'd58688     //0.8952度*2^16
`define rot7 32'd29312     //0.4476度*2^16
`define rot8 32'd14656     //0.2238度*2^16
`define rot9 32'd7360     //0.1119度*2^16
`define rot10 32'd3648     //0.0560度*2^16
`define rot11 32'd1856     //0.0280度*2^16
`define rot12 32'd896      //0.0140度*2^16
`define rot13 32'd448      //0.0070度*2^16
`define rot14 32'd256      //0.0035度*2^16
`define rot15 32'd128      //0.0018度*2^16

然后就是迭代過(guò)程了,迭代16次足夠了。最后的Zn和Xn就是想要結(jié)果。

//旋轉(zhuǎn)
genvar i;
generate
  for( i = 1 ;i < 17 ;i = i+1)
 ? begin: loop2
 ? ? ? always@(posedge clk or negedge rst_n)
 ? ? ? begin
 ? ? ? ? ? if( rst_n == 1'b0)
 ? ? ? ? ? begin
 ? ? ? ? ? ? ? Xn[i] <= 'd0;
 ? ? ? ? ? ? ? Yn[i] <= 'd0;
 ? ? ? ? ? ? ? Zn[i] <= 'd0;
 ? ? ? ? ? end
 ? ? ? ? ? else if( cal_delay[i -1] == 1'b1)
 ? ? ? ? ? begin
 ? ? ? ? ? ? ? if( Yn[i-1][31] == 1'b0)
 ? ? ? ? ? ? ? begin
 ? ? ? ? ? ? ? ? ? Xn[i] <= Xn[i-1] + (Yn[i-1] >>> (i-1));
          Yn[i] <= Yn[i-1] - (Xn[i-1] >>> (i-1));
          Zn[i] <= Zn[i-1] + rot[i-1];
 ? ? ? ? ? ? ? end
 ? ? ? ? ? ? ? else
 ? ? ? ? ? ? ? begin
 ? ? ? ? ? ? ? ? ? Xn[i] <= Xn[i-1] - (Yn[i-1] >>> (i-1));
          Yn[i] <= Yn[i-1] + (Xn[i-1] >>> (i-1));
          Zn[i] <= Zn[i-1] - rot[i-1];
 ? ? ? ? ? ? ? end
 ? ? ? ? ? end
 ? ? ? ? ? else
 ? ? ? ? ? begin
 ? ? ? ? ? ? ? Xn[i] <= Xn[i];
 ? ? ? ? ? ? ? Yn[i] <= Yn[i];
 ? ? ? ? ? ? ? Zn[i] <= Zn[i];
 ? ? ? ? ? end
 ? ? ? end
 ? end
endgenerate

這里沒(méi)有乘cosθ,最后的Xn會(huì)比真實(shí)值大1.64倍左右,所以還需要對(duì)其進(jìn)行一個(gè)縮小操作,通過(guò)右移來(lái)近似實(shí)現(xiàn)。

assign cordic_ack = cal_delay[16];
assign theta   = Zn[16];
assign amplitude = (Xn[16] >>> 1) + (Xn[16] >>> 3); ////幅度,偏大1.64倍,這里做了近似處理

然后就是仿真了,給了X=Y=15,也就是角度為45度,幅值21.213,擴(kuò)大65536倍為1,376,256。可以看到結(jié)果近似。

52e5fc36-5cc5-11ee-939d-92fbcf53809c.png








審核編輯:劉清

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

    關(guān)注

    1644

    文章

    21991

    瀏覽量

    615254
  • 存儲(chǔ)器
    +關(guān)注

    關(guān)注

    38

    文章

    7640

    瀏覽量

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

    關(guān)注

    0

    文章

    17

    瀏覽量

    9824
  • Verilog語(yǔ)言
    +關(guān)注

    關(guān)注

    0

    文章

    113

    瀏覽量

    8508
  • 姿態(tài)解算
    +關(guān)注

    關(guān)注

    0

    文章

    49

    瀏覽量

    8469

原文標(biāo)題:【經(jīng)驗(yàn)分享】FPGA實(shí)現(xiàn)Cordic算法求解arctanθ

文章出處:【微信號(hào):FPGA研究院,微信公眾號(hào):FPGA研究院】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    FPGA使用Cordic算法求解角度正余弦值

    在進(jìn)行坐標(biāo)變換的時(shí)候,需要計(jì)算角度的正余弦值,而在FPGA中是不能直接進(jìn)行求解的,需要采用其它的方式進(jìn)行求解
    的頭像 發(fā)表于 06-19 09:54 ?303次閱讀
    <b class='flag-5'>FPGA</b>使用<b class='flag-5'>Cordic</b><b class='flag-5'>算法</b><b class='flag-5'>求解</b>角度正余弦值

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

    ,所以CORDIC算法的移位、加減法運(yùn)算和流水線結(jié)構(gòu)更容易在FPGA實(shí)現(xiàn)。本文在Altera公司的QuartusⅡ7.2軟件環(huán)境下使用VHDL,利用上述各種
    發(fā)表于 07-11 21:32

    CORDIC 算法

    我現(xiàn)在寫著一個(gè)CORDIC 的 verilog 代碼,但在邏輯上遇到問(wèn)題。https://www.edaplayground.com/x/3tHk , 為何 y[2] == 0 ? -->
    發(fā)表于 05-14 00:32

    請(qǐng)問(wèn)能不能用CORDIC算法代替ROM表,用FPGA實(shí)現(xiàn)CORDIC算法來(lái)控制AD9910?

    正在做一個(gè)課題,用FPGA控制AD9910,但是本人想把基于ROM表的改成基于CORDIC算法的,這樣還能不能用FPGA實(shí)現(xiàn)控制AD9910
    發(fā)表于 12-01 08:47

    LabVIEW FPGA CORDIC IP核的arctan使用方法

    使用LabVIEW FPGA模塊中的CORDIC IP核,配置arctan(X/Y)算法,配置完成之后,IP核只有一個(gè)輸入。我參考網(wǎng)上VHDL CO
    發(fā)表于 09-10 20:07

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

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

    怎么利用CORDIC算法FPGA實(shí)現(xiàn)高速自然對(duì)數(shù)變換器?

    本文利用CORDIC算法FPGA實(shí)現(xiàn)了高速自然對(duì)數(shù)變換器。
    發(fā)表于 04-30 06:05

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

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

    利用CORDIC算法FPGA實(shí)現(xiàn)可參數(shù)化的FFT

    針對(duì)在工業(yè)中越來(lái)越多的使用到的FFT,本文設(shè)計(jì)出了一種利用CORDIC算法FPGA實(shí)現(xiàn)快速FFT的方法。CORDIC
    發(fā)表于 08-09 15:39 ?55次下載

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

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

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

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

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

    本文是基于FPGA實(shí)現(xiàn)Cordic算法的設(shè)計(jì)與驗(yàn)證,使用Verilog HDL設(shè)計(jì),初步可實(shí)現(xiàn)正弦、余弦、反正切函數(shù)的
    發(fā)表于 07-03 10:18 ?3083次閱讀
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>Cordic</b><b class='flag-5'>算法</b><b class='flag-5'>實(shí)現(xiàn)</b>的設(shè)計(jì)與驗(yàn)證

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

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

    如何使用FPGA實(shí)現(xiàn)CORDIC算法在跟蹤環(huán)中的應(yīng)用

    主要介紹了坐標(biāo)旋轉(zhuǎn)數(shù)字計(jì)算(CORDIC算法在US,g,鑒別器中的應(yīng)用,包括碼跟蹤環(huán)、鎖頻環(huán)和鎖相環(huán)鑒別器,并進(jìn)行了FPGA實(shí)現(xiàn)。在設(shè)計(jì)中,采用統(tǒng)一
    發(fā)表于 01-22 16:12 ?9次下載
    如何使用<b class='flag-5'>FPGA</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>CORDIC</b><b class='flag-5'>算法</b>在跟蹤環(huán)中的應(yīng)用

    基于流水線CORDIC算法通用數(shù)字調(diào)制器的FPGA實(shí)現(xiàn)方案

    電子發(fā)燒友網(wǎng)站提供《基于流水線CORDIC算法通用數(shù)字調(diào)制器的FPGA實(shí)現(xiàn)方案.pdf》資料免費(fèi)下載
    發(fā)表于 10-27 09:46 ?1次下載
    基于流水線<b class='flag-5'>CORDIC</b><b class='flag-5'>算法</b>通用數(shù)字調(diào)制器的<b class='flag-5'>FPGA</b><b class='flag-5'>實(shí)現(xiàn)</b>方案
    主站蜘蛛池模板: 亚洲成人午夜影院 | 琪琪午夜伦埋大全影院 | 中日韩免费视频 | 欧美一级第一免费高清 | 卡一卡二卡三国色天香永不失联 | 日本69xxxxxxx69| 色色色色网 | 在线成人 | 国产乱子伦一区二区三区 | 国产特黄特色的大片观看免费视频 | 男男全肉高h腐文 | jlzzjlzzjlzz亚洲女 | www.四虎影| 在线亚洲一区 | 色偷偷伊人| 在线观看免费视频资源 | 精品国产中文一级毛片在线看 | 五月情婷婷 | 色播四房间 | 久久男人精品 | 无遮挡高清一级毛片免费 | 天天干小说| 99热在线获取最新地址 | 亚洲日本久久久午夜精品 | av2014天堂网 | 立即播放免费毛片一级 | 欧美成人午夜不卡在线视频 | 深夜大尺度视频在线观看 | 女同久久| 亚洲高清免费视频 | 99热官网| 国产精品免费视频拍拍拍 | 亚洲综合精品香蕉久久网97 | 免费高清在线爱做视频 | 男女做视频网站免费观看 | 天天夜夜狠狠一区二区三区 | 欧美18性精品 | 鲁老汉精品视频在线观看 | 久久久夜色精品国产噜噜 | 男人午夜影院 | 白嫩美女一级高清毛片免费看 |