張文鐸
(北京圣非凡電子系統(tǒng)技術(shù)開發(fā)有限公司北京100044)
一種基于誤差的數(shù)字式正弦波發(fā)生器設(shè)計(jì)方法
張文鐸
(北京圣非凡電子系統(tǒng)技術(shù)開發(fā)有限公司北京100044)
論文介紹一種通過(guò)數(shù)字方式獲得精準(zhǔn)正弦波的算法,通過(guò)分析和差化積公式,預(yù)先計(jì)算需要對(duì)輸出值的誤差進(jìn)行補(bǔ)償?shù)南鄳?yīng)取樣點(diǎn)的位置和相鄰取樣點(diǎn)的間隔,并在編程時(shí)在每個(gè)采樣點(diǎn)的位置對(duì)正弦波的輸出值進(jìn)行誤差校正。進(jìn)而獲得更精確的正弦波。該算法已在Altera公司的CYCLONEIV系列芯片Ep4CE15F7C8上完成了實(shí)現(xiàn),采用VerilogHDL語(yǔ)言進(jìn)行編程。該算法結(jié)構(gòu)清晰簡(jiǎn)明,不需要調(diào)用乘法器,消耗更少的資源,生成波形較平滑,可被用作完整載波在一般通信系統(tǒng)中進(jìn)行使用,也可應(yīng)用在儀器儀表及工控等領(lǐng)域,合成較復(fù)雜的波形。
正弦波;發(fā)生器;VerilogHDL;FPGA
Class NumberTM9
模擬方式和數(shù)字方式是常用的兩種正弦波發(fā)生器設(shè)計(jì)方式。常見模擬方式有RC震蕩電路、LC震蕩電路和石英晶體震蕩器等。一般的正弦波震蕩電路采用選頻網(wǎng)絡(luò)進(jìn)行選頻,利用正反饋產(chǎn)生正弦波,再采用其他模擬電路來(lái)進(jìn)行放大或處理[1]。這種模擬方式生成正弦波需通過(guò)調(diào)整器件參數(shù)來(lái)達(dá)到改變正弦波頻率的目的。多數(shù)模擬電路形成的系統(tǒng)是非線性的,不容易通過(guò)計(jì)算來(lái)得出精確的參數(shù),通常是通過(guò)一些粗略的估算,選擇合適的工作點(diǎn),確定器件的具體值。所以通過(guò)模擬方式產(chǎn)生較穩(wěn)定、較高精度的正弦信號(hào)需要較長(zhǎng)時(shí)間的調(diào)整[2]。這種方法不容易固化電路參數(shù),容易受外界環(huán)境干擾。如果想獲得良好的正弦波需要花費(fèi)大量成本。
采用直接頻率合成(DDS)的方法,可以采用DSP、FPGA或其他MCU作為數(shù)字控制芯片。這種方法是預(yù)先在存儲(chǔ)區(qū)中放入一個(gè)完整周期的2n個(gè)等間隔正弦值數(shù)據(jù),通過(guò)對(duì)這些數(shù)據(jù)的變換間隔取樣輸出并進(jìn)行D/A轉(zhuǎn)換得到正弦波。通過(guò)改變存儲(chǔ)區(qū)數(shù)據(jù)的取樣寬度,即變換取樣點(diǎn)的間隔可合成不同頻率的波形。這種方法伴隨n值的變大可以滿足要求的精度(存儲(chǔ)的數(shù)據(jù)量隨之增大)。因此這種方法若想得到滿意的精度,需要具有足夠的存儲(chǔ)區(qū)空間,同時(shí)配合高精度數(shù)模轉(zhuǎn)換器才可實(shí)現(xiàn)。經(jīng)典的計(jì)算正弦波數(shù)值的算法有以下兩種:
第一種是被稱為Cordic算法的坐標(biāo)旋轉(zhuǎn)數(shù)字計(jì)算方法。Cordic算法是1971年J.Walther最先提出一種只用加法運(yùn)算和移位運(yùn)算的方法。通過(guò)恒定旋轉(zhuǎn)求出相應(yīng)的三角函數(shù)值,對(duì)多次不同方向旋轉(zhuǎn)的角度進(jìn)行累加,得到的角度代數(shù)和即為所求值。該方法在需提高正弦值精度時(shí),需增加流水線級(jí)數(shù),會(huì)大量消耗數(shù)字芯片的內(nèi)部資源。
第二種算法是運(yùn)用數(shù)值分析中逼近函數(shù)的思想,采用級(jí)數(shù)來(lái)逼近函數(shù)值的算法,一般的方式有chebyshev逼近、pade逼近、taylor逼近和最佳一致逼近等。多項(xiàng)式展開的項(xiàng)數(shù)越多,被近似的三角函數(shù)值就越準(zhǔn)確。如果要求的函數(shù)值精度較高,則需要很多展開項(xiàng)來(lái)進(jìn)行逼近,且編程時(shí)多為復(fù)雜系數(shù)的迭代多項(xiàng)式,運(yùn)算的次數(shù)很多。計(jì)算過(guò)程中需調(diào)用乘法器,并且程序要執(zhí)行大量浮點(diǎn)運(yùn)算。
本文提出一種新設(shè)計(jì)思路可以消耗較少的硬件資源,通過(guò)計(jì)算的方法同時(shí)獲得較精確正弦值。這種算法得到的正弦波可以用于電視、廣播等數(shù)字通信系統(tǒng)中。
2.1 硬件部分實(shí)現(xiàn)
由于本發(fā)生器輸出正弦波具有較高精度,在硬件電路的設(shè)計(jì)上采用控制芯片F(xiàn)PGA、數(shù)模轉(zhuǎn)換芯片D/A和濾波器進(jìn)行完成。FPGA負(fù)責(zé)運(yùn)算,采用CYCLONEIV系列。型號(hào)為EP4CE15F17C8,封裝為表貼256-LBGA,核電壓1.25V。速度級(jí)別為8,邏輯門數(shù)為15408個(gè),存儲(chǔ)空間為516096位。內(nèi)置4個(gè)鎖相環(huán)。具有260個(gè)9×9位的乘法器,200個(gè)18×18位的乘法器。D/A進(jìn)行數(shù)模轉(zhuǎn)換,采用AD公司的AD9708,AD9708為8位、125MSPSD/A轉(zhuǎn)換芯片。濾波器負(fù)責(zé)對(duì)輸出波形進(jìn)行整形,濾去雜波。采用7階Butterworth濾波器,該濾波器通頻帶內(nèi)較平坦,阻帶漸漸下降,滿足輸出要求。
2.2 軟件部分實(shí)現(xiàn)
為得到較精確的正弦值,對(duì)相鄰取樣點(diǎn)的正弦值誤差進(jìn)行計(jì)算。在第一個(gè)1/4個(gè)周期中,共插入256個(gè)取樣點(diǎn),即在一個(gè)完整的正弦波周期中共有1024個(gè)取樣點(diǎn)。并且這些點(diǎn)均為等間隔分布。第一個(gè)1/4個(gè)周期的正弦波的最小值為原點(diǎn)的值0,最大值即峰值為π/2。先計(jì)算每個(gè)等間隔點(diǎn)對(duì)應(yīng)的弧度值。第k個(gè)點(diǎn)對(duì)應(yīng)的弧度值為
第一個(gè)1/4周期內(nèi)所有的弧度值為
由此可以得出完整周期內(nèi)的間隔d為(2π/ 510)-(π/510)=π/510。根據(jù)三角函數(shù)的和差化積進(jìn)行推算。本文采用的三角公式為
由積化和差公式計(jì)算間隔為固定值d的第n個(gè)取樣點(diǎn)和第n+1個(gè)取樣點(diǎn)可得相鄰兩個(gè)點(diǎn)的誤差計(jì)算式:
上式中12’h00c為計(jì)算機(jī)中的正弦值所代表的16進(jìn)制數(shù)值。下面再來(lái)計(jì)算和差化積公式中右側(cè)的c■為三角函數(shù)值,數(shù)值變化為非線性,因此尋找其誤差規(guī)律。根據(jù)式的值在編程過(guò)程中按照某16進(jìn)制數(shù)值變化時(shí),算式的值會(huì)保持不變,在此誤差算式值保持不變的情況下,等間隔的正弦值會(huì)保持相同的誤差進(jìn)行增長(zhǎng)。且此誤差計(jì)算式即使在變化的情況下,每次變化的值為12’h001。編程過(guò)程中更容易實(shí)現(xiàn)。通過(guò)區(qū)間估計(jì)計(jì)算可得如下正弦值誤差表。
表1 正弦值誤差表
根據(jù)上表可以看出誤差值每次變化值為1,通過(guò)誤差值對(duì)實(shí)際正弦值進(jìn)行擬合即可得到精度較高的正弦值。根據(jù)以上誤差分析編寫其程序如下:
通過(guò)以上程序在FPGA+DA+filter的硬件平臺(tái)上進(jìn)行了實(shí)驗(yàn),對(duì)程序進(jìn)行了驗(yàn)證,獲得了預(yù)期的波形。
使用模擬電路產(chǎn)生的精確正弦波,成本高,調(diào)試過(guò)程繁瑣,所需器件多,制作周期長(zhǎng)。Cordic算法將輸出反饋到輸入進(jìn)行反復(fù)迭代的運(yùn)算,計(jì)算速度將減慢。若要提高精度必須擴(kuò)大流水線級(jí)數(shù)。伴隨流水線的增加,速度將會(huì)下降,而且程序還會(huì)消耗更大的系統(tǒng)面積。且每級(jí)迭代中都需要預(yù)先存儲(chǔ)入反正切值(arctanθ),當(dāng)運(yùn)算字長(zhǎng)增大時(shí),所需存儲(chǔ)空間呈指數(shù)增長(zhǎng)。系統(tǒng)占據(jù)的資源將急劇加大,多次對(duì)存儲(chǔ)空間進(jìn)行訪問(wèn)也會(huì)降低速度。利用taylor級(jí)數(shù)進(jìn)行逼近產(chǎn)生正弦波也具有局限性,taylor級(jí)數(shù)的精度取決與展開的項(xiàng)數(shù)(即迭代次數(shù))和初始值,次數(shù)越多越精確,但運(yùn)算時(shí)間長(zhǎng)。初始值較小,精度就高,但隨著迭代初始值增大,精度就會(huì)隨之降低。
本算法與三種傳統(tǒng)算法相比,既避免了較大的資源浪費(fèi),同時(shí)又得到有一定精準(zhǔn)度的正弦波,在開發(fā)和調(diào)試過(guò)程中,節(jié)約時(shí)間和成本,具有一定的實(shí)際應(yīng)用價(jià)值。
本算法經(jīng)過(guò)實(shí)驗(yàn)驗(yàn)證可得到10k~270k頻率范圍的正弦波,1/4個(gè)周期中共有256個(gè)點(diǎn),外部時(shí)鐘頻率為50MHz。通過(guò)改變?nèi)娱g隔即可改變正弦波的頻率。實(shí)驗(yàn)生成的信號(hào)和頻譜如下。
本設(shè)計(jì)是基于FPGA的數(shù)字式信號(hào)發(fā)生器,充分利用VerilogHDL硬件描述語(yǔ)言編程時(shí)方便的優(yōu)勢(shì),算法設(shè)計(jì)思路簡(jiǎn)單,可提高開發(fā)效率,縮短開放周期,容易修改,可將輸出頻率范圍增大。消耗邏輯門數(shù)量較少,該算法不需要調(diào)用FPGA片內(nèi)multiplier,節(jié)省資源。完全不用考慮模擬方式使用哪些分立元件及其帶來(lái)的調(diào)試、修改的麻煩,而且可以進(jìn)行功能測(cè)試以及硬件測(cè)試。實(shí)驗(yàn)表明發(fā)生器產(chǎn)生的波形穩(wěn)定,頻率調(diào)節(jié)較為方便,精度高,接入示波器可得到平滑、穩(wěn)定、精度較高的正弦波,有一定的開發(fā)及生產(chǎn)價(jià)值。
[1]朱衛(wèi)華,黃鄉(xiāng)佩,盧桂榮.基于FPGA的高精度數(shù)字移相低頻正弦波發(fā)生器[J].微計(jì)算機(jī)信息,2005,21(7):106-107,125.
[2]韓素敏.基于VHDL的正弦波發(fā)生器設(shè)計(jì)[J].陜西工學(xué)院學(xué)報(bào),2003,19(4):8-10.
[3]劉渝.快速高精度正弦波頻率估計(jì)綜合算法[J].電子學(xué)報(bào),1999,27(6):126-128.
[4]趙國(guó)勛徐苓安.基于直接數(shù)字頻率合成的正弦波發(fā)生器[J].自動(dòng)化與儀表,2000,15(1):15-18.
[5]陳一堯,黃麗,方紅斌.數(shù)字合成正弦波發(fā)生器[J].儀表技術(shù),1998(5):9-11.
[6]王江,楊敏.一種基于DSP的數(shù)字合成正弦波發(fā)生器[J].微計(jì)算機(jī)信息,2009(2):9-11.
[7]漢澤西,張海飛,盧桂榮.基于DDS技術(shù)正弦波信號(hào)發(fā)生器的設(shè)計(jì)[J].電子測(cè)試,2009(8):65-69.
[8]霰軍憲,邵立群,張杰.基于低失真、高精度可調(diào)正弦波發(fā)生器實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2010,33(8):134-137.
[9]楊小明,吳光敏,孟宇.一種正弦波發(fā)生器的設(shè)計(jì)方法[J].現(xiàn)代電子技術(shù),2008,31(1):64-65.
[10]商同,劉興榮.一種新型實(shí)用、性能穩(wěn)定的正弦發(fā)生器[J].計(jì)量技術(shù),1998(6):21-24.
[11]王燕.一種新穎的程控正弦波發(fā)生器[J].電測(cè)與儀表,1996(4):19-21.
[12]王正仕,樓珍麗.一種新型的數(shù)字化正弦波發(fā)生器[J].儀表技術(shù),1999(3):26-27.
A Digital Sine Wave Generator Design Method Based on Error
ZHANG Wenduo
(Beijing's Extraordinary Electronic Technology Development Ltd.,Beijing100044)
This paper introduces an algorithm to get the accurate sine wave by digital method.By analyzing and calculating the product formula,the position of the corresponding sampling point and the interval of the adjacent sampling point which need to compensate the error of the output value are caculated.The output value of the sine wave is subjected to error correction at the position of each sample point,thereby obtaining a more accurate sine wave.The algorithm has been implemented on the CYCLONEIV series chip Ep4CE15F7C8 of Altera Corporation,and is programmed with VerilogHDL.The algorithm has a clear and concise structure,does not need to call the multiplier,consumes less resources,generates a smoother waveform,can be used as a complete carrier in the general communication system,can also be used in instrumentation and industrial control.
sine wave,generator,VerilogHDL,F(xiàn)PGA
TM9
10.3969/j.issn.1672-9730.2017.06.035
2016年12月1日,
2017年1月21日
張文鐸,男,碩士研究生,研究方向:電力電子電路及其控制。