陳子為
(成都信息工程學院 電子工程學院,四川 成都 610225)
任意波形發生器AWG(arbitrary waveform generator)是信號源的一種,具有信號源所有的特點,而且可以產生任何可以設計的波形,適合各種仿真和測試要求,極大地方便了設計和調試.因此AWG在許多領域中獲得廣泛應用.例如,雷達設備、通信系統、控制系統、儀器儀表、仿真、檢測和DSP應用系統等.
在當前市場中,AWG是由模擬電路或數字-模擬混合電路組成.其特點是一個具體電路只能產生若干種特定的信號.如果一個信號發生器要產生多種信號,就勢必增加相應電路,使得電路體積增加,其方便性、通用性和可靠性都大為降低[1].故常見的信號發生器所能產生的信號波形十分有限,此時,最好使用數字電路和微處理器構成的數字式AWG.這種發生器不僅能克服模擬電路發生器的不足,而且具有體積小,精度高和使用方便等優點.
目前數字式AWG產生任意波形的方法主要有3種:查表法、級數展開法[2]和直接數字頻率合成DDS(direct digital synthesizing)[3].查表法是通過降低運算精度來提高運算速度,其精度要求越高,占用的存儲單元也越大,因此這種方法僅適用于對精度要求不是很高的場合;級數展開法占用的存儲單元很少,而且精度高,但如果要生成一個任意的離散時間因果周期信號,特別是那些無法用解析形式具體表達的信號,級數展開法仍很難實現;與查表法一樣,DDS方法需要一個波形存儲器,占用的存儲單元也較大.為此,提出了一種基于改進的數字振蕩器算法和DSP的任意波形發生器.
對一個離散時間序列x(n)進行處理并產生另一離散時間序列y(n)的離散時間系統被稱為數字濾波器.數字濾波器的極點必須配置在單位圓的內部,以保證它們的穩定性和暫態過程的盡快衰減.如果把極點配置在單位圓的圓周上,那么濾波器就會產生持續的固定頻率的振蕩,數字濾波器就變成了數字振蕩器.利用這個特點,可以構成任意波形的發生器,在脈沖激勵x[k]=δ(k)下能產生持續的任意波形信號.因此,數字式AWG的設計問題事實上是一個數字濾波器的實現問題.根據信號與系統理論,離散時間線性時,不變系統(LTI)的輸出信號可以表達為輸入信號與系統沖激響應的卷積和,即:
y(n)=h(n)*x(n)
(1)
如果輸入信號是單位沖激序列δ(n),輸出信號y(n)就是我們所期望的沖激響應h(n),即:
y(n)=h(n)*δ(n)=h(n)
(2)
由(2)式可以看出,只要已知系統的沖激響應h(n),就可方便地實現數字濾波器,因為卷積和中只用到了加、乘和延時這幾種軟、硬件的基本操作(延時可利用寄存器操作實現)[4].
數字信號處理本質上是離散時間信號處理,故無論用計算機軟件、可編程DSP芯片或專用的超大規模集成電路來實現數字濾波器,為了滿足實時處理的要求,首先必須確定一個離散時間網絡結構以描述數字濾波器內部信息的動態過程.
結合因果性,推導一個通用數字振蕩器的系統函數.假設所求系統的響應為h(n)=p(n)·u(n),其中p(n)=p(n+N)為周期函數,N為p(n)的周期,u(n)為階躍信號.對h(n)進行Z變換,得到通用數字振蕩器的系統函數為:

(3)
令n=m+kN,0≤m≤N- 1,并利用p(n)的周期性,有

(4)
式(4)就是一個通用數字振蕩器的系統函數,它代表一種可遞歸實現的IIR濾波器.從式(4)可知,系統的收斂域(ROC)位于單位圓外且包括無限遠點.

圖1 通用數字振蕩器的直接離散時間網絡結構
根據式(4)可推導出任何因果數字振蕩器的離散時間網絡結構,如圖1所示.當輸入信號x(n)是單位沖激δ(n)時,輸出信號y(n)就是我們所期望的沖激響應h(n),即某一因果周期信號.圖1中,M=N-1;a0=1, aN=-1,am=0,m=1,2,…,N-1;bm=p(m),m=0,1,2,…,M.由此結構,即可得出相應的算法,再據此算法進行軟件或硬件的設計就十分方便了,條件是必須知道所要產生的因果周期信號在一個周期上的值.這在實際使用中可通過Matlab等仿真軟件事先計算得到,然后通過串行口或網口將這些預先計算出的波形初始數據傳輸到DSP內部的存儲器中.
顯然,該數字振蕩器的收斂域在單位圓外,不包含單位圓,是一個不穩定因果LTI系統.由于采用數字振蕩器方法產生DSP運算只是用數字方式或數字器件進行加法、乘法和延時操作,不易受物理化(如溫度波動、器件老化等)的影響.因此盡管該數字振蕩器是一個不穩定系統,但只要當輸入信號為單位沖激時,若能排除量化誤差等因素的影響,利用數字運算的高度精確性和抗干擾能力,則無論是用軟件還是硬件實現,數字振蕩器內部的處理性能將十分可靠,能保證實現預定輸出,也就是說,系統將能穩定工作而不至溢出或崩潰(即所謂邊緣穩定的)[4].

圖2 利用通用數字振蕩器算法產生任意波形的仿真結果
采用通用數字振蕩器的直接離散時間網絡結構實現任意波形發生的Matlab仿真程序如下,其仿真結果如圖2所示.
N=64; %N為離散信號的周期
M=N-1; L=N/2;
D=3*N; %D為輸出樣本的總點數
TS=0.001; %TS為采樣周期
n=2:N; %a(i)和b(i)是離散時間網絡結構中乘法器的系數
a(n)=0;a(1)=1;a(N+1)=-1;
m=0:N/4-1; b(m+1)=m; %所要產生的因果周期信號在一個周期上的值
m=N/4:3*N/4-1; b(m+1)=N/16*cos(2*pi*(m-N/4)/L)+N/16;
m=3*N/4:M; b(m+1)=N-m;
im(1)=1;im(2:D)=0; %利用數組來實現輸入信號x(n)即沖激函數im(n)
n=1:D; h(n)=0;
n=1:N; x(n)=0;
n=1:N + 1; y(n)=0; %以下為實現數字振蕩器的遞歸程序
forn=1:D
x(1)=im(n);
fori=1:
y(1)=b(i)*x(i)-a(i+1)*y(i+1)+y(1); %%累加和的實現應視具體的軟硬件而定
end
h(n)=y(1);
for i=N:-1:1 %利用循環實現輸入輸出的多階延時
x(i+1)=x(i);
y(i+1)=y(i);
end
y(1)=0; %本句與%%句共同完成y(1)的計算
end
plot(0:D-1,h)
通用數字振蕩器算法實現任意波形發生的條件是必須提供一個單位沖激序列激勵信號,并且要知道所要產生的波形信號在一個周期上的值.當所需要產生的波形信號的周期N很大時,采用這種方法實現需要存儲大量的波形數據,使用并不方便.因此需要對通用的數字振蕩器算法進行改進.對式(4)進行化簡,則其系統函數可以具有較低的階次,這意味著在執行中延時次數較少或運算速度較快,同時對存儲單元數量的要求也較少.

(5)
故A·cos(kωT)(A為該序列的幅度)的Z變換為:

(6)
其中,a1=-2cos(ω0T),a2=1,b1=-cos(ω0T).
其信號流圖如圖3所示.

圖3 余弦信號產生流圖
由式(6)和圖3可得到如下所示的差分方程:
y[k]=-a1y[k-1]-a2y[k-2]+Ax[k]+Ab1x[k-1]
(7)
這是一個二階差分方程,其單位沖激響應即為Acos(kωT).設初始條件為0,即y[-1]=0,y[-2]=0,利用單位沖激δ(k)的性質,并有x[k]=δ(k),代入上式得:
k=0,y[0]=- a1y[-1] - a2y[-2] + A=A;k=1,y[1]=- a1y[0] - a2y[-1] + Ab1=-A(a1-b1);k=2,y[2]=- a1y[1] - a2y[0] ;k=3,y[3]=- a1y[2] - a2y[1];…;k=n,y[n]=- a1y[n-1] - a2y[n-2].
當k≥2,y[k]能用y[k-1]和y[k-2]算出,這是一個遞歸的差分方程.將a1=-2cos(ω0T),a2=1,b1=-cos(ω0T)代入上式,得到產生余弦信號的遞歸公式為:
y[k]=2cos(ω0T)×y[k-1]-y[k-2]
(8)
式(8)是在輸入信號為單位沖激序列且初始狀態為0的條件下推導出來的.在實際應用中單位沖激序列一般難于實現,所以我們可以根據信號與系統的理論,用非零的初始狀態來代替單位沖激序列的激勵作用,即:
y[0]=- a1y[-1]-a2y[-2]=A
(9)
y[1]=- a1y[0]-a2y[-1]=-A(a1-b1)
(10)
對上面兩式聯立求解,得到:y[-1]=Acos(ω0T),y[-2]=Acos(2ω0T).
為了便于定點DSP處理,避免在加法運算過程中產生溢出,應該對系數a1、a2、b1進行定標,即除以2,然后用16 位定點格式表示.這樣采用數字振蕩器法實現余弦信號的遞推公式變為:
y[n]=coeff×y[n-1]-y[n-2]
(11)
其中,

(12)
f0是正弦(或余弦)信號的頻率,fs是D/A轉換速率,A是所產生信號的幅度.
同理,可以推導出產生正弦信號的遞推公式,其與式(11)完全相同,只不過初始值y[0]、y[1]不同:
(13)

圖4 系統硬件連接框圖
3.1硬件設計系統硬件連接框圖如圖4所示.上位機(PC機)端軟件產生波形初始化數據,通過異步串行口將這些波形初始化數據傳輸到DSP(TMS320F206)內部的存儲器中,然后DSP利用異步串行口接收到波形初始化數據,并采用數字振蕩器正/余弦波形產生算法(即式(11))進行波形發生運算.由于DSP輸出的是數字信號,要得到光滑的正/余弦波,就要通過D/A轉換芯片以及相應的濾波電路來實現.在這里需要根據不同要求的輸出頻率來選擇相應的D/A芯片和濾波電路,經過濾波后的正弦信號再通過放大處理輸出,這樣就可以得到很理想的正/余弦信號.本設計根據實際應用要求,采用模擬接口芯片(AIC芯片)TLV320AIC10.
TLV320AIC10是美國TI公司生產的一款語音編解碼(CODEC)芯片,該芯片采用16位、Σ-Δ方式的A/D、D/A轉換器,最高采樣頻率為22 kHz.AIC工作模式可以是主模式,也可以是從模式(其區別在于FS和SCLK的產生源),本設計中AIC工作在主模式,而讓DSP工作在從模式.DSP通過同步串行接口(SSP)與AIC芯片相連.由DSP產生的數字波形從SSP的DX引腳進行發送,AIC芯片通過DIN接收后利用AIC內部的D/A功能,將數字波形轉換成模擬波形后從OUTP、OUTM引腳輸出,這樣就可以得到平滑的波形輸出.
由DSP產生的主時鐘輸出信號CLKOUT1經由D觸發器構成的T’觸發器的二分頻,提供10 MHz方波信號給AIC的主時鐘MCLK.AIC片內時鐘電路以MCLK為時鐘源,產生、分配諸如采樣速率、SCLK等.
3.2 PC端GUI設計利用式(11)遞推公式計算正弦或余弦值y[n]需要已知cos(ω0T)和正弦/余弦的前兩個初始值y[0]和y[1].coeff、y[0]和y[1]就是產生正弦或余弦信號的3個初始化波形數據.這3個數據可以通過圖5所示的用戶軟件界面獲得.

圖5 用戶軟件界面
由于MATLAB具有超強的數據處理能力,被廣泛地應用于信號處理、自動控制等領域,而且它的圖形用戶界面編程技術(GUIDE)簡單易學,即使非專業人員也能編制出界面友好、功能強大的應用程序.因此本設計上位機(PC機端)控制軟件由Matlab GUI編寫.利用MATLAB7.X自帶的通信類(SERIAL)和GUI編程技術,方便地開發出波形控制與通信軟件,通過人機界面能夠完成對波形參數的控制與通信.如圖5所示,通過“波形選擇”下拉菜單選擇所需產生的波形類型,然后通過“波形參數設置”功能對波形參數進行調節,此時Matlab軟件會自動根據式(12)或(13)計算出coeff、y[0]和y[1].最后點擊“Send”按鈕,由PC機的串行口發送初始化波形數據給DSP.在產生正/余弦信號的過程中,由于sinx(或cosx)的值總是小于1的數,而F206 DSP是16位定點處理器,所以要將其乘以215,變成Q15的數據格式.但是,由于TMS320F206的異步串行口(ASP)的收發數據字長是8位,所以在Matlab中計算初始化波形數據并轉化為定點格式時,應先乘以27,然后在DSP程序中,再將其左移8位(即乘以28),這樣就變成Q15的定點格式了.
3.3 DSP軟件設計在使用AIC芯片進行D/A轉換前,必須首先對AIC進行初始化設置,即設置AIC中的D/A轉換器的工作模式(15+1bit模式,16bit模式)、抽樣頻率以及輸出增益等.TLV320AIC10的數據通信分為主通信和次通信兩個階段.主通信是正常的數據傳輸,次通信是指傳輸控制或配置數據的過程在AIC配置為“15+1”模式時,DIN的D0=0表示為無次通信請求(即表示傳輸波形數據),若D0=1則表示正在傳輸控制或配置數據(即進行AIC芯片的初始化操作).

圖6 輸出結果顯示
本設計采用同步串行口發送中斷進行波形發生.當同步串行口發送緩沖區空時產生SSP發送中斷,執行SSP發送中斷服務程序.該中斷服務程序首先利用前面的y[n-1]和y[n-2],根據數字振蕩器算法計算出新的y[n],并把結果存放于data2aic單元中.然后將data2aic數據的最后一位置0(即設置為主通信)后,通過OUT data2aic,ADTR語句輸出給ADTR寄存器,此后AIC芯片自動將該數字波形數據進行D/A轉換后從OUTP、OUTM引腳輸出.如果將示波器的探頭接入此處,我們將在示波器上看到一個正/余弦信號波形,如圖6所示.
AWG的應用范圍很廣,幾乎覆蓋了所有行業.凡是需要使用其他標準信號源所不能提供的激勵信號的應用,都可能是AWG的用武之地.隨著當今電子系統越來越復雜,AWG正在成為模擬復雜信號的事實標準.本設計應用改進的數字振蕩器算法和DSP技術完成了AWG的軟硬件設計和調試,測試結果表明,該波形發生器基本達到了設計要求,并具有突出的優點:靈活性高、重現性和穩定性強,精度和分辨率高,動態范圍寬,可實時性強,且成本低廉,有著廣闊的應用前景.
參考文獻:
[1] 紀宗南.DSP實用技術和應用實例[M].北京:航空工業出版社,2006:170-175.
[2] 陳子為.DSP系統應用與實訓[M].西安:西安電子科技大學出版社,2008:49-51.
[3] 張恒毅,劉寧.基于數字頻率合成技術的任意波形發生器設計與應用[J].海洋技術,2009,28(1):78-80.
[4] 姚宇新,錢煒坤.數字振蕩器的實現原理與仿真編程[J].電氣電子教學學報,2003,25(1):44-48.
[5] 王江,楊敏,陳亞駿.一種基于DSP的數字合成正弦波發生器[J].儀表技術,1999(2):9-11.
[6] 蹇勇,彭龑.一種新型正弦信號發生器的設計[J].實驗科學與技術,2006(4):29-30.
[7] 郝小江,石海霞.基于DSP的數字振蕩器及應用[J].自動測量與控制,2007,26(8):70-71.