《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > CORDIC算法在三軸電子羅盤中的應用
CORDIC算法在三軸電子羅盤中的應用
來源:電子技術應用2010年第6期
李 翔, 李 智
桂林電子科技大學 電子工程學院, 廣西 桂林 541004
摘要: CORDIC算法是用于計算三角、反三角、指數、對數等超越函數的簡捷算法。將該算法應用在以單片機為核心的三軸電子羅盤中,用于實現羅盤的傾斜補償并計算俯仰角、橫滾角和航向角。實驗表明,該算法可有效地在單片機上運行,能夠較好地兼顧計算精度與效率,有實用價值。
中圖分類號: TP368.1
文獻標識碼: A
Application of CORDIC algorithm in 3-axis digital compass
LI Xiang,LI Zhi
School of Electronic Engineering, Guilin University of Electronic Technology, Guilin 541004, China
Abstract: CORDIC is an efficient algorithm for computing transcendental functions including trigonometric, inverse trigonometric, exponential and logarithmic functions. It has been applied to a 3-axis digital compass, which uses micro-controller as the control unit, for tilt-compensation and the calculation of pitch, roll and heading. Experiments show that the algorithm can run effectively on the micro-controller and keep a fair trade-off between accuracy and efficiency, and its practicality is demonstrated.
Key words : CORDIC;digital compass;micro-controller

    CORDIC算法(Coordinate Rotation Digital Computer)(即“坐標旋轉數字計算機"),最早是由VOLDER J E.于1959年提出[1],當時是為研制B-58轟炸機的導航系統而設計的。但該算法僅僅用到了移位和加減運算,因此其硬件實現非常簡單。后經眾多學者加以研究和發展,使其成為數字電路中計算各種超越函數的一種簡捷有效的算法[2]。CORDIC算法在FPGA中應用甚廣[2-3],在DSP上也有所應用[4],但鮮有在單片機上的應用報道。
1 CORDIC算法簡介
    CORDIC算法的基本原理來自二維坐標的旋轉變換。當平面直角坐標系繞原點旋轉一個角度θ時,新舊坐標間的變換關系為:

    以上介紹的CORDIC算法屬于最基本的“圓周型”CORDIC算法。對迭代步驟稍作改動,即可將其變形為“直線型”或“雙曲型”CORDIC算法,從而可用于計算乘除法、雙曲函數、指數函數和對數函數[2]。
    CORDIC算法中的移位運算很適合于在FPGA中用硬件實現,不但計算速度快,而且相對于查表法明顯節省了硬件資源。而在DSP中,由于缺少專門的硬件支持,CORDIC算法相對于冪級數展開法或查表法則缺乏優勢[2-4]。對于經典的PIC、8051等單片機,因為每執行1條移位指令只能將數據左移或右移1位,而執行CORDIC算法時會在移位運算上消耗大量的時間,從而影響CORDIC算法的效率。
2 羅盤載體姿態及其解算
 

   

式(7)、式(8)中的Bxh與Byh即是地磁場在水平面內的2個正交分量,分別沿xh軸和yh軸方向。式(7)所描述的正是將載體坐標系中測得的地磁分量變換到地平坐標系的過程。
    參考文獻[5]給出了3種求解羅盤載體姿態的算法,上文介紹的就是其中的第1種,而第2種算法原理與其完全相同,只是利用三角函數的性質略微簡化了計算。應當指出,由于坐標系及角度定義上的差異,式(5)、式(7)、式(8)與參考文獻[5]中的公式略有不同,但并不影響問題的本質。
 CORDIC算法本身可以計算三角函數與反三角函數,因此可以直接將其用于上述算法中[6],但這樣并沒有完全發揮CORDIC算法的優勢。如前所述,CORDIC算法的原理來自于坐標旋轉變換,因此,可以直接利用CORDIC算法完成式⑺中的變換并由此獲得載體的姿態,而無需計算三角與反三角函數。參考文獻[5]所給出的第3種算法就是基于這一思想,其步驟為:
 (1)用矢量模式將重力加速度矢量在yOz平面內的投影旋轉到與z軸重合,求得橫滾角。
 (2)再用矢量模式將重力加速度矢量(此時該矢量已在xOz平面內)旋轉到與z軸重合,求得俯仰角。
 (3)用旋轉模式補償橫滾角,計算補償后的地磁場分量。
 (4)再用旋轉模式補償俯仰角,計算補償后的地磁場分量。
 (5)用矢量模式,根據地磁場水平分量計算航向角。
3 CORDIC算法在單片機上的實現
3.1 用CORDIC算法計算三角函數

 表1給出了在VRS51L3074單片機上用CORDIC算法計算反正切函數的結果,并與Keil C51編譯器(V8.12)所提供的浮點庫函數進行了對比。VRS51L3074是美國Ramtron公司的產品,基于增強型8051內核,在兼容傳統8051指令集的基礎上提升了指令執行速度。同時,該單片機還擁有“增強型算術單元”的外圍模塊,該模塊中有32位桶形移位器。表1也列出了在CORDIC算法中使用該移位器的結果。

    此處所用CORDIC算法的輸入、輸出均采用16位數據格式,角度以度為單位,小數點設在兩字節之間,即角度分辨率為1/256度,迭代次數為14次(不含第1次45°的旋轉),這是由角度的分辨率決定的(第15次及其后的迭代所轉角度已小于1/256度)。為便于比較,所有計算結果均已換算為十進制格式(單位為度,保留4位小數)。表1還列出了由單片機的定時器T0所記錄的函數執行時間,T0時鐘為系統時鐘(不分頻)。因此,計時結果即為函數從調用到返回所經歷的系統時鐘周期數。
 從表1的結果可看出,CORDIC算法具有一定的速度優勢,但其精度無法與浮點函數相比。另外,使用桶形移位器代替單片機的移位指令,可明顯提升CORDIC算法的執行速度。這也證明了CORDIC算法在單片機上運行時,在移位操作上消耗了大量的時間。CORDIC算法的主要優點在于: (1)代碼較為簡潔;(2)可自定義輸出角度單位及格式(浮點庫函數所給出的角度單位總是弧度); (3)在計算y/x的反正切時不必計算除法,并且該算法在±90°時也是收斂的。
 在單片機上運行CORDIC算法還需注意,輸入矢量的模長既不能過大也不能過小。如模長過大,則由于CORDIC算法在將矢量旋轉的同時還會將其“拉長”(這也正是CORDIC算法需要模校正因子的原因),將會導致計算過程出現溢出。而若模長過小,則會導致精度降低[7]。表2為輸入矢量的模長對CORDIC算法的影響:在4個輸入矢量的輻角均相等的情況下,第1個矢量由于模長過大導致CORDIC計算過程溢出,第2個矢量計算結果正常,第3和第4個矢量由于模長過小導致CORDIC計算精度降低。

 移位操作耗時過多以及計算精度受輸入矢量模長影響這兩個缺點,使得用CORDIC算法在單片機上計算三角函數的實用價值并不理想。
3.2 CORDIC算法用于姿態解算
 如上所述,CORDIC算法并不適合于在單片機上直接計算三角函數。但將其用于羅盤載體的姿態解算仍然是可行的,這是基于以下兩點:(1)由于傳感器特性的不一致性,其采集的原始數據均需經過零點、增益等校準后才可用于姿態解算,這就相當于為CORDIC算法的輸入矢量模長做了歸一化處理;(2)如前所述,利用CORDIC算法計算俯仰角與橫滾角并對其加以補償時,并不需要具體計算三角與反三角函數,只需完成坐標變換即可。
 參考文獻[5]不僅給出了用CORDIC算法求解航向角的思路,并且在FPGA上進行了驗證。將這一算法移植到單片機時,還可再稍作簡化,具體計算步驟為:
 (1)將重力加速度矢量在yOz平面內的投影旋轉到與z軸重合,同時地磁場矢量亦作同步的旋轉,從而得到橫滾角并同時對其加以補償。
 (2)將重力加速度矢量(此時該矢量已在xOz平面內)旋轉到與z軸重合,同時地磁場矢量亦作同步的旋轉,從而得到俯仰角并同時對其加以補償。
 (3)根據地磁場水平分量計算航向角。
 以上計算過程相當于把參考文獻[5]所述算法步驟的第1、第3步和第2、第4步分別合并。與CORDIC算法的矢量模式和旋轉模式在FPGA上的實現方式不同,在單片機上則不必拘泥于這兩種模式的區分,從而可以使程序更加緊湊。
 表3給出了在VRS51L3074上使用增強算術單元實現CORDIC求解載體姿態的實驗結果,并同時給出按式(5)~式(8)利用浮點運算所得結果進行對比。磁場矢量的模長已被限制到4 096(相當于十六進制的0x1000),重力加速度矢量的模長則限制為8 192(相當于十六進制的0x2000)。

 電子羅盤的俯仰角、橫滾角和航向角要求達到0.1°的分辨率。由表3可見,CORDIC算法的計算精度能夠滿足這一要求,并且該算法完成1次姿態解算所需的時間僅相當于浮點運算所需時間的1/8~1/9,能很好地滿足電子羅盤對姿態解算的實時性要求。
 CORDIC算法無需乘除運算和大規模的查找表即可實現三角函數、反三角函數以及其他超越函數的運算。盡管CORDIC算法通常被用于FPGA,實踐結果證明,這一算法也可有效地在8051內核單片機上運行,并且具有優于C語言浮點庫函數的運行速度和一定的精度。
 在單片機上,制約CORDIC算法效率的主要因素是移位操作耗時過多。若單片機擁有桶形移位器,如VRS51L3074單片機的增強型算術單元,則可改善移位操作耗時過多的問題,從而提升該算法的效率。此外,適當調節輸入矢量的模長也是應用該算法時需要注意的問題。
 采用合理安排的計算步驟,CORDIC算法可以準確、高效地完成電子羅盤中的傾角補償與航向計算,同時也為電子羅盤中的單片機節約了程序空間和時間。
參考文獻
[1] VOLDER J E. The birth of CORDIC[J]. Journal of VLSI Signal Processing, 2000,25:101-105.
[2] ANDRAKA R. A survey of CORDIC algorithm for FPGA based computers[A]. Proceedings of the 1998 ACM/SIGDA    International Symposium on Field Programmable Gate Arrays[C]. ACM, 1998:191-200.
[3] 李全,陳石平,李曉歡,等. 正交三角函數的CORDIC實現[J]. 微計算機信息,2008,24(12-3):268-269,252.
[4] 馬士超,王貞松. 基于DSP的三角函數快速計算[J]. 計算機工程,2005,31(22):12-14.
[5] LAULAINEN E, KOSKINEN L, KOSUNEN M, et al. Compass tilt compensation algorithm using CORDIC[A].  IEEE International Symposium on Circuits and Systems, 2008[C]. ISCAS, 2008:1188-1191.
[6] 崔曉松,胡建萍,李陬. CORDIC 算法在導航解算系統中的應用[J].杭州電子科技大學學報,2007,27(6):5-8.
[7] KOTA K, CAVALLARO J R. Numerical accuracy and hardware tradeoffs for CORDIC arithmetic special-purpose processors[J]. IEEE Transactions on Computers, 1993, 42(7):769-779.

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          亚洲激情另类| 欧美日产一区二区三区在线观看| 亚洲电影av在线| 国内综合精品午夜久久资源| 欧美系列精品| 国产精品久久久久9999吃药| 欧美日韩一二三四五区| 在线中文字幕一区| 欧美好吊妞视频| 欧美一区午夜视频在线观看| 伊人久久大香线蕉av超碰演员| 欧美日韩国产在线| av不卡免费看| 亚洲欧美文学| 欧美区国产区| 日韩视频免费观看| 久久色在线播放| 国产美女精品免费电影| 亚洲欧美日本精品| 日韩亚洲欧美精品| 蜜桃久久精品乱码一区二区| 国产精品美女一区二区在线观看| 亚洲伦理自拍| 亚洲综合国产激情另类一区| 欧美一区二视频在线免费观看| 欧美成人自拍| 亚洲无线一线二线三线区别av| 亚洲视频免费在线| 99re66热这里只有精品3直播| 亚洲午夜成aⅴ人片| 久久女同精品一区二区| 亚洲人成亚洲人成在线观看| 亚洲黄色小视频| 黄色精品在线看| 欧美激情精品久久久久久黑人| 国产欧美日韩一区二区三区| 国产日韩欧美日韩大片| 一本色道久久综合亚洲精品高清| 国产日韩成人精品| 一区二区三区精品在线| 欧美人在线观看| 午夜天堂精品久久久久| 国产精品久久二区| 亚洲精品欧美精品| 国产又爽又黄的激情精品视频| 久久精品夜色噜噜亚洲a∨| 欧美风情在线| 国产一区免费视频| 欧美日韩国产综合一区二区| 国产精品海角社区在线观看| 亚洲愉拍自拍另类高清精品| 欧美午夜剧场| 好看的日韩av电影| 国产欧美日韩免费| 国产精品成人一区二区三区夜夜夜| 久久五月激情| 国内精品国产成人| 在线观看成人av电影| 欧美a级片一区| 欧美高清视频一区二区三区在线观看| 99ri日韩精品视频| 欧美一区中文字幕| 欧美 日韩 国产 一区| 亚洲一区二区三区在线视频| 国产欧美一区二区三区国产幕精品| 亚洲专区国产精品| 亚洲欧美日韩国产综合精品二区| 99在线|亚洲一区二区| 欧美另类99xxxxx| 久久久久久**毛片大全| 欧美丰满少妇xxxbbb| 欧美国产综合视频| 国产精品久久一卡二卡| 免费一区二区三区| 国产精品国产一区二区| 欧美一区二区三区在线播放| 欧美一区观看| 欧美福利电影在线观看| 影音先锋久久| 久久久青草青青国产亚洲免观| 亚洲欧美一区二区视频| 亚洲美女毛片| 亚洲专区在线视频| 亚洲一区二区高清视频| 国产伦理一区| 美女精品自拍一二三四| 久久国产一区| 美女国内精品自产拍在线播放| 久久综合国产精品台湾中文娱乐网| 欧美日韩国产综合久久| 久久综合九色综合欧美狠狠| 欧美高清视频一区二区| 在线免费观看视频一区| 亚洲精选在线观看| 麻豆精品视频在线| 欧美午夜精品理论片a级按摩| 欧美一区二区三区免费观看| 亚洲精品乱码| 99精品福利视频| 99精品视频免费全部在线| 禁断一区二区三区在线| 欧美亚洲尤物久久| 欧美成人伊人久久综合网| 久久人人爽爽爽人久久久| 亚洲高清一区二区三区| 亚洲一区二区三区中文字幕| 国产精品亚洲片夜色在线| 国产亚洲va综合人人澡精品| 免费久久99精品国产自| 亚洲激情综合| 国产精品激情电影| 久久久久一本一区二区青青蜜月| 久久婷婷综合激情| 久热国产精品视频| 一本久久精品一区二区| 亚洲精品资源美女情侣酒店| 亚洲精品黄网在线观看| 国产美女精品| 欧美一区不卡| 欧美午夜片在线观看| 欧美精品国产精品| 久久频这里精品99香蕉| 一区二区三区在线高清| 性xx色xx综合久久久xx| 亚洲小说欧美另类社区| 日韩视频一区二区三区在线播放| 亚洲麻豆国产自偷在线| 国产精品成av人在线视午夜片| 亚洲精品乱码久久久久久黑人| 老**午夜毛片一区二区三区| 亚洲高清不卡| 国产精品综合视频| 亚洲观看高清完整版在线观看| 亚洲视频在线一区观看| 在线欧美日韩国产| 可以看av的网站久久看| 欧美日韩在线亚洲一区蜜芽| 欧美1区2区3区| 亚洲黄色片网站| 亚洲人成网站在线观看播放| 亚洲一区二区免费在线| 亚洲精品乱码久久久久久蜜桃麻豆| 国语自产精品视频在线看抢先版结局| 久久久久久**毛片大全| 韩国免费一区| 国产精品久久久久久久久久免费| 国产农村妇女精品| 欧美自拍丝袜亚洲| 狼人天天伊人久久| 噜噜噜久久亚洲精品国产品小说| 欧美系列电影免费观看| 蜜臀av性久久久久蜜臀aⅴ| 国产精品扒开腿做爽爽爽软件| 亚洲日韩欧美一区二区在线| 国产欧美日韩免费看aⅴ视频| 一区二区三区产品免费精品久久75| 国产精品三级视频| 国语自产精品视频在线看8查询8| 在线精品一区二区| 在线国产日韩| 美国十次成人| 99精品国产高清一区二区| 欧美成人自拍| 欧美成人免费网站| 久久av在线| 亚洲七七久久综合桃花剧情介绍| 中文一区字幕| 国产日韩精品一区二区| 欧美日韩国产天堂| 午夜影院日韩| 久久蜜桃资源一区二区老牛| 国产亚洲电影| 亚洲欧美另类在线| 亚洲欧美在线高清| 亚洲欧美激情视频| 日韩午夜在线| 久久精品视频va| 亚洲一区二区精品视频| 午夜精品久久久久99热蜜桃导演| 91久久国产综合久久| 国产精品一国产精品k频道56| 91久久国产精品91久久性色| 伊人久久大香线蕉综合热线| 亚洲人午夜精品| 亚洲欧美资源在线| 国产欧美一区二区三区在线老狼| 国产九九视频一区二区三区| 国产日韩欧美一区二区三区四区| 裸体女人亚洲精品一区| 亚洲麻豆一区| 日韩视频免费观看高清在线视频| 久久久久久久999精品视频| 国产精品久久毛片a| 亚洲一二三区视频在线观看| 亚洲影视在线| 亚洲三级免费| 伊人一区二区三区久久精品| 国产精品亚洲人在线观看| 欧美国产日本韩| 国产欧美日韩在线播放| 国产精品久久久久久福利一牛影视| 999在线观看精品免费不卡网站| 欧美一区日本一区韩国一区| 欧美喷潮久久久xxxxx| 性色av香蕉一区二区| 欧美精品粉嫩高潮一区二区| 亚洲区欧美区| 韩国免费一区| 亚洲国产精品精华液网站| 欧美视频中文字幕在线| 午夜久久一区| 国产综合色产在线精品| 伊人婷婷久久| 亚洲黑丝一区二区| 日韩视频免费观看| 久久黄金**| 欧美区在线播放| 黄色欧美日韩| 洋洋av久久久久久久一区| 一区二区三区视频在线看| 99视频精品免费观看| 欧美一区2区三区4区公司二百| 在线一区观看| 亚洲国内高清视频| 亚洲国产精品高清久久久| 一本大道久久a久久精二百| 久久精品青青大伊人av| 欧美国产丝袜视频| 国产精品亚洲美女av网站| 国产精品一区二区久久久久| 国产亚洲精品自拍| 激情久久久久久| 亚洲国产黄色| 国产主播一区| 日韩亚洲精品在线| 国产精品久久久久av| 欧美视频一区在线观看| 狠狠色噜噜狠狠狠狠色吗综合| 欧美一级在线亚洲天堂| 欧美高清不卡| 欧美激情区在线播放| 欧美亚男人的天堂| 韩国一区二区在线观看| 久久成人精品无人区| 亚洲自拍偷拍麻豆| 日韩网站在线| 国外成人在线| 午夜精品久久久久久久男人的天堂| 亚洲七七久久综合桃花剧情介绍| 亚洲国产成人不卡| 国产日韩欧美91| 国产精品扒开腿爽爽爽视频| 99精品国产一区二区青青牛奶| 国产精品久久久久av| 亚洲欧洲av一区二区| 欧美黑人在线观看| 99国产一区| 狠狠色综合网| 国产欧美日韩三区| 亚洲一区精品视频| 在线观看日韩www视频免费| 精品福利av| 久久九九热re6这里有精品| 国产精品扒开腿做爽爽爽软件| 欧美日韩一区二区免费视频| 国产日韩欧美a| 亚洲电影免费观看高清| 久久综合狠狠综合久久综青草| 一区二区三区国产| 国产欧美日韩| 亚洲精品五月天| 亚洲区免费影片| 欧美日韩日本视频| 欧美日本视频在线| 亚洲精品综合在线| 国产亚洲欧洲一区高清在线观看| 在线免费观看欧美| 久久精品国产久精国产思思| 欧美日韩一区精品| 国产精品久久久久国产a级| 国外成人在线视频| 性8sex亚洲区入口| 99精品视频免费| 欧美成人黄色小视频| 国语精品一区| 宅男噜噜噜66国产日韩在线观看| 欧美视频在线观看视频极品| 榴莲视频成人在线观看| 亚洲午夜激情免费视频| 欧美aⅴ99久久黑人专区| 欧美视频一区二区三区…| 久久精品国产亚洲aⅴ| 久久久亚洲一区| 亚洲欧美在线aaa| 亚洲人成人一区二区在线观看| 欧美成人一区二区三区片免费| 日韩视频亚洲视频| 最新亚洲激情| 国产亚洲精品v| 日韩网站在线看片你懂的| 一区二区三区国产盗摄| 亚洲少妇中出一区| 欧美一级淫片播放口| 欧美日韩国产成人高清视频| 欧美午夜一区二区| 欧美性一区二区| 亚洲电影免费观看高清| 欧美精品1区| 欧美日韩dvd在线观看| 亚洲欧美综合精品久久成人| 久久九九免费| 亚洲日本无吗高清不卡| 美女啪啪无遮挡免费久久网站| 亚洲性夜色噜噜噜7777| 亚洲精品1区| 欧美一级久久久久久久大片| 中文在线不卡| 国产精品素人视频| 欧美另类在线播放| 国产日韩精品一区二区| 久久久.com| 99re8这里有精品热视频免费| 国产精品国产三级国产普通话99| 国产精品日日做人人爱| 99国产一区二区三精品乱码| 欧美jjzz| 国产欧美一区二区视频| 性色av一区二区怡红|