張文鐸
(北京圣非凡電子系統技術開發有限公司北京100044)
一種基于誤差的數字式正弦波發生器設計方法
張文鐸
(北京圣非凡電子系統技術開發有限公司北京100044)
論文介紹一種通過數字方式獲得精準正弦波的算法,通過分析和差化積公式,預先計算需要對輸出值的誤差進行補償的相應取樣點的位置和相鄰取樣點的間隔,并在編程時在每個采樣點的位置對正弦波的輸出值進行誤差校正。進而獲得更精確的正弦波。該算法已在Altera公司的CYCLONEIV系列芯片Ep4CE15F7C8上完成了實現,采用VerilogHDL語言進行編程。該算法結構清晰簡明,不需要調用乘法器,消耗更少的資源,生成波形較平滑,可被用作完整載波在一般通信系統中進行使用,也可應用在儀器儀表及工控等領域,合成較復雜的波形。
正弦波;發生器;VerilogHDL;FPGA
Class NumberTM9
模擬方式和數字方式是常用的兩種正弦波發生器設計方式。常見模擬方式有RC震蕩電路、LC震蕩電路和石英晶體震蕩器等。一般的正弦波震蕩電路采用選頻網絡進行選頻,利用正反饋產生正弦波,再采用其他模擬電路來進行放大或處理[1]。這種模擬方式生成正弦波需通過調整器件參數來達到改變正弦波頻率的目的。多數模擬電路形成的系統是非線性的,不容易通過計算來得出精確的參數,通常是通過一些粗略的估算,選擇合適的工作點,確定器件的具體值。所以通過模擬方式產生較穩定、較高精度的正弦信號需要較長時間的調整[2]。這種方法不容易固化電路參數,容易受外界環境干擾。如果想獲得良好的正弦波需要花費大量成本。
采用直接頻率合成(DDS)的方法,可以采用DSP、FPGA或其他MCU作為數字控制芯片。這種方法是預先在存儲區中放入一個完整周期的2n個等間隔正弦值數據,通過對這些數據的變換間隔取樣輸出并進行D/A轉換得到正弦波。通過改變存儲區數據的取樣寬度,即變換取樣點的間隔可合成不同頻率的波形。這種方法伴隨n值的變大可以滿足要求的精度(存儲的數據量隨之增大)。因此這種方法若想得到滿意的精度,需要具有足夠的存儲區空間,同時配合高精度數模轉換器才可實現。經典的計算正弦波數值的算法有以下兩種:
第一種是被稱為Cordic算法的坐標旋轉數字計算方法。Cordic算法是1971年J.Walther最先提出一種只用加法運算和移位運算的方法。通過恒定旋轉求出相應的三角函數值,對多次不同方向旋轉的角度進行累加,得到的角度代數和即為所求值。該方法在需提高正弦值精度時,需增加流水線級數,會大量消耗數字芯片的內部資源。
第二種算法是運用數值分析中逼近函數的思想,采用級數來逼近函數值的算法,一般的方式有chebyshev逼近、pade逼近、taylor逼近和最佳一致逼近等。多項式展開的項數越多,被近似的三角函數值就越準確。如果要求的函數值精度較高,則需要很多展開項來進行逼近,且編程時多為復雜系數的迭代多項式,運算的次數很多。計算過程中需調用乘法器,并且程序要執行大量浮點運算。
本文提出一種新設計思路可以消耗較少的硬件資源,通過計算的方法同時獲得較精確正弦值。這種算法得到的正弦波可以用于電視、廣播等數字通信系統中。
2.1 硬件部分實現
由于本發生器輸出正弦波具有較高精度,在硬件電路的設計上采用控制芯片FPGA、數模轉換芯片D/A和濾波器進行完成。FPGA負責運算,采用CYCLONEIV系列。型號為EP4CE15F17C8,封裝為表貼256-LBGA,核電壓1.25V。速度級別為8,邏輯門數為15408個,存儲空間為516096位。內置4個鎖相環。具有260個9×9位的乘法器,200個18×18位的乘法器。D/A進行數模轉換,采用AD公司的AD9708,AD9708為8位、125MSPSD/A轉換芯片。濾波器負責對輸出波形進行整形,濾去雜波。采用7階Butterworth濾波器,該濾波器通頻帶內較平坦,阻帶漸漸下降,滿足輸出要求。
2.2 軟件部分實現
為得到較精確的正弦值,對相鄰取樣點的正弦值誤差進行計算。在第一個1/4個周期中,共插入256個取樣點,即在一個完整的正弦波周期中共有1024個取樣點。并且這些點均為等間隔分布。第一個1/4個周期的正弦波的最小值為原點的值0,最大值即峰值為π/2。先計算每個等間隔點對應的弧度值。第k個點對應的弧度值為
第一個1/4周期內所有的弧度值為
由此可以得出完整周期內的間隔d為(2π/ 510)-(π/510)=π/510。根據三角函數的和差化積進行推算。本文采用的三角公式為
由積化和差公式計算間隔為固定值d的第n個取樣點和第n+1個取樣點可得相鄰兩個點的誤差計算式:
上式中12’h00c為計算機中的正弦值所代表的16進制數值。下面再來計算和差化積公式中右側的c■為三角函數值,數值變化為非線性,因此尋找其誤差規律。根據式的值在編程過程中按照某16進制數值變化時,算式的值會保持不變,在此誤差算式值保持不變的情況下,等間隔的正弦值會保持相同的誤差進行增長。且此誤差計算式即使在變化的情況下,每次變化的值為12’h001。編程過程中更容易實現。通過區間估計計算可得如下正弦值誤差表。

表1 正弦值誤差表
根據上表可以看出誤差值每次變化值為1,通過誤差值對實際正弦值進行擬合即可得到精度較高的正弦值。根據以上誤差分析編寫其程序如下:
通過以上程序在FPGA+DA+filter的硬件平臺上進行了實驗,對程序進行了驗證,獲得了預期的波形。
使用模擬電路產生的精確正弦波,成本高,調試過程繁瑣,所需器件多,制作周期長。Cordic算法將輸出反饋到輸入進行反復迭代的運算,計算速度將減慢。若要提高精度必須擴大流水線級數。伴隨流水線的增加,速度將會下降,而且程序還會消耗更大的系統面積。且每級迭代中都需要預先存儲入反正切值(arctanθ),當運算字長增大時,所需存儲空間呈指數增長。系統占據的資源將急劇加大,多次對存儲空間進行訪問也會降低速度。利用taylor級數進行逼近產生正弦波也具有局限性,taylor級數的精度取決與展開的項數(即迭代次數)和初始值,次數越多越精確,但運算時間長。初始值較小,精度就高,但隨著迭代初始值增大,精度就會隨之降低。
本算法與三種傳統算法相比,既避免了較大的資源浪費,同時又得到有一定精準度的正弦波,在開發和調試過程中,節約時間和成本,具有一定的實際應用價值。
本算法經過實驗驗證可得到10k~270k頻率范圍的正弦波,1/4個周期中共有256個點,外部時鐘頻率為50MHz。通過改變取樣間隔即可改變正弦波的頻率。實驗生成的信號和頻譜如下。
本設計是基于FPGA的數字式信號發生器,充分利用VerilogHDL硬件描述語言編程時方便的優勢,算法設計思路簡單,可提高開發效率,縮短開放周期,容易修改,可將輸出頻率范圍增大。消耗邏輯門數量較少,該算法不需要調用FPGA片內multiplier,節省資源。完全不用考慮模擬方式使用哪些分立元件及其帶來的調試、修改的麻煩,而且可以進行功能測試以及硬件測試。實驗表明發生器產生的波形穩定,頻率調節較為方便,精度高,接入示波器可得到平滑、穩定、精度較高的正弦波,有一定的開發及生產價值。
[1]朱衛華,黃鄉佩,盧桂榮.基于FPGA的高精度數字移相低頻正弦波發生器[J].微計算機信息,2005,21(7):106-107,125.
[2]韓素敏.基于VHDL的正弦波發生器設計[J].陜西工學院學報,2003,19(4):8-10.
[3]劉渝.快速高精度正弦波頻率估計綜合算法[J].電子學報,1999,27(6):126-128.
[4]趙國勛徐苓安.基于直接數字頻率合成的正弦波發生器[J].自動化與儀表,2000,15(1):15-18.
[5]陳一堯,黃麗,方紅斌.數字合成正弦波發生器[J].儀表技術,1998(5):9-11.
[6]王江,楊敏.一種基于DSP的數字合成正弦波發生器[J].微計算機信息,2009(2):9-11.
[7]漢澤西,張海飛,盧桂榮.基于DDS技術正弦波信號發生器的設計[J].電子測試,2009(8):65-69.
[8]霰軍憲,邵立群,張杰.基于低失真、高精度可調正弦波發生器實現[J].現代電子技術,2010,33(8):134-137.
[9]楊小明,吳光敏,孟宇.一種正弦波發生器的設計方法[J].現代電子技術,2008,31(1):64-65.
[10]商同,劉興榮.一種新型實用、性能穩定的正弦發生器[J].計量技術,1998(6):21-24.
[11]王燕.一種新穎的程控正弦波發生器[J].電測與儀表,1996(4):19-21.
[12]王正仕,樓珍麗.一種新型的數字化正弦波發生器[J].儀表技術,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,FPGA
TM9
10.3969/j.issn.1672-9730.2017.06.035
2016年12月1日,
2017年1月21日
張文鐸,男,碩士研究生,研究方向:電力電子電路及其控制。