陳子為
(成都信息工程學(xué)院 電子工程學(xué)院,四川 成都 610225)
任意波形發(fā)生器AWG(arbitrary waveform generator)是信號(hào)源的一種,具有信號(hào)源所有的特點(diǎn),而且可以產(chǎn)生任何可以設(shè)計(jì)的波形,適合各種仿真和測(cè)試要求,極大地方便了設(shè)計(jì)和調(diào)試.因此AWG在許多領(lǐng)域中獲得廣泛應(yīng)用.例如,雷達(dá)設(shè)備、通信系統(tǒng)、控制系統(tǒng)、儀器儀表、仿真、檢測(cè)和DSP應(yīng)用系統(tǒng)等.
在當(dāng)前市場(chǎng)中,AWG是由模擬電路或數(shù)字-模擬混合電路組成.其特點(diǎn)是一個(gè)具體電路只能產(chǎn)生若干種特定的信號(hào).如果一個(gè)信號(hào)發(fā)生器要產(chǎn)生多種信號(hào),就勢(shì)必增加相應(yīng)電路,使得電路體積增加,其方便性、通用性和可靠性都大為降低[1].故常見(jiàn)的信號(hào)發(fā)生器所能產(chǎn)生的信號(hào)波形十分有限,此時(shí),最好使用數(shù)字電路和微處理器構(gòu)成的數(shù)字式AWG.這種發(fā)生器不僅能克服模擬電路發(fā)生器的不足,而且具有體積小,精度高和使用方便等優(yōu)點(diǎn).
目前數(shù)字式AWG產(chǎn)生任意波形的方法主要有3種:查表法、級(jí)數(shù)展開(kāi)法[2]和直接數(shù)字頻率合成DDS(direct digital synthesizing)[3].查表法是通過(guò)降低運(yùn)算精度來(lái)提高運(yùn)算速度,其精度要求越高,占用的存儲(chǔ)單元也越大,因此這種方法僅適用于對(duì)精度要求不是很高的場(chǎng)合;級(jí)數(shù)展開(kāi)法占用的存儲(chǔ)單元很少,而且精度高,但如果要生成一個(gè)任意的離散時(shí)間因果周期信號(hào),特別是那些無(wú)法用解析形式具體表達(dá)的信號(hào),級(jí)數(shù)展開(kāi)法仍很難實(shí)現(xiàn);與查表法一樣,DDS方法需要一個(gè)波形存儲(chǔ)器,占用的存儲(chǔ)單元也較大.為此,提出了一種基于改進(jìn)的數(shù)字振蕩器算法和DSP的任意波形發(fā)生器.
對(duì)一個(gè)離散時(shí)間序列x(n)進(jìn)行處理并產(chǎn)生另一離散時(shí)間序列y(n)的離散時(shí)間系統(tǒng)被稱為數(shù)字濾波器.數(shù)字濾波器的極點(diǎn)必須配置在單位圓的內(nèi)部,以保證它們的穩(wěn)定性和暫態(tài)過(guò)程的盡快衰減.如果把極點(diǎn)配置在單位圓的圓周上,那么濾波器就會(huì)產(chǎn)生持續(xù)的固定頻率的振蕩,數(shù)字濾波器就變成了數(shù)字振蕩器.利用這個(gè)特點(diǎn),可以構(gòu)成任意波形的發(fā)生器,在脈沖激勵(lì)x[k]=δ(k)下能產(chǎn)生持續(xù)的任意波形信號(hào).因此,數(shù)字式AWG的設(shè)計(jì)問(wèn)題事實(shí)上是一個(gè)數(shù)字濾波器的實(shí)現(xiàn)問(wèn)題.根據(jù)信號(hào)與系統(tǒng)理論,離散時(shí)間線性時(shí),不變系統(tǒng)(LTI)的輸出信號(hào)可以表達(dá)為輸入信號(hào)與系統(tǒng)沖激響應(yīng)的卷積和,即:
y(n)=h(n)*x(n)
(1)
如果輸入信號(hào)是單位沖激序列δ(n),輸出信號(hào)y(n)就是我們所期望的沖激響應(yīng)h(n),即:
y(n)=h(n)*δ(n)=h(n)
(2)
由(2)式可以看出,只要已知系統(tǒng)的沖激響應(yīng)h(n),就可方便地實(shí)現(xiàn)數(shù)字濾波器,因?yàn)榫矸e和中只用到了加、乘和延時(shí)這幾種軟、硬件的基本操作(延時(shí)可利用寄存器操作實(shí)現(xiàn))[4].
數(shù)字信號(hào)處理本質(zhì)上是離散時(shí)間信號(hào)處理,故無(wú)論用計(jì)算機(jī)軟件、可編程DSP芯片或?qū)S玫某笠?guī)模集成電路來(lái)實(shí)現(xiàn)數(shù)字濾波器,為了滿足實(shí)時(shí)處理的要求,首先必須確定一個(gè)離散時(shí)間網(wǎng)絡(luò)結(jié)構(gòu)以描述數(shù)字濾波器內(nèi)部信息的動(dòng)態(tài)過(guò)程.
結(jié)合因果性,推導(dǎo)一個(gè)通用數(shù)字振蕩器的系統(tǒng)函數(shù).假設(shè)所求系統(tǒng)的響應(yīng)為h(n)=p(n)·u(n),其中p(n)=p(n+N)為周期函數(shù),N為p(n)的周期,u(n)為階躍信號(hào).對(duì)h(n)進(jìn)行Z變換,得到通用數(shù)字振蕩器的系統(tǒng)函數(shù)為:
(3)
令n=m+kN,0≤m≤N- 1,并利用p(n)的周期性,有
(4)
式(4)就是一個(gè)通用數(shù)字振蕩器的系統(tǒng)函數(shù),它代表一種可遞歸實(shí)現(xiàn)的IIR濾波器.從式(4)可知,系統(tǒng)的收斂域(ROC)位于單位圓外且包括無(wú)限遠(yuǎn)點(diǎn).
圖1 通用數(shù)字振蕩器的直接離散時(shí)間網(wǎng)絡(luò)結(jié)構(gòu)
根據(jù)式(4)可推導(dǎo)出任何因果數(shù)字振蕩器的離散時(shí)間網(wǎng)絡(luò)結(jié)構(gòu),如圖1所示.當(dāng)輸入信號(hào)x(n)是單位沖激δ(n)時(shí),輸出信號(hào)y(n)就是我們所期望的沖激響應(yīng)h(n),即某一因果周期信號(hào).圖1中,M=N-1;a0=1, aN=-1,am=0,m=1,2,…,N-1;bm=p(m),m=0,1,2,…,M.由此結(jié)構(gòu),即可得出相應(yīng)的算法,再據(jù)此算法進(jìn)行軟件或硬件的設(shè)計(jì)就十分方便了,條件是必須知道所要產(chǎn)生的因果周期信號(hào)在一個(gè)周期上的值.這在實(shí)際使用中可通過(guò)Matlab等仿真軟件事先計(jì)算得到,然后通過(guò)串行口或網(wǎng)口將這些預(yù)先計(jì)算出的波形初始數(shù)據(jù)傳輸?shù)紻SP內(nèi)部的存儲(chǔ)器中.
顯然,該數(shù)字振蕩器的收斂域在單位圓外,不包含單位圓,是一個(gè)不穩(wěn)定因果LTI系統(tǒng).由于采用數(shù)字振蕩器方法產(chǎn)生DSP運(yùn)算只是用數(shù)字方式或數(shù)字器件進(jìn)行加法、乘法和延時(shí)操作,不易受物理化(如溫度波動(dòng)、器件老化等)的影響.因此盡管該數(shù)字振蕩器是一個(gè)不穩(wěn)定系統(tǒng),但只要當(dāng)輸入信號(hào)為單位沖激時(shí),若能排除量化誤差等因素的影響,利用數(shù)字運(yùn)算的高度精確性和抗干擾能力,則無(wú)論是用軟件還是硬件實(shí)現(xiàn),數(shù)字振蕩器內(nèi)部的處理性能將十分可靠,能保證實(shí)現(xiàn)預(yù)定輸出,也就是說(shuō),系統(tǒng)將能穩(wěn)定工作而不至溢出或崩潰(即所謂邊緣穩(wěn)定的)[4].
圖2 利用通用數(shù)字振蕩器算法產(chǎn)生任意波形的仿真結(jié)果
采用通用數(shù)字振蕩器的直接離散時(shí)間網(wǎng)絡(luò)結(jié)構(gòu)實(shí)現(xiàn)任意波形發(fā)生的Matlab仿真程序如下,其仿真結(jié)果如圖2所示.
N=64; %N為離散信號(hào)的周期
M=N-1; L=N/2;
D=3*N; %D為輸出樣本的總點(diǎn)數(shù)
TS=0.001; %TS為采樣周期
n=2:N; %a(i)和b(i)是離散時(shí)間網(wǎng)絡(luò)結(jié)構(gòu)中乘法器的系數(shù)
a(n)=0;a(1)=1;a(N+1)=-1;
m=0:N/4-1; b(m+1)=m; %所要產(chǎn)生的因果周期信號(hào)在一個(gè)周期上的值
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; %利用數(shù)組來(lái)實(shí)現(xiàn)輸入信號(hào)x(n)即沖激函數(shù)im(n)
n=1:D; h(n)=0;
n=1:N; x(n)=0;
n=1:N + 1; y(n)=0; %以下為實(shí)現(xiàn)數(shù)字振蕩器的遞歸程序
forn=1:D
x(1)=im(n);
fori=1:
y(1)=b(i)*x(i)-a(i+1)*y(i+1)+y(1); %%累加和的實(shí)現(xiàn)應(yīng)視具體的軟硬件而定
end
h(n)=y(1);
for i=N:-1:1 %利用循環(huán)實(shí)現(xiàn)輸入輸出的多階延時(shí)
x(i+1)=x(i);
y(i+1)=y(i);
end
y(1)=0; %本句與%%句共同完成y(1)的計(jì)算
end
plot(0:D-1,h)
通用數(shù)字振蕩器算法實(shí)現(xiàn)任意波形發(fā)生的條件是必須提供一個(gè)單位沖激序列激勵(lì)信號(hào),并且要知道所要產(chǎn)生的波形信號(hào)在一個(gè)周期上的值.當(dāng)所需要產(chǎn)生的波形信號(hào)的周期N很大時(shí),采用這種方法實(shí)現(xiàn)需要存儲(chǔ)大量的波形數(shù)據(jù),使用并不方便.因此需要對(duì)通用的數(shù)字振蕩器算法進(jìn)行改進(jìn).對(duì)式(4)進(jìn)行化簡(jiǎn),則其系統(tǒng)函數(shù)可以具有較低的階次,這意味著在執(zhí)行中延時(shí)次數(shù)較少或運(yùn)算速度較快,同時(shí)對(duì)存儲(chǔ)單元數(shù)量的要求也較少.
(5)
故A·cos(kωT)(A為該序列的幅度)的Z變換為:
(6)
其中,a1=-2cos(ω0T),a2=1,b1=-cos(ω0T).
其信號(hào)流圖如圖3所示.
圖3 余弦信號(hào)產(chǎn)生流圖
由式(6)和圖3可得到如下所示的差分方程:
y[k]=-a1y[k-1]-a2y[k-2]+Ax[k]+Ab1x[k-1]
(7)
這是一個(gè)二階差分方程,其單位沖激響應(yīng)即為Acos(kωT).設(shè)初始條件為0,即y[-1]=0,y[-2]=0,利用單位沖激δ(k)的性質(zhì),并有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].
當(dāng)k≥2,y[k]能用y[k-1]和y[k-2]算出,這是一個(gè)遞歸的差分方程.將a1=-2cos(ω0T),a2=1,b1=-cos(ω0T)代入上式,得到產(chǎn)生余弦信號(hào)的遞歸公式為:
y[k]=2cos(ω0T)×y[k-1]-y[k-2]
(8)
式(8)是在輸入信號(hào)為單位沖激序列且初始狀態(tài)為0的條件下推導(dǎo)出來(lái)的.在實(shí)際應(yīng)用中單位沖激序列一般難于實(shí)現(xiàn),所以我們可以根據(jù)信號(hào)與系統(tǒng)的理論,用非零的初始狀態(tài)來(lái)代替單位沖激序列的激勵(lì)作用,即:
y[0]=- a1y[-1]-a2y[-2]=A
(9)
y[1]=- a1y[0]-a2y[-1]=-A(a1-b1)
(10)
對(duì)上面兩式聯(lián)立求解,得到:y[-1]=Acos(ω0T),y[-2]=Acos(2ω0T).
為了便于定點(diǎn)DSP處理,避免在加法運(yùn)算過(guò)程中產(chǎn)生溢出,應(yīng)該對(duì)系數(shù)a1、a2、b1進(jìn)行定標(biāo),即除以2,然后用16 位定點(diǎn)格式表示.這樣采用數(shù)字振蕩器法實(shí)現(xiàn)余弦信號(hào)的遞推公式變?yōu)椋?/p>
y[n]=coeff×y[n-1]-y[n-2]
(11)
其中,
(12)
f0是正弦(或余弦)信號(hào)的頻率,fs是D/A轉(zhuǎn)換速率,A是所產(chǎn)生信號(hào)的幅度.
同理,可以推導(dǎo)出產(chǎn)生正弦信號(hào)的遞推公式,其與式(11)完全相同,只不過(guò)初始值y[0]、y[1]不同:
(13)
圖4 系統(tǒng)硬件連接框圖
3.1硬件設(shè)計(jì)系統(tǒng)硬件連接框圖如圖4所示.上位機(jī)(PC機(jī))端軟件產(chǎn)生波形初始化數(shù)據(jù),通過(guò)異步串行口將這些波形初始化數(shù)據(jù)傳輸?shù)紻SP(TMS320F206)內(nèi)部的存儲(chǔ)器中,然后DSP利用異步串行口接收到波形初始化數(shù)據(jù),并采用數(shù)字振蕩器正/余弦波形產(chǎn)生算法(即式(11))進(jìn)行波形發(fā)生運(yùn)算.由于DSP輸出的是數(shù)字信號(hào),要得到光滑的正/余弦波,就要通過(guò)D/A轉(zhuǎn)換芯片以及相應(yīng)的濾波電路來(lái)實(shí)現(xiàn).在這里需要根據(jù)不同要求的輸出頻率來(lái)選擇相應(yīng)的D/A芯片和濾波電路,經(jīng)過(guò)濾波后的正弦信號(hào)再通過(guò)放大處理輸出,這樣就可以得到很理想的正/余弦信號(hào).本設(shè)計(jì)根據(jù)實(shí)際應(yīng)用要求,采用模擬接口芯片(AIC芯片)TLV320AIC10.
TLV320AIC10是美國(guó)TI公司生產(chǎn)的一款語(yǔ)音編解碼(CODEC)芯片,該芯片采用16位、Σ-Δ方式的A/D、D/A轉(zhuǎn)換器,最高采樣頻率為22 kHz.AIC工作模式可以是主模式,也可以是從模式(其區(qū)別在于FS和SCLK的產(chǎn)生源),本設(shè)計(jì)中AIC工作在主模式,而讓DSP工作在從模式.DSP通過(guò)同步串行接口(SSP)與AIC芯片相連.由DSP產(chǎn)生的數(shù)字波形從SSP的DX引腳進(jìn)行發(fā)送,AIC芯片通過(guò)DIN接收后利用AIC內(nèi)部的D/A功能,將數(shù)字波形轉(zhuǎn)換成模擬波形后從OUTP、OUTM引腳輸出,這樣就可以得到平滑的波形輸出.
由DSP產(chǎn)生的主時(shí)鐘輸出信號(hào)CLKOUT1經(jīng)由D觸發(fā)器構(gòu)成的T’觸發(fā)器的二分頻,提供10 MHz方波信號(hào)給AIC的主時(shí)鐘MCLK.AIC片內(nèi)時(shí)鐘電路以MCLK為時(shí)鐘源,產(chǎn)生、分配諸如采樣速率、SCLK等.
3.2 PC端GUI設(shè)計(jì)利用式(11)遞推公式計(jì)算正弦或余弦值y[n]需要已知cos(ω0T)和正弦/余弦的前兩個(gè)初始值y[0]和y[1].coeff、y[0]和y[1]就是產(chǎn)生正弦或余弦信號(hào)的3個(gè)初始化波形數(shù)據(jù).這3個(gè)數(shù)據(jù)可以通過(guò)圖5所示的用戶軟件界面獲得.
圖5 用戶軟件界面
由于MATLAB具有超強(qiáng)的數(shù)據(jù)處理能力,被廣泛地應(yīng)用于信號(hào)處理、自動(dòng)控制等領(lǐng)域,而且它的圖形用戶界面編程技術(shù)(GUIDE)簡(jiǎn)單易學(xué),即使非專業(yè)人員也能編制出界面友好、功能強(qiáng)大的應(yīng)用程序.因此本設(shè)計(jì)上位機(jī)(PC機(jī)端)控制軟件由Matlab GUI編寫(xiě).利用MATLAB7.X自帶的通信類(SERIAL)和GUI編程技術(shù),方便地開(kāi)發(fā)出波形控制與通信軟件,通過(guò)人機(jī)界面能夠完成對(duì)波形參數(shù)的控制與通信.如圖5所示,通過(guò)“波形選擇”下拉菜單選擇所需產(chǎn)生的波形類型,然后通過(guò)“波形參數(shù)設(shè)置”功能對(duì)波形參數(shù)進(jìn)行調(diào)節(jié),此時(shí)Matlab軟件會(huì)自動(dòng)根據(jù)式(12)或(13)計(jì)算出coeff、y[0]和y[1].最后點(diǎn)擊“Send”按鈕,由PC機(jī)的串行口發(fā)送初始化波形數(shù)據(jù)給DSP.在產(chǎn)生正/余弦信號(hào)的過(guò)程中,由于sinx(或cosx)的值總是小于1的數(shù),而F206 DSP是16位定點(diǎn)處理器,所以要將其乘以215,變成Q15的數(shù)據(jù)格式.但是,由于TMS320F206的異步串行口(ASP)的收發(fā)數(shù)據(jù)字長(zhǎng)是8位,所以在Matlab中計(jì)算初始化波形數(shù)據(jù)并轉(zhuǎn)化為定點(diǎn)格式時(shí),應(yīng)先乘以27,然后在DSP程序中,再將其左移8位(即乘以28),這樣就變成Q15的定點(diǎn)格式了.
3.3 DSP軟件設(shè)計(jì)在使用AIC芯片進(jìn)行D/A轉(zhuǎn)換前,必須首先對(duì)AIC進(jìn)行初始化設(shè)置,即設(shè)置AIC中的D/A轉(zhuǎn)換器的工作模式(15+1bit模式,16bit模式)、抽樣頻率以及輸出增益等.TLV320AIC10的數(shù)據(jù)通信分為主通信和次通信兩個(gè)階段.主通信是正常的數(shù)據(jù)傳輸,次通信是指?jìng)鬏斂刂苹蚺渲脭?shù)據(jù)的過(guò)程在AIC配置為“15+1”模式時(shí),DIN的D0=0表示為無(wú)次通信請(qǐng)求(即表示傳輸波形數(shù)據(jù)),若D0=1則表示正在傳輸控制或配置數(shù)據(jù)(即進(jìn)行AIC芯片的初始化操作).
圖6 輸出結(jié)果顯示
本設(shè)計(jì)采用同步串行口發(fā)送中斷進(jìn)行波形發(fā)生.當(dāng)同步串行口發(fā)送緩沖區(qū)空時(shí)產(chǎn)生SSP發(fā)送中斷,執(zhí)行SSP發(fā)送中斷服務(wù)程序.該中斷服務(wù)程序首先利用前面的y[n-1]和y[n-2],根據(jù)數(shù)字振蕩器算法計(jì)算出新的y[n],并把結(jié)果存放于data2aic單元中.然后將data2aic數(shù)據(jù)的最后一位置0(即設(shè)置為主通信)后,通過(guò)OUT data2aic,ADTR語(yǔ)句輸出給ADTR寄存器,此后AIC芯片自動(dòng)將該數(shù)字波形數(shù)據(jù)進(jìn)行D/A轉(zhuǎn)換后從OUTP、OUTM引腳輸出.如果將示波器的探頭接入此處,我們將在示波器上看到一個(gè)正/余弦信號(hào)波形,如圖6所示.
AWG的應(yīng)用范圍很廣,幾乎覆蓋了所有行業(yè).凡是需要使用其他標(biāo)準(zhǔn)信號(hào)源所不能提供的激勵(lì)信號(hào)的應(yīng)用,都可能是AWG的用武之地.隨著當(dāng)今電子系統(tǒng)越來(lái)越復(fù)雜,AWG正在成為模擬復(fù)雜信號(hào)的事實(shí)標(biāo)準(zhǔn).本設(shè)計(jì)應(yīng)用改進(jìn)的數(shù)字振蕩器算法和DSP技術(shù)完成了AWG的軟硬件設(shè)計(jì)和調(diào)試,測(cè)試結(jié)果表明,該波形發(fā)生器基本達(dá)到了設(shè)計(jì)要求,并具有突出的優(yōu)點(diǎn):靈活性高、重現(xiàn)性和穩(wěn)定性強(qiáng),精度和分辨率高,動(dòng)態(tài)范圍寬,可實(shí)時(shí)性強(qiáng),且成本低廉,有著廣闊的應(yīng)用前景.
參考文獻(xiàn):
[1] 紀(jì)宗南.DSP實(shí)用技術(shù)和應(yīng)用實(shí)例[M].北京:航空工業(yè)出版社,2006:170-175.
[2] 陳子為.DSP系統(tǒng)應(yīng)用與實(shí)訓(xùn)[M].西安:西安電子科技大學(xué)出版社,2008:49-51.
[3] 張恒毅,劉寧.基于數(shù)字頻率合成技術(shù)的任意波形發(fā)生器設(shè)計(jì)與應(yīng)用[J].海洋技術(shù),2009,28(1):78-80.
[4] 姚宇新,錢(qián)煒坤.數(shù)字振蕩器的實(shí)現(xiàn)原理與仿真編程[J].電氣電子教學(xué)學(xué)報(bào),2003,25(1):44-48.
[5] 王江,楊敏,陳亞駿.一種基于DSP的數(shù)字合成正弦波發(fā)生器[J].儀表技術(shù),1999(2):9-11.
[6] 蹇勇,彭龑.一種新型正弦信號(hào)發(fā)生器的設(shè)計(jì)[J].實(shí)驗(yàn)科學(xué)與技術(shù),2006(4):29-30.
[7] 郝小江,石海霞.基于DSP的數(shù)字振蕩器及應(yīng)用[J].自動(dòng)測(cè)量與控制,2007,26(8):70-71.