国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種基于System Generator的CORDIC算法實(shí)現(xiàn)

2020-06-23 09:36胡天翔陳科趙志強(qiáng)
科技創(chuàng)新與應(yīng)用 2020年19期

胡天翔 陳科 趙志強(qiáng)

摘 ?要:在現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)芯片的應(yīng)用中,選擇坐標(biāo)旋轉(zhuǎn)數(shù)字計(jì)算(CORDIC)算法來(lái)實(shí)現(xiàn)正余弦函數(shù)的實(shí)時(shí)計(jì)算有著廣泛的應(yīng)用。同時(shí)在信號(hào)處理領(lǐng)域上,對(duì)正余弦函數(shù)的計(jì)算有著高精度的需求。據(jù)此采用Simulink平臺(tái)的Xilinx公司開(kāi)發(fā)工具System Genenrator(SysGen)設(shè)計(jì)了基于CORDIC算法實(shí)現(xiàn)正余弦函數(shù)計(jì)算的FPGA模型,將角度計(jì)算范圍擴(kuò)展到全實(shí)數(shù)領(lǐng)域,并在理論上推導(dǎo)出該設(shè)計(jì)方案計(jì)算結(jié)果的誤差上限。仿真結(jié)果顯示,該設(shè)計(jì)方案的誤差精度與理論推導(dǎo)保持一致。而且,相比SysGen的系統(tǒng)自帶模塊,該設(shè)計(jì)可以避免重復(fù)嘗試,更好地控制計(jì)算精度。

關(guān)鍵詞:坐標(biāo)旋轉(zhuǎn)數(shù)字計(jì)算機(jī);現(xiàn)場(chǎng)可編程門(mén)陣列;正余弦函數(shù);計(jì)算精度;System Generator

中圖分類(lèi)號(hào):TN911.72 ? ? ?文獻(xiàn)標(biāo)志碼:A ? ? ? ? 文章編號(hào):2095-2945(2020)19-0023-06

Abstract: In the application of field programmable gate array (FPGA) chip, choosing the Coordinate Rotation Digital Computer (CORDIC) algorithm to realize the real-time calculation of sine and cosine functions has a wide range of applications. At the same time, in the field of signal processing, there is a demand for high precision in the calculation of sine and cosine functions. Based on this, the FPGA model of sine and cosine function calculation based on CORDIC algorithm is designed by using System Genenrator (SysGen), a development tool of Xilinx company on Simulink platform, which extends the range of angle calculation to the field of all real numbers, and deduces the upper limit of error of the calculation result of the design scheme in theory. The simulation results show that the error accuracy of the design scheme is consistent with the theoretical derivation. Moreover, compared with the system with its own module of SysGen, this design can avoid repeated attempts and better control the calculation accuracy.

Keywords: coordinate rotation digital computer; field programmable gate array; sine and cosine functions; calculation accuracy; System Generator

引言

在AI、自動(dòng)駕駛及物聯(lián)網(wǎng)等信息技術(shù)蓬勃發(fā)展的今天,數(shù)據(jù)處理的高精度實(shí)時(shí)性需求越發(fā)被人們所重視。在現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)出現(xiàn)伊始,業(yè)界就有一種觀點(diǎn)認(rèn)為FPGA可以被用來(lái)加速計(jì)算(computing)的過(guò)程。現(xiàn)今FPGA更是已經(jīng)成為數(shù)字信號(hào)處理系統(tǒng)的核心器件,其高速并行能力使得它成為高性能數(shù)字信號(hào)處理的理想平臺(tái)[1]。

傳統(tǒng)的FPGA設(shè)計(jì)流程,需要從算法設(shè)計(jì)階段的高層次計(jì)算機(jī)語(yǔ)言(如C++)轉(zhuǎn)換到硬件實(shí)現(xiàn)階段的底層HDL語(yǔ)言(如Verilog),這個(gè)過(guò)程的時(shí)間成本很高,而且易產(chǎn)生一些錯(cuò)誤[2]。MATLAB中的Simulink給復(fù)雜的DSP算法的硬件化提供了一個(gè)很便利的開(kāi)發(fā)平臺(tái),在該平臺(tái)上,利用Xilinx公司的開(kāi)發(fā)工具System Generator(SysGen)不僅可以快速準(zhǔn)確的實(shí)現(xiàn)硬件的建模與仿真,而且可以將抽象的模塊化電路圖直接轉(zhuǎn)化為硬件描述語(yǔ)言,并生成測(cè)試文件,可以有效縮短開(kāi)發(fā)周期[3]。

傳統(tǒng)的CORDIC(Coordinate Rotation Digital Computer)算法在圓周坐標(biāo)系統(tǒng)下的的收斂范圍在[-99.82°,99.82°],并沒(méi)有覆蓋到任意角度[4]。且CORDIC算法具有迭代性,迭代次數(shù)和定點(diǎn)數(shù)運(yùn)算中數(shù)據(jù)位寬的選擇都直接關(guān)聯(lián)到計(jì)算結(jié)果的精度。增加迭代次數(shù)和數(shù)據(jù)位寬都會(huì)帶來(lái)硬件資源占用的影響,同時(shí)反復(fù)進(jìn)行迭代也會(huì)使得運(yùn)算速度變慢。這樣在滿足工程上精度需求的前提下,合適地選擇迭代次數(shù)和數(shù)據(jù)位寬可以在節(jié)省硬件資源成本和響應(yīng)速度上得到很好的兼顧。

針對(duì)上述問(wèn)題,為避免設(shè)計(jì)時(shí)的不斷重復(fù)嘗試。本文在Simulink平臺(tái)上針對(duì)圓周系統(tǒng)下CORDIC算法設(shè)計(jì)了正弦余弦函數(shù)的計(jì)算模塊,將可計(jì)算的范圍擴(kuò)展到任意角度,并在理論上給出了該設(shè)計(jì)的誤差上限。根據(jù)本文給出的誤差上限分析,適當(dāng)選取迭代次數(shù)和數(shù)據(jù)路徑中的小數(shù)位數(shù),可以同時(shí)兼顧計(jì)算速度和硬件消耗,更高效地實(shí)現(xiàn)定點(diǎn)數(shù)的正余弦函數(shù)計(jì)算。

1 CORDIC算法基本原理

CORDIC算法由J.Voider等人于1959年在航空控制系統(tǒng)的設(shè)計(jì)中提出來(lái)[4]。這種算法應(yīng)用于硬件平臺(tái)上,只要執(zhí)行移位和加法運(yùn)算,就能實(shí)現(xiàn)一些復(fù)雜的超越函數(shù)(如三角函數(shù))。該算法在數(shù)字信號(hào)處理領(lǐng)域得到了廣泛的應(yīng)用。其算法原理如下[5]。

在CORDIC算法圓周坐標(biāo)系旋轉(zhuǎn)中,給定的初始向量{x(0),y(0)},起始角度z(0)。第i次迭代旋轉(zhuǎn)如圖1所示。

3 基于System Generator的CORDIC正余弦計(jì)算模塊設(shè)計(jì)

FPGA廠商Xilinx公司在Simulink平臺(tái)上提供了System Generator開(kāi)發(fā)工具,用戶(hù)可以基于此工具高效建模,在FPGA上實(shí)現(xiàn)DSP算法。還可以自動(dòng)生成HDL代碼和測(cè)試文件,將模型直接轉(zhuǎn)化為ISE工程,大大提高了設(shè)計(jì)效率[7],是數(shù)字信號(hào)處理系統(tǒng)設(shè)計(jì)與Xilinx公司FPGA實(shí)現(xiàn)的“橋梁”。而且在SysGen環(huán)境下,采用基于模型的設(shè)計(jì)方法可以方便地實(shí)現(xiàn)和驗(yàn)證定點(diǎn)算法,發(fā)現(xiàn)問(wèn)題后也容易進(jìn)行修改[8]。

3.1 模塊設(shè)計(jì)方案

本次模塊針對(duì)正弦和余弦計(jì)算,采用的是CORDIC算法圓周坐標(biāo)系下的旋轉(zhuǎn)模式。設(shè)置初始向量為?淄(0)=(1/Kn,0)',同時(shí)z(0)為我們要求解的目標(biāo)角度。經(jīng)過(guò)n次迭代后迭代累計(jì)角度z(n)趨近于0,也就意味著向量旋轉(zhuǎn)趨近于目標(biāo)角度。此時(shí)的向量模長(zhǎng)增益趨近于1,向量的x坐標(biāo)趨近于cosz(0),y坐標(biāo)趨近于sinz(0),據(jù)此可計(jì)算z(0)的正弦值和余弦值。

由于傳統(tǒng)CORDIC算法的覆蓋范圍有限,為了將計(jì)算角度擴(kuò)展到[-∞,+∞],我們需要對(duì)初始計(jì)算角度進(jìn)行旋轉(zhuǎn)。第一、四象限角度位于CORDIC收斂范圍之內(nèi),將第二、三象限角旋轉(zhuǎn)至第一、四象限中與其正弦值相同的角度。這樣就將角度映射至CORDIC的收斂范圍之內(nèi),此時(shí)余弦值為正,將其賦值為負(fù)即為原角度的余弦值。模塊整體結(jié)構(gòu)如圖2所示。

計(jì)算角度的映射和余弦符號(hào)修正兩個(gè)模塊采用SysGen中的MCode模塊來(lái)實(shí)現(xiàn)。該模塊使用M語(yǔ)言來(lái)描述Verilog要表述的邏輯[9],我們可以將邏輯控制按照MCode要求的語(yǔ)法寫(xiě)入.m文件,進(jìn)而裝載到MCode模塊中。這樣我們就將.m文件轉(zhuǎn)化為SysGen的一個(gè)組件,可以無(wú)縫結(jié)合到整體模型的構(gòu)建中。

對(duì)輸入的任意角度(度),需要將其轉(zhuǎn)到0~360°范圍內(nèi)的角度,采用求余的方式達(dá)成。進(jìn)而加入MCode完成角度映射功能,將角度映射到[-90°,+90°]。角度映射模塊的MCode嵌入代碼如下所示:

function z = quadrant_trans(x)

if 0 <= x && x < 90

z = x;

elseif 90 <= x && x < 270

z = 180 - x;

else

z = x - 360;

end

如果計(jì)算角度屬于第二、三象限,余弦符號(hào)修正模塊產(chǎn)生邏輯值1,否則邏輯值為0,將邏輯值輸入到選擇器中。如果為第二、三象限角,選擇器輸出迭代模塊產(chǎn)生x值的非。余弦符號(hào)修正模塊的MCode嵌入代碼如下所示:

function z = cos_modify(x)

if 90 <= x && x < 270

z = xfix({xlBoolean}, 1);

else

z = xfix({xlBoolean}, 0);

end

系統(tǒng)整體模型如圖4所示,如前所述,輸入常量x為1/K(30),K(30)為偽旋轉(zhuǎn)30次迭代后所產(chǎn)生的增量倍數(shù),輸入常量y為0。Mod_function為取余運(yùn)算模塊,將全范圍的角度轉(zhuǎn)到[0°,+360°]范圍內(nèi)。經(jīng)30次迭代運(yùn)算后,輸出y為正弦值,輸出x經(jīng)多路選擇器輸出后為余弦值。

3.2 模塊整體誤差分析

4 仿真結(jié)果與分析

在[-1000°,1000°]內(nèi)隨機(jī)生成20個(gè)角度值帶入設(shè)計(jì)的模塊中做正弦值計(jì)算。將所計(jì)算的結(jié)果與MATLAB代碼計(jì)算的結(jié)果做差求得誤差集合。以橫坐標(biāo)為角度(以度為單位),縱坐標(biāo)為誤差值作圖,正弦計(jì)算誤差曲線如圖6所示,余弦計(jì)算誤差曲線如圖7所示。

從以上兩圖可以看到,隨機(jī)生成的角度經(jīng)設(shè)計(jì)模塊運(yùn)算后的的正余弦值計(jì)算結(jié)果誤差均未超過(guò)4.1665×10-8,與我們理論分析的結(jié)果是一致的。

將System Generator自帶模塊,設(shè)置同樣的迭代次數(shù)和位數(shù),對(duì)20個(gè)隨機(jī)生成的角度進(jìn)行求解,所得結(jié)果與MATLAB計(jì)算結(jié)果的誤差曲線圖如圖8所示。本文所設(shè)計(jì)的正余弦函數(shù)計(jì)算模塊的精度要優(yōu)于系統(tǒng)自帶模塊。